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; } }

Rispondi quotando