使用js帮我写一个贪吃蛇
时间: 2023-07-20 19:08:43 浏览: 95
js写贪吃蛇
好的,我可以给你提供一个简单的贪吃蛇的实现,但是需要你自己理解代码并根据需求进行修改和完善。
首先,我们需要一个 HTML 文件来显示游戏画面和引用 JavaScript 文件。以下是一个简单的 HTML 文件示例:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>贪吃蛇</title>
<style>
canvas {
background-color: #eee;
border: 1px solid #999;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400"></canvas>
<script src="snake.js"></script>
</body>
</html>
```
然后,我们创建一个 `Snake` 类来表示贪吃蛇。这个类包含以下属性和方法:
- `canvas`: 画布对象
- `ctx`: 画布上下文对象
- `width`: 画布宽度
- `height`: 画布高度
- `body`: 蛇身体数组
- `direction`: 蛇移动方向
- `food`: 食物对象
- `score`: 得分
- `init()`: 初始化游戏
- `draw()`: 绘制游戏画面
- `update()`: 更新游戏状态
- `checkCollision()`: 检测碰撞
- `addFood()`: 添加食物
- `eatFood()`: 吃掉食物
- `gameOver()`: 游戏结束
```javascript
class Snake {
constructor(canvas) {
this.canvas = canvas;
this.ctx = canvas.getContext('2d');
this.width = canvas.width;
this.height = canvas.height;
this.body = [
{x: 10, y: 10},
{x: 9, y: 10},
{x: 8, y: 10},
];
this.direction = 'right';
this.food = null;
this.score = 0;
}
init() {
this.addFood();
this.draw();
setInterval(() => {
this.update();
this.draw();
}, 100);
}
draw() {
this.ctx.clearRect(0, 0, this.width, this.height);
this.ctx.fillStyle = '#000';
this.body.forEach((p, i) => {
this.ctx.fillRect(p.x * 10, p.y * 10, 10, 10);
if (i === 0) {
this.ctx.fillStyle = '#f00';
this.ctx.fillRect(p.x * 10, p.y * 10, 10, 10);
this.ctx.fillStyle = '#000';
}
});
this.ctx.fillStyle = '#0f0';
this.ctx.fillRect(this.food.x * 10, this.food.y * 10, 10, 10);
this.ctx.fillStyle = '#000';
this.ctx.fillText(`得分: ${this.score}`, 10, 20);
}
update() {
const head = {x: this.body[0].x, y: this.body[0].y};
switch (this.direction) {
case 'right':
head.x++;
break;
case 'left':
head.x--;
break;
case 'up':
head.y--;
break;
case 'down':
head.y++;
break;
}
this.body.unshift(head);
if (this.checkCollision()) {
this.gameOver();
return;
}
if (this.body[0].x === this.food.x && this.body[0].y === this.food.y) {
this.eatFood();
} else {
this.body.pop();
}
}
checkCollision() {
const head = this.body[0];
if (head.x < 0 || head.x >= this.width / 10 || head.y < 0 || head.y >= this.height / 10) {
return true;
}
for (let i = 1; i < this.body.length; i++) {
if (head.x === this.body[i].x && head.y === this.body[i].y) {
return true;
}
}
return false;
}
addFood() {
let x, y;
do {
x = Math.floor(Math.random() * (this.width / 10));
y = Math.floor(Math.random() * (this.height / 10));
} while (this.body.some(p => p.x === x && p.y === y));
this.food = {x, y};
}
eatFood() {
this.score++;
this.addFood();
}
gameOver() {
alert(`游戏结束,得分: ${this.score}`);
location.reload();
}
}
```
最后,在 JavaScript 文件中创建一个 `Snake` 实例,并调用 `init` 方法开始游戏。
```javascript
const canvas = document.getElementById('canvas');
const snake = new Snake(canvas);
snake.init();
```
这就是一个简单的贪吃蛇实现,你可以根据自己的需求进行修改和完善。
阅读全文