Pregunta

Estoy escribiendo un juego de la serpiente en TI-Basic, y cada vez que mover Necesito ver si la cabeza de la serpiente ha afectado a cualquier punto de la cola. La cola se almacena como una cola basada en la lista circular, y puedo añadir el principio y el final en un tiempo constante.

La única parte difícil es que tengo que hacer algo similar a esto en cada iteración: (S = tamaño de la lista)

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

Es un circuito bastante corto, pero se necesita siempre, incluso en una lista de 10 elementos. Probé la forma en secuencia:

If sum(seq(X=LX(I) and Y=LY(I),I,1,S))
...

El único otro optimización que se me ocurre es que no verificar los valores de N a N + 2 (porque la primera parte de su cola que es posible éxito está en N + 3), pero que sólo aplaza el problema después de 4 puntos, y que tiene el juego no se puede reproducir con 14 puntos no es mejor que ser unplayable después de 10 puntos.

Uso de montaje no es una opción porque no tengo un cable de enlace (o el deseo de escribir montaje).

¿Fue útil?

Solución

Nunca utiliza TI-Basic ...

pero ¿qué hay también almacenar una matriz 2D del tablero de juego. Cada elemento de matriz que indica si la serpiente está presente. Cuando se mueve hacia adelante, establecer el valor de la matriz en el punto de la cabeza, y claro el valor en el punto final de la cola de edad. A continuación, a prueba de choque, que sólo se puede hacer una consulta de la matriz en 2D.

Otros consejos

El bloque entero:

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

puede ser reemplazado con:

If sum(X=LX and Y=LY)
Then
    Disp "Game Over"
    Return
End

X=LX se aplica la prueba a trozos a cada elemento de LX, y lo mismo pasa con Y=LY. Los controles sum() si hay un 1 en la intersección de las dos listas.

Lo que hice, cuando estaba programando la serpiente, era comprobar si el píxel delante de la serpiente estaba en marcha. Si lo fuera, me gustaría comprobar si este píxel es el píxel "comida", de lo contrario, el juego se detendría.

ejemplo, con I y J siendo de cabeza y cola posiciones, (F, G) es la dirección de la serpiente, y (M, N) siendo la comida.

if Pxl-Test(I+F, J+G) #pixel in front of snake
then
if I+F=M and J+G=N
stop
end

Mucho más memoria de conservante que una matriz 2D.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top