Почему бы код
//выход за пределы поля
if (snakeArray[lastI].x > 19) {
alert("You LOSE" + " POINTS: " + POINTS);
clearInterval(idInterval)
return;
} else if (snakeArray[lastI].y > 19){
alert("You LOSE" + " POINTS: " + POINTS);
clearInterval(idInterval)
return;
} else if (snakeArray[lastI].y < 0) {
alert("You LOSE" + " POINTS: " + POINTS);
clearInterval(idInterval)
return;
} else if (snakeArray[lastI].x < 0) {
alert("You LOSE" + " POINTS: " + POINTS);
clearInterval(idInterval)
return;
}
не записать так:
if (snakeArray[lastI].x > 19 || snakeArray[lastI].y > 19 || snakeArray[lastI].y < 0 || snakeArray[lastI].x < 0) {
alert("You LOSE POINTS: " + POINTS);
clearInterval(idInterval)
return;
}
В фф у меня тоже остаются квадратики.
И ещё. Код в блоках if else вроде одинаковый? (строки с 189 по 240). Тогда нет смысла вообще проверять направление.