html5js贪吃蛇撞墙,HTML+JS实现简单贪吃蛇游戏

HTML+JS实现简单贪吃蛇游戏

转载

mb5fe559d8b9ae42021-06-13 13:26:34©著作权

文章标签

java

阅读数

2

https://blog.51cto.com/u_15067227/2900453

因为js是单线程的,所以有js写贪吃蛇可以少考虑很多东西,感觉非常方便。今天给大家介绍一个非常简单的贪吃蛇写法。我说的非常简单勒,就是指没有游戏结束,也不会变长。哈哈,反正就是非常简单了。

![image.png](https://s2.51cto.com/images/20210613/1623561902355685.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

大概就是这个样子,可以移动可以随机出现食物,也可以出食物。

先给大家看看HTML代码,这个比较简单:

```

```

里面就三个div,就不多说了。

然后是js代码,首先获取snake的div:

```

var snake = document.getElementById("snake");

```

判断按钮,把方向记录下来(wasd、上左下右):

```

//这里的direction、up、down、right、left这些变量是在前面定义的

if(e.keyCode == 119){

//上

direction = up;

}else if(e.keyCode == 115){

//下

direction = down;

}else if(e.keyCode == 100){

//右

direction = right

}else if(e.keyCode == 97){

//左

direction = left;

}

```

判断方向后,就要开始移动了。这里就需要使用定时器:

```

//这个的move方法是自己定义的

time = setInterval(move, 200);

```

然后说一下move方法,先获取snake的div,然后获取div距浏览器上面和左边的距离:

```

//获取div

var snake = document.getElementById("snake");

//获取div离顶部的距离

var top_length = snake.offsetTop;

//获取div离左边的距离

var left_length = snake.offsetLeft;

```

然后判断方向移动,这里就写一个方向,其他的也差不多:

```

//根据先前保存的direction,分辨方向

switch (direction){

case up:

//当top_length>0的时候,说明还没有到顶部,可以继续往上移动

if(top_length > 0){

//每次向上移动10px

top_length -= 10;

//改变snake距顶部的距离

snake.style.top = top_length + "px";

}

break;

```

移动的时候随机出现食物:

```

//显示食物

if(food == null){

//当食物为空时,就显示食物。

showFood();

}else{

var map = document.getElementById("map");

//判断蛇是否吃到食物

if(left_length == food.offsetLeft && top_length == food.offsetTop){

//当蛇吃到食物时,移除食物,并致为null

map.removeChild(food);

food = null;

}

}

```

最后是showFood()方法,先随机产生上左边距:

```

var food_top = Math.floor(Math.random()*50)*10;

var food_left = Math.floor(Math.random()*50)*10;

```

创建食物,然后拼接到map上:

```

//关联Map

var map = document.getElementById("map");

//创建food

food = document.createElement("div");

//拼接food

map.appendChild(food);

```

然后设置食物的属性:

```

//设置绝对布局,和上左距离

food.style.width = "10px";

food.style.height = "10px";

food.style.position = "absolute";

food.style.backgroundColor = "blue";

food.style.top = food_top + "px";

food.style.left = food_left + "px";

```

差不多就是这样了。下面给大家看看全部的js代码:

```

/**

* Created by Administrator on 2018/11/21.

*/

var time;

var direction;

var up = 1;

var down = 2;

var left = 3;

var right = 4;

var food;

onkeypress = function(e){

window.clearInterval(time);

var snake = document.getElementById("snake");

var top_length = snake.offsetTop;

if(e.keyCode == 119){

//上

direction = up;

}else if(e.keyCode == 115){

//下

direction = down;

}else if(e.keyCode == 100){

//右

direction = right

}else if(e.keyCode == 97){

//左

direction = left;

}

time = setInterval(move, 200);

};

function move(){

var snake = document.getElementById("snake");

var top_length = snake.offsetTop;

var left_length = snake.offsetLeft;

switch (direction){

case up:

if(top_length > 0){

top_length -= 10;

snake.style.top = top_length + "px";

}

break;

case down:

if(top_length < 490){

top_length += 10;

snake.style.top = top_length + "px";

}

break;

case left:

if(left_length > 0){

left_length -= 10;

snake.style.left = left_length + "px";

}

break;

case right:

if(left_length < 490){

left_length += 10;

snake.style.left = left_length + "px";

}

break;

}

//显示食物

if(food == null){

showFood();

}else{

var map = document.getElementById("map");

//alert(left_length + ":" + food.offsetLeft + "|" + top_length + ":" + food.offsetTop);

if(left_length == food.offsetLeft && top_length == food.offsetTop){

map.removeChild(food);

food = null;

}

}

}

/**

* 随即出现食物

*/

function showFood(){

var food_top = Math.floor(Math.random()*50)*10;

var food_left = Math.floor(Math.random()*50)*10;

var map = document.getElementById("map");

food = document.createElement("div");

map.appendChild(food);

food.style.width = "10px";

food.style.height = "10px";

food.style.position = "absolute";

food.style.backgroundColor = "blue";

food.style.top = food_top + "px";

food.style.left = food_left + "px";

}

```

https://mp.weixin.qq.com/s/0K1aYqxKIBCAssAcWX-Rvw

收藏

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于 HTML 和 JavaScript 的贪吃示例代码: HTML: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>贪吃</title> <style> #canvas { border: 1px solid black; } </style> </head> <body> <canvas id="canvas" width="400" height="400"></canvas> <script src="snake.js"></script> </body> </html> ``` JavaScript: ```javascript const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const tileSize = 10; const width = canvas.width / tileSize; const height = canvas.height / tileSize; let snake = [{ x: 5, y: 5 }]; let apple = { x: 10, y: 10 }; let direction = "right"; let score = 0; function drawTile(x, y, color) { ctx.fillStyle = color; ctx.fillRect(x * tileSize, y * tileSize, tileSize, tileSize); } function drawSnake() { snake.forEach(function (tile) { drawTile(tile.x, tile.y, "green"); }); } function drawApple() { drawTile(apple.x, apple.y, "red"); } function update() { let snakeHead = { x: snake[0].x, y: snake[0].y }; switch (direction) { case "up": snakeHead.y--; break; case "down": snakeHead.y++; break; case "left": snakeHead.x--; break; case "right": snakeHead.x++; break; } // Check if snake hits wall if (snakeHead.x < 0 || snakeHead.x >= width || snakeHead.y < 0 || snakeHead.y >= height) { alert("Game Over!"); location.reload(); } // Check if snake hits itself for (let i = 1; i < snake.length; i++) { if (snakeHead.x === snake[i].x && snakeHead.y === snake[i].y) { alert("Game Over!"); location.reload(); } } snake.unshift(snakeHead); // Check if snake eats apple if (snakeHead.x === apple.x && snakeHead.y === apple.y) { score++; document.getElementById("score").innerHTML = "Score: " + score; apple.x = Math.floor(Math.random() * width); apple.y = Math.floor(Math.random() * height); } else { snake.pop(); } } function gameLoop() { update(); ctx.clearRect(0, 0, canvas.width, canvas.height); drawSnake(); drawApple(); } setInterval(gameLoop, 100); document.addEventListener("keydown", function (event) { switch (event.key) { case "ArrowUp": if (direction !== "down") { direction = "up"; } break; case "ArrowDown": if (direction !== "up") { direction = "down"; } break; case "ArrowLeft": if (direction !== "right") { direction = "left"; } break; case "ArrowRight": if (direction !== "left") { direction = "right"; } break; } }); ``` 这个示例代码实现了一个基本的贪吃游戏,包括贪吃的移动、判定、自身判定、吃苹果、计分等功能。你可以将代码保存为 `snake.html` 和 `snake.js`,在浏览器中打开 `snake.html` 运行游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值