2010-07-07 8 views
8

necesito una manera de encontrar si el personaje ('<') ha chocado contra un muro (píxel Negro gráfico)Ayuda: Función de la ojeada ZX81 'BASIC'

-En un juego ZX81.

Estoy estado buscando en otro juego ... que utiliza código

si peek (PEEK 16398 + 256 * peek 16399) = Código "blackpixel gráfico" entonces ...

Qué parece funcionar para ellos ...

¿Es este código correcto?

No soy realmente conocedor de direcciones y obtener memoria y esas cosas.

Por favor, ayúdame ...

-Si saben una mejor manera. Responda :) - Alguien mencionó 'posición del cursor' ¿qué diablos es eso en un ZX81? Gracias,

+5

+1 Para una pregunta sobre cómo programar un ZX81 en 2010 :) – Andy

Respuesta

5

PEEK(PEEK 16398+256*PEEK 16399) es una expresión idiomática que significa “obtener el número de caracteres en la posición de impresión actual”. Esto funciona porque la palabra de dos bytes en 16398 es utilizada por el ZX81 BASIC/ROM para almacenar un puntero a la ubicación de la memoria en el bloque de datos de pantalla correspondiente a la posición de IMPRESIÓN.

Así que para hacer la detección de colisiones, usted primero tiene que establecer:

PRINT AT X,Y; 

coordenadas de donde el > está a punto de pasar, a continuación, leer

LET C= PEEK(PEEK 16398+256*PEEK 16399) 

entonces puede imprimir el > en la pantalla (sobrescribiendo el carácter anterior cuyo código ahora está en C) si lo desea antes de hacer el control:

IF C=128 THEN ... 

(supongo que el carácter que desea es el carácter de color negro 128, █.)

Oh chico, me siento viejo.

+0

Ok muchas gracias. Se escucha perfecto. Déjame intentarlo, un problema: dijiste 'imprimir en X, Y' ¿dónde está por moverse? ¿Te refieres a dónde se está moviendo ahora? -Estoy confundido acerca de cómo puede imprimirlo, luego, después de la observación, 'usted puede imprimir el>' ¿lo imprime dos veces? =/ –

+1

'PRINT AT' sin una cadena simplemente establece la posición del cursor de impresión. – bobince

+0

Guau, nunca lo supe =] Muchas gracias. -Thats el consejo que necesitaba =] –

1

Vaya, esto vuelve. No he usado un ZX81, pero escribí algunos juegos en un TRS-80 en el pasado.

La parte interior:

(peek 16,398 + 256 * peek 16399)

está tomando más o menos el valor de dos posiciones de memoria (8 bits) y la creación de un bit 16

número de ellos, que luego se usa como la dirección del vistazo externo; es posible volver a escribir esto como:

addrToCheck = (PEEK 16398 + 256 * peek 16399)

pixelValue = PEEK (addrToCheck)

si pixelValue = código "blackpixel gráfico" entonces ...

Supongo que el valor 'addrToCheck' es en realidad la posición del personaje en el juego, expresada como una dirección en la pantalla. Entonces, si el valor no es un muro, entonces actualizaría los valores en la dirección 16398 y 16399 con una nueva posición de carácter (sin duda, usando un 'poke').

Esperanza esto ayuda

+0

¿Posición del personaje en el juego? ¿Cómo podría configurar eso? –

+0

Escogiendo una ubicación de memoria (o ubicaciones, aparentemente, de acuerdo con la fuente original) para usar, inicializándola en la ubicación de la memoria de pantalla en la que desea que comience el personaje, y listo. – jackjumper