Я строю аркадную игру Snake, и хотя игра запущена и работает хорошо, я пытаюсь настроить игру так, чтобы яблоко никогда не появлялось в том же месте, что и один из сегментов змеи (для тех, кто неНе знаю, Снейк, это классическая аркадная игра, в которой змея скользит по экрану, поедая яблоки, которые появляются случайным образом, стараясь не врезаться в себя или в стену и не увеличиваться в длине каждый раз, когда съедает яблоко).Вот код ниже, который перемещает яблоко по экрану:
Apple.prototype.move = function() {
var randomCol = Math.floor(Math.random()*(widthInBlocks-2)) +1;
var randomRow = Math.floor(Math.random()*(heightInBlocks-2)) +1;
this.position = new Block(randomCol, randomRow);
for (i = 0; i < Snake.segments; i++) {
if (this.position === Snake.segments[i].col && Snake.segments[i].row) {
this.move();
};
};
}
Конструктор для змеи выглядит следующим образом:
var Snake = function() {
this.segments = [
new Block(7, 5),
new Block(6, 5),
new Block(5, 5)
];
this.direction = "right";
this.nextDirection = "right";
};
А код для рисования змеи выглядит следующим образом:
//function to toggle the colour of the snake's segments
function alternateColour(i) {
var colours = ["limegreen", "yellow"];
if (i % 2 === 0) {
return colours[0];
} else {
return colours[1];
};
};
//draw snake method
Snake.prototype.draw = function() {
this.segments[0].drawSquare("blue"); //snake head will always be blue
for (i = 1; i < this.segments.length; i++) {
this.segments[i].drawSquare(alternateColour(i));
};
};
Для меня все это выглядит правильно, но я все еще большой новичок и все еще новичок в ООП.Я не уверен, правильно ли я написал метод Apple.prototype.move
, чтобы он никогда не поместил яблоко в часть сегмента тела змеи.Вероятность того, что это произойдет, невелика, поэтому, чтобы знать наверняка, мне пришлось бы часами сидеть и играть в игру.Будем благодарны за любые входные данные.
Примечание: игровая зона разделена на сетку из строк и столбцов, состоящих из 10х10 пикселей, с использованием следующего кода:
var blockSize = 10;
var widthInBlocks = width/blockSize;
var heightInBlocks = height/blockSize;
Спасибовы.