Sto facendo snake per un progtto.
Ho dei problemi con la funzione movimento, qualcuno sa indicarmi dov'è l'errore? E' sicuramente li perché tutto il resto se commento quella porzione di codice funziona bene.
codice:
// FUNZIONE DEL MOVIMENTO
function move() {
var new_head = testa;
var new_tail = coda;
var risultato = "vivo"; // stato del serpente
var nuovaTesta, nuovaCoda; // valore delle nuove coordinate
var vecchiaTesta, vecchiaCoda; // valore delle vecchie coordinate
switch (direzione) { // calcolo posizione e valore della nuova testa
case "su":
new_head+=50;
nuovaTesta="piena"
break;
case "giu":
new_head= testa-50;
nuovaTesta="piena";
break;
case "sinistra":
new_head=testa-1;
nuovaTesta="piena";
break;
case "destra":
new_head+=1;
nuovaTesta="piena";
break;
}
if(new_head<49 || new_head>(49*49-1) || ((new_head/49+1)=0) || (new_head/(2*(49))=0))// controllo eventuali incidenti
risultato = "morto";
else if(getCell(new_head)!="vuota") {
risultato = "morto";
if(getCell(new_head)=="cibo")
risultato="cibo";
}
if (risultato!="morto") { // setto la nuova testa
vecchiaTesta = getOldHead();
setCell(testa,vecchiaTesta);
setCell(new_head,nuovaTesta);
if (vecchiaTesta!="orizzontale"&& vecchiaTesta!="verticale")
direzioneCoda[direzioneCoda.length]=direzione;
}
else {
setCell(testa,vecchiaTesta + "morto");
}
// CALCOLO POSIZIONE DELLA NUOVA CODA
switch (direzioneCoda[0]) {
case "su":
new_tail += 50;
break;
case "giu":
new_tail = new_tail-50;
break;
case "sinistra":
new_tail = new_tail-1;
break;
case "destra":
new_tail+= 1;
break;
}
// CALCOLO VALORE DELLA NUOVA CODA
vecchiaCoda=getCell(new_tail);
if (vecchiaCoda!="orizzontale" && vecchiaCoda!="verticale"&& risultato!="cibo") // e' tempo di girare la coda
direzioneCoda=direzioneCoda.slice(1); // rimuovo il primo elemento dell'array
switch (direzioneCoda[0]) {
case "su":
nuovaCoda="piena";
break;
case "giu":
nuovaCoda="piena";
break;
case "sinistra":
nuovaCoda="piena";
break;
case "destra":
nuovaCoda="piena";
break;
}
// SETTO LA NUOVA CODA
if (risultato=="vivo") {
setCell(coda,"vuota");
setCell(new_tail, nuovaCoda);
}
else {
if (risultato=="cibo") {
putFood();
score+=240/velocità;
}
if (score>hs) {
hs=score;
setHighScore(hs);
}
setScore();
}
// AGGIORNO POSIZIONE DELLA TESTA E DELLA CODA
testa=new_head;
if (risultato!="food")
coda=new_tail;
vecchiaDirezione=direzione;
if (risultato!="morto") // se non e morto proseguo col movimento
t_out=setTimeout("move()",velocita);
else
isPlaying=false;
}
function getOldHead() { // ottengo il valore da mettere in testa
switch (direzione)
{
case "su":
if (vecchiaDirezione=="su"||vecchiaDirezione=="giu") return "verticale";
if (vecchiaDirezione=="sinistra") return "ne";
if (vecchiaDirezione=="destra") return "no";
break;
case "giu":
if (vecchiaDirezione=="su"||vecchiaDirezione=="giu") return "verticale";
if (vecchiaDirezione=="giu") return "se";
if (vecchiaDirezione=="destra") return "so";
break;
case "sinistra":
if (vecchiaDirezione=="sinistra"||vecchiaDirezione=="destra") return "orizzontale";
if (vecchiaDirezione=="su") return "sw";
if (vecchiaDirezione=="giu") return "nw";
break;
case "destra":
if (vecchiaDirezione=="sinistra"||vecchiaDirezione=="destra") return "orizzontale";
if (vecchiaDirezione=="su") return "se";
if (vecchiaDirezione=="giu") return "ne";
break;
}
}