基于 js 制作一个贪吃蛇小游戏

news/2024/11/27 23:45:29/

目录

  • 前言:
  • 项目效果展示:
  • 代码实现思路:
  • 使用方法:
  • 实现代码:
  • 总结:

前言:

在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小游戏吧。

描述:
贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。

功能按键:
W:向上
S:向下
A:向左
D:向右
其他:全部为暂停


项目效果展示:

在这里插入图片描述


代码实现思路:

  1. 设置需要使用的参数
  2. 双重 for 循环设置网格对象,使用随机数设置食物。
  3. 设置贪吃蛇对象,首先清空所有,然后根据保存的位置添加贪吃蛇
  4. 设置键盘按下事件
  5. 判断需要的几个按键,w,s,a,d(上,下,左,右)
  6. 判断是否撞墙,撞到墙则停止游戏。
  7. 判断是否吃到食物,食物消失,贪吃蛇长大
  8. 点击重新开始游戏

使用方法:

新建一个后缀为 HTML 的文件,然后把下面的代码复制进去,然后双击打开。
当然也可以直接通过下面链接进行下载,下载完成后双击打开即可。
点击进行下载:https://download.csdn.net/download/weixin_62897746/87377763


实现代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>贪吃蛇</title><style>body{text-align: center;}.box{margin: 0 auto;border: 1px solid #ddd;display: flex;flex-wrap: wrap;}.item{box-sizing: border-box;border: 1px solid #ddd;}.player{background-color: #444;}.eat{background-color: rosybrown;}#btn{margin-top: 20px;font-size: 23px;color: #fff;border: 1px solid #000;border-radius: 5px;padding: 10px 25px;background-image: linear-gradient(to right,#ff00ad,#f09876);}</style>
</head>
<body><h1>贪吃蛇大作战</h1><p id="text"></p><div class="box"></div><button id="btn">开始</button>
</body>
<script>sessionStorage.setItem('id',0)function kaishi(){// 行const x = 20// 列const y = 20// 盒子大小const size = 20// 地图const box = document.querySelectorAll('.box')[0]// 网格对象const result = []// 贪吃蛇对象const player = [[1,1]]// 贪吃蛇对象const updatePlayer =()=>{// 清除所有对象document.querySelectorAll('.player').forEach(v=>v.classList.remove('player'))player.forEach(v=>{// 根据网格所在位置设置贪吃蛇对象,移动document.querySelector(`[data-v="${v.join('-')}"]`).classList.add('player')})}let key = ''// 循环设置网格for(let i=0; i<x; i++){for(let j=0; j<y; j++){// 随机数,食物const isEat = Math.random() > 0.9// 添加网格对象result.push(`<div data-v="${i}-${j}" class="item ${isEat ? 'eat' : ''}" style="width:${size}px;height:${size}px"></div>`)}}// 把内容转换为字符串box.innerHTML = result.join('')// 设置宽box.style.width = `${x*size}px`// 触发事件document.addEventListener('keydown',e=>{// 保存触发事件key = e.key})// 定时器const intervalId = setInterval(()=>{// 显示分数,和历史最高分document.getElementById('text').innerHTML = `当前分为${player.length}分,历史最高分为${sessionStorage.getItem('id')}`if(key){// 保存贪吃蛇所在位置const needPos = JSON.parse(JSON.stringify(player.slice(0,player.length-1)))// 判断触发事件switch(key){case 'w':player[0][0] -= 1break;case 'a':player[0][1] -= 1break;case 's':player[0][0] += 1break;case 'd':player[0][1] += 1break;}// 是否撞墙const el = document.querySelector(`[data-v="${player[0].join('-')}"]`)// 判断是否撞墙if(!el){// 停止定时器clearInterval(intervalId)// 判断当前分是否超过历史最高分if(sessionStorage.getItem('id') < player.length){// 更改分数sessionStorage.setItem('id',player.length)}alert('撞墙了')isKey = true}else{// 改变保存贪吃蛇的位置for(let i=1; i<player.length; i++){player[i] = needPos[i-1]}// 判断是否迟到食物if(el.className.indexOf('eat') >= 0){// 删除食物el.classList.remove('eat')// 贪吃蛇增长player.push([...player[0]])}// 调用贪吃蛇使他发生改变updatePlayer()}}},100)updatePlayer()}kaishi()let isKey = true// 点击开始document.getElementById('btn').onclick=()=>{if(isKey){kaishi()isKey = false}}
</script>
</html>

总结:

以上就是 基于 js 制作一个贪吃蛇小游戏,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog


http://www.ppmy.cn/news/10890.html

相关文章

Java日期时间类

Java日期时间类Datenew Date()**获取当前系统时间**通过**指定毫秒数得到时间**format**指定日期格式**SimpleDateFormat的模式字母&#xff1a;parse()可以把**格式化的String转成对应Date**Calendar&#xff08;日历&#xff09;创建日期类对象获取日历对象的某个日历字段第三…

IPO合肥马郢计划:构筑美丽田园综合体上市

合肥市长丰县马郢社区曾经是省级贫困村&#xff0c;为了让这个原本相对落后美丽田园 上市拥有崭新的面貌。2017年至今实施美丽田园综合体、旅游扶贫等项目。马郢社区共有13个村民组、408户、1778人&#xff0c;全村建档立卡贫困户年人均收入仅2000多元。2015年&#xff0c;由杨…

python制作课堂点名系统,从此老师对我关爱有加

前言 大家早好、午好、晚好吖 ❤ ~ 准备工作 首先我们需要准备好点名的姓名文件&#xff0c;使用的时候导入进去就可以开始点名了。 新建一个文本文档&#xff0c;将姓名设置设置好&#xff0c;如下&#xff1a; 使用系统库和第三方库都比较常规 from PyQt5.QtWidgets impo…

【Java编程进阶】Java异常详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】&#xff0c;从入门到就业精通&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. 异常2. 异常的体系3. Error4. 异常产生的过程5. throw 关键字6. 异常处理6.1 throws 关键字6.2 tr…

程序员们有什么好的编程习惯?

优良的代码显然不是制作优秀软件的唯一要素&#xff0c;但是主要的要素之一。我们可能拥有世界上最好的产品和营销团队&#xff0c;部署了最好的平台&#xff0c;并以最好的框架来构建软件&#xff0c;但归根结底&#xff0c;一款软件所做的一切&#xff0c;都是因为有人写了一…

如何进行小红书推广?小红书平台适合推广什么产品?

小红书作为一个生活方式社区&#xff0c;其最大独特性就在于&#xff0c;大部分互联网社区更多是依靠线上的虚拟身份&#xff0c;而小红书用户发布的内容都来自于真实生活&#xff0c;一个分享用户必须具备丰富的生活和消费经验&#xff0c;才能有内容在小红书分享&#xff0c;…

分布式理论协议与算法 第三弹 BASE理论

大部分人解释这 CAP 定律时&#xff0c;常常简单的表述为&#xff1a;“一致性、可用性、分区容错性三者你只能同时达到其中两个&#xff0c;不可能同时达到”。实际上这是一个非常具有误导性质的说法&#xff0c;而且在 CAP 理论诞生 12 年之后&#xff0c;CAP 之父也在 2012 …

Linux中的vim最小集、指令集及其配置

目录 1. vim 最小集 2 vim指令集 2.1 命令模式的指令 2.1.1 插入模式 2.1.2 移动光标 2.1.3 删除文字 2.1.4 复制 2.1.5 替换 2.1.6 撤销 2.1.7 更改 2.1.8 跳至指定的行 2.1.9 shift ~:快速大小写切换 2.2 末行模式的指令 2.2.1 set nu/set nonu 2.2.2 vs file…