O-Trix by oblo

Juegos, aplicaciones, ROMs;
todo lo que se pueda ejecutar en un Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

O-Trix by oblo

Mensaje por oblo » Mié Jul 13, 2011 9:40 pm

Hola a todos

Después de varias semanas dándome de cabezazos, al final consigo volver al desarrollo del Spectrum con un clon del Tetris: O-Trix. Está completamente escrito en BASIC, usando principalmente BASIN, BorIDE en la fase final de adaptación del código a la sintaxis del ZX Basic Compiler de Boriel (gracias por la ayuda!) y está compilado con la versión 1.2.8 del mismo.
He ido recogiendo métodos y buenas practicas de todos los sitios que he podido, aunque si alguien se molesta en ver el código, seguro que detecta que he metido alguna 'patada' que otra. Aunque es una versión jugable y testeada, hay algunos bugs y características no implementadas, a saber:

- Las barras de stats azul y verde se superponen, a veces la azul en la verde y otras al revés.
- Cuando se reescribe la pantalla al hacer lineas, aparecen manchas durante el borrado del mismo color de la ultima pieza
- Las piezas son "random". Cargando y ejecutando el juego de la misma forma, el orden de las piezas siempre es el mismo y no tengo claro como hacer un random verdadero. En un PC es fácil porque leyendo la hora, características hardware, etc... lo consigo, pero en un Spectrum no sé como (con Randomizes al inicio del código lo único que consigo es obtener otro set, pero siempre el mismo orden)

No implementado pero espero hacerlo en una futura versión:
- Tecla de caída libre
- Música de fondo para 128k (aunque mientras os recomiendo escuchar http://www.youtube.com/watch?v=hWTFG3J1CP8)
- Posibilidad de almacenar una pieza de reserva
- Modo de juego por fases, como la versión arcade de Atari
- Mejores puntuaciones

Tanto el código como el .TZX lo podéis bajar de http://www.megaupload.com/?d=KIAPM8UU

Saludos y a ver que os parece :)

Avatar de Usuario
salvacam
Jack The Nipper
Mensajes: 174
Registrado: Mar Dic 29, 2009 11:49 pm
Ubicación: Granada
Contactar:

Re: O-Trix by oblo

Mensaje por salvacam » Jue Jul 14, 2011 1:03 am

Me lo acabo de bajar, me lo pasare ahora a la dingoo a ver si lo pruebo antes de dormir.

oblo escribió: Está completamente escrito en BASIC, usando principalmente BASIN, BorIDE en la fase final de adaptación del código a la sintaxis del ZX Basic Compiler de Boriel (gracias por la ayuda!) y está compilado con la versión 1.2.8 del mismo.


A ver si puedes explicar como adaptas el codigo que creas en BASIN al ZX Basic, ya que estuve probando algunas cosas escritas en basin y no me las compilaba.

Un saludo, y ya te comentare el juego despues de probarlo.

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: O-Trix by oblo

Mensaje por na_th_an » Jue Jul 14, 2011 9:44 am

oblo escribió:- Las piezas son "random". Cargando y ejecutando el juego de la misma forma, el orden de las piezas siempre es el mismo y no tengo claro como hacer un random verdadero. En un PC es fácil porque leyendo la hora


En Spectrum puedes hacerlo de forma parecida. Cuando enciendes el Spectrum se inicia un timer que debería estar activo si no has cambiado la rutina de servicio de interrupción que viene por defecto (supongo que no lo has hecho). Hay tres variables del sistema que dan el valor de 24 bits de este timer. Puedes usarlo en un RANDOMIZE. En realidad, creo que te será suficiente usando el valor del byte menos significativo:

Código: Seleccionar todo

Randomize Peek 23672


Más información sobre las variables del sistema en Google, por ejemplo aquí: http://www.users.globalnet.co.uk/~jg27p ... r03_97.htm

Otra cosa que puedes hacer para tener más aleatoriedad es "depender" de la respuesta del usuario. Te explico: probablemente (no he mirado el código) calculas un número aleatorio cada vez que vas a sacar una nueva pieza. Por tanto, siempre salen las mismas piezas para un mismo Randomize, es lógico. Lo que puedes hacer es calcular un número aleatorio cada vuelta del bucle principal del juego. De este modo se está avanzando en la serie prefijada de números "pseudoaleatorios" un número indeterminado de veces antes de que tengas que "sacar" la siguiente pieza. No sé si me explico :)

salvacam escribió:A ver si puedes explicar como adaptas el codigo que creas en BASIN al ZX Basic, ya que estuve probando algunas cosas escritas en basin y no me las compilaba.

Un saludo, y ya te comentare el juego despues de probarlo.


No hay que hacer demasiados cambios, en realidad. Si tu código no está cuajado de READ y de DATA, por supuesto. Entre otras cosas, lo más gordo es "terminar" los IFs con un End If, y poco mas:

Código: Seleccionar todo

1030 IF a = 3 THEN PRINT "Hola": GOTO 20


se cambiaría por

Código: Seleccionar todo

1030 If a = 3 Then Print "Hola": Goto 20: End If


Aunque lo suyo es programar directamente en el dialecto (casi 100% BASIC estándar + idiosincrasias spectrumiles) y tener código mucho más legible:

Código: Seleccionar todo

If a = 3 Then
   Print "Hola"
   Goto inicio
End If

Avatar de Usuario
JBGV
Manic Miner
Mensajes: 279
Registrado: Vie Feb 11, 2011 9:16 am

Re: O-Trix by oblo

Mensaje por JBGV » Jue Jul 14, 2011 10:06 am

Hola, ya he estado probando el juego, creo que está muy logrado.

Con respecto a los números aleatorios, para que no salga siempre la misma secuencia, yo simplemente pongo como semilla

Código: Seleccionar todo

RANDOMIZE 0


Creo que esto hace que los RND salgan según el tiempo que ha estado encendido el ZX (creo).

No se si es esto cierto o no, pero el caso es que parece funcionar.

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: O-Trix by oblo

Mensaje por na_th_an » Jue Jul 14, 2011 10:17 am

JBGV escribió:Hola, ya he estado probando el juego, creo que está muy logrado.

Con respecto a los números aleatorios, para que no salga siempre la misma secuencia, yo simplemente pongo como semilla

Código: Seleccionar todo

RANDOMIZE 0


Creo que esto hace que los RND salgan según el tiempo que ha estado encendido el ZX (creo).

No se si es esto cierto o no, pero el caso es que parece funcionar.

Esto es cierto en el intérprete de BASIC (RANDOMIZE = RANDOMIZE 0 y emplean el valor del timer como semilla)... Pero ¿es cierto en el compilador ZX Basic?

Avatar de Usuario
JBGV
Manic Miner
Mensajes: 279
Registrado: Vie Feb 11, 2011 9:16 am

Re: O-Trix by oblo

Mensaje por JBGV » Jue Jul 14, 2011 10:29 am

salvacam escribió:
A ver si puedes explicar como adaptas el codigo que creas en BASIN al ZX Basic, ya que estuve probando algunas cosas escritas en basin y no me las compilaba.

Un saludo, y ya te comentare el juego despues de probarlo.



Además de los "END IF", yo al principio tuve problemas con las matrices, las usaba antes de definirlas.

A mi me ayudo mucho en este foro el tema "Un compilador de ZX Spectrum BASIC" y el foro de la propia página de Boriel

http://www.boriel.com/forum/zx-basic-compiler/


Esto es cierto en el intérprete de BASIC (RANDOMIZE = RANDOMIZE 0 y emplean el valor del timer como semilla)... Pero ¿es cierto en el compilador ZX Basic?



Hola Na_th_an, yo creo que con el compilador también funciona, de hecho lo he usado en los dos juegos porque veía que siempre salía la misma secuencia y al meter el RANDOMIZE 0 se corregía.

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: O-Trix by oblo

Mensaje por na_th_an » Jue Jul 14, 2011 11:04 am

Perfecto, pues duda resuelta :-D Había puesto el código para hacerlo de forma explícita porque no estaba seguro de que Boriel hubiese seguido la misma implementación para RANDOMIZE (o si usaba la rutina de la ROM o no) y este comando no está documentado aún en la wiki.

Avatar de Usuario
salvacam
Jack The Nipper
Mensajes: 174
Registrado: Mar Dic 29, 2009 11:49 pm
Ubicación: Granada
Contactar:

Re: O-Trix by oblo

Mensaje por salvacam » Jue Jul 14, 2011 3:51 pm

Ya he conseguido hacerlo funcionar, con paciencia me leere la wiki del compilador.http://www.boriel.com/wiki/en/index.php/ZXBasic

Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

Re: O-Trix by oblo

Mensaje por oblo » Jue Jul 14, 2011 7:23 pm

Gracias por lo del RANDOMIZE 0, aunque en un emulador se nota menos (siempre abro el .tzx directamente, se abre el emulador, pulso S y siempre se repite el set la primera vez -si pulso A obtengo otro set pero misma secuencia) así que la manera que hay fiable es no solo hacer el RANDOMIZE 0, si no esperar un tiempo a arrancar el juego y no hacerlo a toda velocidad.
No obstante, he metido el cambio y también me han 'soplado' el fallo que hacía que al borrar líneas se viese unas manchas del mismo color que la última pieza, así que aquí os dejo la versión revisada: http://www.megaupload.com/?d=K2NIHW1Y

JBGV: como te ha dicho na_th_an no es complicado hacer el cambio de código para adaptarlo al compilador ZX Basic; lo próximo que haga quiero hacerlo directamente pensando el compilador, y así usar las ventajas de los nuevos comandos que trae.

salu2

Avatar de Usuario
salvacam
Jack The Nipper
Mensajes: 174
Registrado: Mar Dic 29, 2009 11:49 pm
Ubicación: Granada
Contactar:

Re: O-Trix by oblo

Mensaje por salvacam » Jue Jul 14, 2011 8:31 pm

Buenas:
Ayer me di cuenta que cuando cambias de velocidad, al terminar la partida aunque en el menu cambia la velocidad en el juego sigue a la misma velocidad.
Despues probare la nueva versión.
Un saludo.

Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

Re: O-Trix by oblo

Mensaje por oblo » Jue Jul 14, 2011 10:52 pm

Pues es verdad; aunque le digo que imprima el valor 'velocidad' que haya en ese momento, pinta 5 y el valor real no lo coge. Otra cosa a repasar, aunque esta es sencilla :)

salu2

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: O-Trix by oblo

Mensaje por na_th_an » Vie Jul 15, 2011 8:49 am

oblo escribió:Gracias por lo del RANDOMIZE 0, aunque en un emulador se nota menos (siempre abro el .tzx directamente, se abre el emulador, pulso S y siempre se repite el set la primera vez -si pulso A obtengo otro set pero misma secuencia) así que la manera que hay fiable es no solo hacer el RANDOMIZE 0, si no esperar un tiempo a arrancar el juego y no hacerlo a toda velocidad.
No obstante, he metido el cambio y también me han 'soplado' el fallo que hacía que al borrar líneas se viese unas manchas del mismo color que la última pieza, así que aquí os dejo la versión revisada: http://www.megaupload.com/?d=K2NIHW1Y

JBGV: como te ha dicho na_th_an no es complicado hacer el cambio de código para adaptarlo al compilador ZX Basic; lo próximo que haga quiero hacerlo directamente pensando el compilador, y así usar las ventajas de los nuevos comandos que trae.

salu2


Prueba lo que te he dicho. Simplemente añade un Let X = Rnd en medio del bucle del juego y verás como se aleatoriza mucho más.

Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

Re: O-Trix by oblo

Mensaje por oblo » Vie Jul 15, 2011 4:34 pm

Cierto, muchas gracias por el truco :)

salu2

Baron Ashler
rst 0
Mensajes: 24
Registrado: Jue May 26, 2011 9:51 am
Ubicación: Sevilla
Contactar:

Re: O-Trix by oblo

Mensaje por Baron Ashler » Mar Jul 26, 2011 8:57 pm

Me ha parecido un tetris muy bueno y tecnicamente muy bien resuelto. El modo avanzado es una putadilla :lol: :lol:

Gracias por facilitar la fuente en basic... me va a venir muy bien para seguir aprendiendo...

Por cierto, cuando puedas, dame un toque y te paso la documentación que utilicé para meterle musica a mi "Aahku" (que mal suena eso :lol: :lol: :lol: ), por si sigues con la idea de ponerle musica :wink:

Avatar de Usuario
oblo
Sabreman
Mensajes: 327
Registrado: Lun Feb 07, 2011 9:53 am

Re: O-Trix by oblo

Mensaje por oblo » Mar Jul 26, 2011 10:05 pm

Gracias, fue un método rápido de 'suplantar' lo de las fases :roll: Y sobre la música te acabo de mandar un privado :)

salu2

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 7 invitados