帮我用js写一个贪吃蛇demo
时间: 2023-08-20 10:22:43 浏览: 153
好的,以下是一个简单的贪吃蛇demo,代码中有注释说明:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>贪吃蛇</title>
<style>
/* 定义蛇和食物的样式 */
.snake, .food {
width: 20px;
height: 20px;
position: absolute;
background-color: green;
}
/* 定义游戏区域的样式 */
#game {
width: 500px;
height: 500px;
position: relative;
margin: auto;
border: 1px solid black;
}
</style>
</head>
<body>
<div id="game"></div>
<script>
// 获取游戏区域
var game = document.getElementById('game');
// 定义蛇的初始位置、长度和移动方向
var snake = [{x: 0, y: 0}, {x: 20, y: 0}, {x: 40, y: 0}];
var snakeLength = 3;
var direction = 'right';
// 定义食物的初始位置
var food = {x: 200, y: 200};
// 初始化游戏
function init() {
// 绘制蛇和食物
drawSnake();
drawFood();
// 开始移动蛇
setInterval(moveSnake, 100);
}
// 绘制蛇
function drawSnake() {
// 删除之前的蛇
var oldSnake = document.getElementsByClassName('snake');
while (oldSnake.length > 0) {
game.removeChild(oldSnake[0]);
}
// 绘制新的蛇
for (var i = 0; i < snakeLength; i++) {
var s = document.createElement('div');
s.className = 'snake';
s.style.left = snake[i].x + 'px';
s.style.top = snake[i].y + 'px';
game.appendChild(s);
}
}
// 绘制食物
function drawFood() {
// 删除之前的食物
var oldFood = document.getElementsByClassName('food');
while (oldFood.length > 0) {
game.removeChild(oldFood[0]);
}
// 绘制新的食物
var f = document.createElement('div');
f.className = 'food';
f.style.left = food.x + 'px';
f.style.top = food.y + 'px';
game.appendChild(f);
}
// 移动蛇
function moveSnake() {
// 根据移动方向更新蛇头位置
var head = {x: snake[0].x, y: snake[0].y};
if (direction == 'right') {
head.x += 20;
} else if (direction == 'left') {
head.x -= 20;
} else if (direction == 'up') {
head.y -= 20;
} else if (direction == 'down') {
head.y += 20;
}
// 判断是否吃到食物
if (head.x == food.x && head.y == food.y) {
// 食物被吃掉,蛇变长,重新生成食物
snakeLength++;
food.x = Math.floor(Math.random() * 25) * 20;
food.y = Math.floor(Math.random() * 25) * 20;
drawFood();
}
// 更新蛇的位置
snake.unshift(head);
snake.pop();
drawSnake();
// 判断是否撞墙或咬到自己
if (head.x < 0 || head.y < 0 || head.x >= 500 || head.y >= 500) {
alert('游戏结束!');
location.reload();
}
for (var i = 1; i < snake.length; i++) {
if (head.x == snake[i].x && head.y == snake[i].y) {
alert('游戏结束!');
location.reload();
}
}
}
// 监听方向键事件,更新移动方向
document.onkeydown = function(e) {
if (e.keyCode == 37 && direction != 'right') {
direction = 'left';
} else if (e.keyCode == 38 && direction != 'down') {
direction = 'up';
} else if (e.keyCode == 39 && direction != 'left') {
direction = 'right';
} else if (e.keyCode == 40 && direction != 'up') {
direction = 'down';
}
}
// 初始化游戏
init();
</script>
</body>
</html>
```
这个demo比较简单,只实现了贪吃蛇的基本功能,你可以在此基础上继续完善。
阅读全文