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