JS二维数组做贪吃蛇
时间: 2023-08-12 18:14:54 浏览: 171
好的,我可以帮你讲一下如何用JS二维数组做贪吃蛇游戏。
首先,我们需要定义一个二维数组来表示贪吃蛇所在的游戏场地。数组的每个元素可以表示一个格子,用0表示空格,用1表示蛇身,用2表示食物。
```javascript
var ROW = 20; // 场地行数
var COL = 20; // 场地列数
var ground = []; // 场地数组
// 初始化场地数组
for (var i = 0; i < ROW; i++) {
ground[i] = [];
for (var j = 0; j < COL; j++) {
ground[i][j] = 0;
}
}
```
接着,我们需要定义一个表示贪吃蛇的数组,用一个二维数组来表示蛇的身体。数组的第一个元素表示蛇头,后面的元素表示蛇身。我们可以定义一个变量来表示蛇的初始长度,然后在场地数组中随机选择一些格子,把它们设为蛇身,直到蛇的长度达到初始长度。
```javascript
var snake = []; // 蛇的身体数组
var initLength = 3; // 蛇的初始长度
// 初始化蛇身体数组
for (var i = 0; i < initLength; i++) {
snake[i] = {row: 0, col: i}; // 蛇头在第0行,第i列
ground[0][i] = 1; // 把场地数组中的对应格子设为蛇身
}
```
接下来,我们需要实现贪吃蛇的移动逻辑。每当蛇移动一格,我们需要把蛇头向前移动一格,并把新的位置设为蛇头。然后我们需要判断蛇头是否撞到了边界或者撞到了自己的身体。如果蛇头撞到了食物,我们需要在场地数组中随机选择一个空格子,把它设为食物。然后我们把蛇的长度加1,并把新的位置设为蛇头。如果蛇头没有撞到边界或者撞到自己的身体,我们需要把蛇尾的位置设为0,表示蛇离开了这个位置。最后,我们需要把新的蛇身体位置设为1,表示蛇移动到了这个位置。
```javascript
var direction = "right"; // 蛇的移动方向
function move() {
// 根据方向计算新的蛇头位置
var newHead = {
row: snake[0].row,
col: snake[0].col
};
switch (direction) {
case "up":
newHead.row--;
break;
case "down":
newHead.row++;
break;
case "left":
newHead.col--;
break;
case "right":
newHead.col++;
break;
}
// 判断蛇头是否撞到边界或者撞到自己的身体
if (newHead.row < 0 || newHead.row >= ROW ||
newHead.col < 0 || newHead.col >= COL ||
ground[newHead.row][newHead.col] === 1) {
// 游戏结束
return false;
}
// 判断蛇头是否撞到食物
if (ground[newHead.row][newHead.col] === 2) {
// 在场地数组中随机选择一个空格子,设为食物
var food = randomFood();
ground[food.row][food.col] = 2;
// 把新的位置设为蛇头
snake.unshift(newHead);
// 蛇的长度加1
length++;
} else {
// 把蛇尾的位置设为0
var tail = snake.pop();
ground[tail.row][tail.col] = 0;
// 把新的位置设为蛇头
snake.unshift(newHead);
}
// 把新的蛇身体位置设为1
ground[newHead.row][newHead.col] = 1;
return true;
}
```
最后,我们需要实现键盘事件,来控制贪吃蛇的移动方向。当用户按下方向键时,我们改变方向变量的值。
```javascript
document.addEventListener("keydown", function(event) {
switch (event.keyCode) {
case 37: // left arrow
if (direction !== "right") {
direction = "left";
}
break;
case 38: // up arrow
if (direction !== "down") {
direction = "up";
}
break;
case 39: // right arrow
if (direction !== "left") {
direction = "right";
}
break;
case 40: // down arrow
if (direction !== "up") {
direction = "down";
}
break;
}
});
```
好了,以上就是用JS二维数组做贪吃蛇游戏的基本实现。当然,还有很多细节需要处理,比如如何随机生成食物,如何计分等等。希望对你有所帮助!
阅读全文