Question

J'écris un jeu de serpent dans TI-Basic, et chaque fois que je passer Je dois voir si la tête du serpent a frappé un point quelconque dans la queue. La queue est stockée sous la forme d'une file d'attente sur la base de la liste circulaire, et je peux ajouter le début et la fin en temps constant.

La seule partie difficile est que je dois faire quelque chose de semblable à ce à chaque itération: (S = Taille de la liste)

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

Il est une boucle assez court, mais il faut toujours, même sur une liste de 10 articles. J'ai essayé la voie de séquence:

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

La seule autre optimisation que je peux penser est de ne pas vérifier les valeurs de N à N + 2 (parce que la première partie de votre queue qui est possible de frapper est à N + 3), mais que seulement met hors le problème après 4 points, et ayant le jeu injouable avec 14 points est pas mieux que d'être injouable après 10 points.

L'utilisation est l'assemblage pas une option parce que je n'ai pas un câble de liaison (ou le désir d'écrire l'assemblage).

Était-ce utile?

La solution

Jamais utilisé ... TI-Basic

mais comment sur le stockage aussi un tableau 2D de la carte de jeu. Chaque élément de ce tableau indique si le serpent est présent. Lorsque vous avancez, définissez la valeur du tableau au point de la tête, et effacer la valeur à l'ancien point d'extrémité de la queue. Ensuite, pour tester la collision, vous pouvez juste faire une recherche dans le tableau 2D.

Autres conseils

Le bloc entier:

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

peut être remplacé par:

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

X=LX applique par morceaux de test à chaque élément de LX, et la même chose pour Y=LY. Les contrôles de sum() s'il y a un 1 à l'intersection des deux listes.

Ce que je faisais, quand je programmais serpent, était de vérifier si le pixel devant le serpent était. Si c'était, je vérifie si ce pixel est le pixel « alimentaire », sinon, le jeu s'arrêterait.

Exemple, avec I et J étant des positions de tête et de queue, (F, G) étant la direction du serpent, et (M, N) étant la nourriture.

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

Beaucoup plus que la mémoire-conservant un tableau 2D.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top