我正在构建一个Snake街机游戏,尽管该游戏正常运行,但我仍在尝试进行调整,以使苹果永远不会出现在与蛇群之一相同的位置(对于那些不喜欢蛇的人)不知道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));
};
};
在我看来,这一切都很正确,但是我仍然是一个新手,还是OOP的新手。我不确定是否正确编写了Apple.prototype.move
方法,以便它永远不会将苹果放在蛇的身体的某个部位。发生这种情况的可能性很低,因此为了确定我将不得不坐下来玩几个小时。任何输入将不胜感激。
注意:使用以下代码将游戏区域划分为由10x10像素区域组成的行和列的网格系统:
var blockSize = 10;
var widthInBlocks = width/blockSize;
var heightInBlocks = height/blockSize;
谢谢。
答案 0 :(得分:1)
在检查苹果位置是否与蛇形段冲突时,您在Apple.prototype.move
函数中似乎有一个错误。
您正在计算苹果位置(randomCol
,randomRow
),但是在检查每个蛇形段时不使用这些值。
此外,如果您希望遇到冲突,请致电this.move()
。但是,在该函数返回之后,您将继续完成上一个for
循环中所有剩余的迭代。
可以通过以下更改来解决这些问题:
for (i = 0; i < Snake.segments; i++) {
if (randomCol === Snake.segments[i].col && randomRow === Snake.segments[i].row) {
return this.move();
};
};