用JS写一个贪吃蛇的网页动画
时间: 2023-09-10 20:15:35 浏览: 79
好的,以下是一个简单的贪吃蛇游戏的代码示例:
```html
<!DOCTYPE html>
<html>
<head>
<title>贪吃蛇游戏</title>
<style>
#game-board {
width: 300px;
height: 300px;
border: 1px solid black;
position: relative;
}
.snake {
width: 10px;
height: 10px;
background-color: green;
position: absolute;
}
.food {
width: 10px;
height: 10px;
background-color: red;
position: absolute;
}
</style>
</head>
<body>
<div id="game-board">
<!-- 初始蛇 -->
<div class="snake" id="snake-head"></div>
<div class="snake" style="left: 10px;"></div>
<div class="snake" style="left: 20px;"></div>
<!-- 初始食物 -->
<div class="food" id="food"></div>
</div>
<script>
// 获取元素
var gameBoard = document.querySelector('#game-board');
var snakeHead = document.querySelector('#snake-head');
var food = document.querySelector('#food');
// 定义变量
var direction = { x: 10, y: 0 };
var snake = [{ x: 0, y: 0 }, { x: 10, y: 0 }, { x: 20, y: 0 }];
var foodPosition = { x: 0, y: 0 };
var score = 0;
// 随机生成食物位置
function generateFoodPosition() {
foodPosition.x = Math.floor(Math.random() * 30) * 10;
foodPosition.y = Math.floor(Math.random() * 30) * 10;
food.style.left = foodPosition.x + 'px';
food.style.top = foodPosition.y + 'px';
}
// 检测是否吃到食物
function checkFood() {
if (snakeHead.offsetLeft == foodPosition.x && snakeHead.offsetTop == foodPosition.y) {
// 增加蛇的长度
snake.push({ x: snake[snake.length - 1].x, y: snake[snake.length - 1].y });
// 重新生成食物位置
generateFoodPosition();
// 增加分数
score++;
}
}
// 检测是否碰到墙壁或自己
function checkCollision() {
// 碰到墙壁
if (snakeHead.offsetLeft < 0 || snakeHead.offsetLeft >= gameBoard.offsetWidth || snakeHead.offsetTop < 0 || snakeHead.offsetTop >= gameBoard.offsetHeight) {
alert('游戏结束,得分:' + score);
location.reload();
}
// 碰到自己
for (var i = 1; i < snake.length; i++) {
if (snakeHead.offsetLeft == snake[i].x && snakeHead.offsetTop == snake[i].y) {
alert('游戏结束,得分:' + score);
location.reload();
}
}
}
// 定义动画函数
function animate() {
// 移动蛇头
snake[0].x += direction.x;
snake[0].y += direction.y;
snakeHead.style.left = snake[0].x + 'px';
snakeHead.style.top = snake[0].y + 'px';
// 移动蛇身
for (var i = 1; i < snake.length; i++) {
snake[i].x = snake[i - 1].x;
snake[i].y = snake[i - 1].y;
var snakeBody = document.querySelectorAll('.snake')[i];
snakeBody.style.left = snake[i].x + 'px';
snakeBody.style.top = snake[i].y + 'px';
}
// 检测是否吃到食物
checkFood();
// 检测是否碰到墙壁或自己
checkCollision();
// 继续下一帧动画
requestAnimationFrame(animate);
}
// 开始动画
requestAnimationFrame(animate);
// 监听键盘事件
document.addEventListener('keydown', function(event) {
switch (event.keyCode) {
case 37: // 左
if (direction.x == 0) {
direction.x = -10;
direction.y = 0;
}
break;
case 38: // 上
if (direction.y == 0) {
direction.x = 0;
direction.y = -10;
}
break;
case 39: // 右
if (direction.x == 0) {
direction.x = 10;
direction.y = 0;
}
break;
case 40: // 下
if (direction.y == 0) {
direction.x = 0;
direction.y = 10;
}
break;
}
});
</script>
</body>
</html>
```
这个示例中,使用HTML和CSS来创建了一个游戏板和蛇和食物的元素。然后使用JavaScript来控制蛇的移动和游戏逻辑。具体来说,使用一个数组snake来保存蛇的身体位置,direction变量表示蛇的方向,score变量表示分数。在动画函数animate()中,先移动蛇头,再移动蛇身,然后检测是否吃到食物或碰到墙壁或自己。最后使用requestAnimationFrame()函数来运行动画。同时,监听键盘事件来改变蛇的方向。
阅读全文