Di recente sono entrato in XNA e devo dire che lo adoro. Come una specie di ciao mondo ho deciso di creare il classico gioco "Snake". La versione a 90 gradi era molto semplice e facile da implementare. Ma mentre provo a realizzarne una versione che consenta una rotazione di 360 gradi usando le frecce sinistra e destra, sono entrato in una sorta di problema.
Quello che sto facendo ora deriva dalla versione a 90 gradi: passare da una parte all'altra del corpo del serpente iniziando dalla coda e finendo proprio davanti alla testa. Funziona benissimo quando si sposta ogni 100 millisecondi. Il problema è che crea uno stile di gioco instabile dal momento che tecnicamente il gioco avanza a soli 6 fps anziché a 60 potenziali.
Vorrei spostare il serpente ad ogni ciclo di gioco. Ma sfortunatamente, poiché il serpente si muove al ritmo delle dimensioni della sua testa, va troppo veloce. Ciò significherebbe che la testa dovrebbe muoversi con un incremento molto più piccolo come (2, 2) nella sua direzione piuttosto che quello che ho ora (32, 32). Perché ho lavorato su questo gioco ininterrottamente per un paio di settimane mentre gestivo la scuola, penso di aver riflettuto troppo su come realizzare questo. Probabilmente è una soluzione semplice, non la sto prendendo.
Ecco alcuni pseudo codici per quello che ho provato sulla base di ciò che ha senso per me. Non riesco davvero a pensare a un altro modo per farlo.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Questo produce qualcosa del genere: Code in Action . Come puoi vedere, ogni parte rimane sempre dietro la testa e non produce un effetto "Trail".
Un esempio perfetto di ciò che sto cercando può essere trovato qui: Data Worm . Non la rotazione della finestra ma l'effetto finale dei triangoli.
Grazie per qualsiasi aiuto!