Otros sistemas de Commodore > Commodore VIC-20

Competición Tron

(1/10) > >>

alex:
http://www.vic20listings.freeolamail.com/mag_commag_es.html

Continuamos con la Commodore Magazine en el disco 1. Un poco más abajo tenemos el programa Tron.

Ya tenemos mejores gráficos. Nuestro objetivo es conducir una moto de luz y limpiar la rejilla de programas.

Jugaremos al modo FÁCIL. Os dejo con la sección de Javierglez que nos comenta el listado y nos ofrece muchas modificaciones interesantes para teclear.

La competición comienza hoy mismo y finaliza el Domingo 17 de Marzo por la mañana (España)

                                               El rincón de Javierglez

                         

"Tron"

El título hace pensar en un juego para dos jugadores pero no. Es un jugador que tiene que ir abriendo una ruta para recoger todos los pasajeros de una tirada.
Son dos listados. El primero tiene los datos de los gráficos en líneas DATA. Es típico en los programas de VIC20. Un byte de gráficos en un programa BASIC usando líneas DATA requiere varios bytes. El primer listado se ocupa de cargar el segundo, una vez que los gráficos están en la memoria.

Lo primero que voy a comentar es que el programa tiene un bug que hace que rara vez, pero puede pasar, no se pueda acabar el nivel. Veamos la linea 98

98 FORN=1TOMAN:RP=INT(RND(1)*506)+7680:IFPEEK(RP)<>2 THENRP=RP+1
99 POKERP,10:NEXTN


Lo que hace al poner los pasajeros en el tablero es sacar una casilla de manera aleatoria. RP es la posición de la casilla. Si sale dos veces la misma mete el pasajero en la casilla siguiente, que es RP+1. Pero no controla si ya puso otro pasajero también. En ese caso habrá en pantalla un pasajero menos y no se podrá acabar el nivel.

Pero además el programa utiliza la columna 0 de la pantalla para detectar si el jugador se sale de la zona de juego. Si el jugador se mete en la columna 0 es que se ha salido por el margen izquierdo o por el derecho. Si RP está en la columna 22, RP+1 está en la columna 0. Además no se notará el error, porque esa columna está en color negro.

La fórmula aleatoria de la línea 98 también puede dar una casilla de la columna 0. En este caso el pasajero pasa a la columna 1, sin controlar si ya hay otro pasajero.

Tenéis 2 opciones:

- Jugar con el bugo. Lo vais a notar poco pero cuanto más alto es el nivel más probable es que pase.

- Corregir el bugo:

Sería algo más fácil si el autor no hubiera apegotonado las lineas 96-97-98-99-100-101-102-103-104-105-106-107.

Las líneas 80,96,97,98,99,100,101,102 renumerarlas a 55,60,65,70,80,85,90,95 para hacer hueco. Borrar 96,97,98,99,101,102. Ahora la linea mala es la 70 en vez de la 98.

Lo que originalmente era:
98 FORN=1TOMAN:RP=INT(RND(1)*506)+7680:IFPEEK(RP)<>2 THENRP=RP+1
Dividirlo en dos líneas así.
70 FORN=1TOMAN
75 RP=INT(RND(1)*506)+7680:IFPEEK(RP)<>2 THEN75

La línea 0 del segundo listado lo que hace es cambiar la semilla de la secuencia de números pseudoaleatorios, lo que era RANDOMIZE en otros ordenadores. De lo contrario siempre salen los mismos circuitos en la primera partida tras arrancar el ordenador. La línea 0 se puede quitar si se desea.

Cambios:
- El programa tiene un defecto fastidioso que cuando acaba la partida no quita los ruidos. Hay que editar la linea 4000 para que quede
4000 POKE36874,0:POKE36875,0:POKE36876,0:FORKN=1TO10

- Cambiar las teclas por QAOP. Es especialmente fácil porque la tecla la saca con GETA$. Podéis hacer LIST 120-150 y editar para cambiar "z", "x", "l", "," por "o", "p", "q", "a".

- Que pregunte el nivel de dificultad sólo una vez al principio:
quitar las lineas 4200, 4210, 4215
editar la linea 4160 IFA$="S"THENGOTO4200
cambiar ese 4200 por 4220, la línea debe quedar
4160 IFA$="S"THENGOTO4220

Voy a poner en minuscula para que podais copiar aqui y pegar en VICE esos 3 cambios.
120 ifa$="o"thend=-1:wt=4:ch=0
130 ifa$="p"thend=1:wt=4:ch=0
140 ifa$="q"thend=-22:wt=3:ch=0
150 ifa$="a"thend=22:wt=3:ch=0
4000 poke36874,0:poke36875,0:poke36876,0:forkn=1to10
4160 ifa$="s"thengoto4220
4200
4210
4215

Otras modificaciones.

Estaría bien que el programa esperara un segundo para planificar la ruta. Esto sería fácil si el autor no hubiera apegotonado las lineas 96-97-98-99-100-101-102-103-104-105-106-107. Pero como hay que corregir el bug, de perdidos al río.
- el segundo de espera va a la línea 100 FORT=1TO1000:NEXT
- lo que era 100 IF TYU=1 THEN 103 ahora es 85 IF TYU=1 THEN 100

Podéis copiar aquí y pegar en VICE para hacer este cambio y de paso quitar el bug:

55 forn=38400to38905:poken,6:next
60 forn=7680to8164step22:poken,9:next
65 forn=38400to38884step22:poken,0:next
70 forn=1toman
75 rp=int(rnd(1)*506)+7680:ifpeek(rp)<>2 then75
80 poke rp,10:nextn
85 if tyu=1 then 100
90 forn=1to10:sp=int(rnd(1)*506)+7680:ifpeek(sp)<>2thensp=sp+1
95 pokesp,230:pokesp+30720,0:next
96
97
98
99
100 fort=1to1000:next
101
102
103 pokea,ch:pokea+30720,2:pokea+(-d),wt

Hasta aquí llegó la marea.




alex:

Jeff:
Efectivamente, cambiando a QAOP, se juega de manera mas natural, como en el Spectrum (¿Que es un Spectrum?)

Está entretenido. Saca un poco de quicio que ponga casi todos los muñequitos pegados a la pared.  :o

josepzin:
Casi que dan ganas de meter una linea de codigo mas para que genere una buena puntuación :D

javierglez:
Este lo he tenido que jugar más

2024-02-25 (3).png (23.24 kB . 749x698 - visto 91 veces)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa