js手写贪吃蛇游戏

前端手写贪吃蛇游戏

贪吃蛇游戏 场景 使用了js 和 html /css 就可以完成 一个贪吃蛇小游戏

在这里插入图片描述

技术分析

主要用到的几个技术点:

  • clientWidth :元素的宽度,包含内边距
  • clientHeight :元素的高度,包含内边距
  • setInterval:开启定时器
  • clearInterval:关闭定时器
  • keydown:键盘事件
  • createElement : 创建节点

首先需要一个背景板 需要吧蛇和食物 在指定内容里 不能超出
接下来就是蛇的移动 使用定时间一秒移动一格
食物就是根据计算随机生成
当蛇和食物的位置重叠了就可以认为蛇吃到了食物
当蛇的x,y 大于元素的宽度/高度,就认为碰到了墙壁直接ov

以上就是关键技术点 直接源码 可以点个赞收藏一下谢谢

源码

HTML

<div id="game-board"></div> 

JS

<script>const gameBoard = document.getElementById("game-board");let snake = [{ x: 0, y: 0 }];let food = { x: 0, y: 0 };let direction = "right";function createSnake() {for (let segment of snake) {const snakeSegment = document.createElement("div");snakeSegment.className = "snake";snakeSegment.style.left = segment.x + "px";snakeSegment.style.top = segment.y + "px";gameBoard.appendChild(snakeSegment);}}function createFood() {const maxX = gameBoard.clientWidth - 20;const maxY = gameBoard.clientHeight - 20;food.x = Math.floor(Math.random() * maxX);food.y = Math.floor(Math.random() * maxY);const foodElement = document.createElement("div");foodElement.className = "food";foodElement.style.left = food.x + "px";foodElement.style.top = food.y + "px";gameBoard.appendChild(foodElement);}function updateGame() {const snakeHead = { x: snake[0].x, y: snake[0].y };// Move the snakeif (direction === "right") snakeHead.x += 20;else if (direction === "left") snakeHead.x -= 20;else if (direction === "up") snakeHead.y -= 20;else if (direction === "down") snakeHead.y += 20;// Check for collision with foodif (snakeHead.x === food.x && snakeHead.y === food.y) {snake.push({ x: snakeHead.x, y: snakeHead.y });const foodElement = document.querySelector(".food");foodElement.remove();createFood();}// Remove the tail segmentsnake.pop();// Check for collision with walls or itselfif (snakeHead.x < 0 ||snakeHead.x >= gameBoard.clientWidth ||snakeHead.y < 0 ||snakeHead.y >= gameBoard.clientHeight) {clearInterval(gameInterval);alert("Game Over!");return;}for (let segment of snake) {if (segment.x === snakeHead.x && segment.y === snakeHead.y) {clearInterval(gameInterval);alert("Game Over!");return;}}// Update the snake on the game boardsnake.unshift({ x: snakeHead.x, y: snakeHead.y });const snakeSegments = document.querySelectorAll(".snake");for (let i = 0; i < snakeSegments.length; i++) {snakeSegments[i].style.left = snake[i].x + "px";snakeSegments[i].style.top = snake[i].y + "px";}}createSnake();createFood();const gameInterval = setInterval(updateGame, 150);document.addEventListener("keydown", (event) => {if (event.key === "ArrowRight" && direction !== "left") direction = "right";else if (event.key === "ArrowLeft" && direction !== "right") direction = "left";else if (event.key === "ArrowUp" && direction !== "down") direction = "up";else if (event.key === "ArrowDown" && direction !== "up") direction = "down";});
</script>

CSS

<style>#game-board {width: 300px;height: 300px;border: 1px solid black;position: relative;}.snake {width: 20px;height: 20px;background-color: green;position: absolute;}.food {width: 20px;height: 20px;background-color: red;position: absolute;}
</style>

以上就实现了简单的贪吃蛇功能
在这里插入图片描述
以上就是js手写贪吃蛇游戏简易教程感谢大家的阅读
如碰到其他的问题 可以私下我 一起探讨学习
如果对你有所帮助还请 点赞 收藏谢谢~!
关注收藏博客 作者会持续更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82548.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

文章目录 1 前言2 st.image&#xff1a;嵌入图像内容2.1 图像展示与描述2.2 调整图像尺寸2.3 使用本地文件或URL 3 st.audio&#xff1a;嵌入音频内容3.1 播放音频文件3.2 生成音频数据播放 4 st.video&#xff1a;嵌入视频内容4.1 播放视频文件4.2 嵌入在线视频 5 结语&#x…

kubernetes中最小组件——Pod

目录 一、Pod简介 二、Pod的使用方式 三、Pause——Pod中底层基础容器 四、为什么kubernetes这样设计Pod 五、Pod的分类 1.自主式Pod 2.控制器管理的Pod 3.静态Pod 六、Pod容器的分类 1. 基础容器&#xff08;infrastructure container&#xff09; 2. 初始化容器&am…

Git与Github常用方法

目录 1. Github基本使用方法2. Git使用方法3. git、VS code、Github联合使用方法4. Git配置Github远程仓库SSH密钥5 常见问题 1. Github基本使用方法 仓库&#xff08;Repository&#xff09;&#xff1a;Github上用来存放代码的空间&#xff0c;包含代码、文档和其他文件。提…

万应低代码受邀参加上海电信“大干一场 科创沙龙”活动

7月28日&#xff0c;由上海市宝山区大场镇政府指导、中国电信上海北区局主办的“大干一场 科创沙龙”系列第九期沙龙活动顺利举办。大场镇“数字化转型”领导小组办公室&#xff08;以下简称“数字办”&#xff09;邀请了来自镇域内外的数十家科创服务企业。万应低代码作为天翼…

flask-----蓝图

1.引入蓝图 flask都写在一个文件中&#xff0c;项目这样肯定不行&#xff0c;会导致循环导入的问题&#xff0c;分目录&#xff0c;分包&#xff0c;使用蓝图划分目录。 2.使用蓝图 步骤如下&#xff1a; -1 实例化得到一个蓝图对象-order_blueBlueprint(order,__name__,tem…

医疗行业如何防范弱口令攻击?这份弱口令治理方案请收好

随着5G、云计算、物联网等新兴技术与传统医疗系统的不断深化融合&#xff0c;我国医疗信息化程度越来越高&#xff0c;逐步向数字化、智慧化医疗演进&#xff0c;蓬勃发展的信息化也使医疗行业面临的安全风险逐渐增多。数据泄露、勒索病毒等问题频发&#xff0c;加之《等保》、…

JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 系列笔记&#xff1a; JavaScript |&#xff08;一&#xff09;JavaScript简介及基本语法JavaScript |&#xff08;二&#xff09;JavaScript自定义对象及函数JavaScript |&#xff08;三&#xff…

hcip——期中小试

要求&#xff1a; 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中&#xff0c;运行 O…

21、springboot的宽松绑定及属性处理类的构造注入

springboot的宽松绑定及属性处理类的构造注入 ★ 如何使用属性处理类所读取的属性 属性处理类最终变成了Spring容器中的一个Bean组件&#xff0c;因此接下来Spring即可将该Bean组件注入任意其他组件。 这种做法的好处是&#xff1a;可以将大量的配置信息封装一个对象——所以…

Spring boot 集成 Skywalking 配置 || Skywalking 打不开【已解决】

一、Skywalking官网 Apache SkyWalking 1.下载Skywalking APM &#xff08;如果下载最新的&#xff0c;双击打开闪退&#xff0c;选老点的版本&#xff09; 2. 下载 Skywalking Agents 如果下载太慢&#xff0c;建议复制下载链接&#xff0c;然后用下载器下载&#xff0c;比…

时间复杂度空间复杂度相关练习题

1.消失的数字 【题目】&#xff1a;题目链接 思路1&#xff1a;排序——》qsort快排——》时间复杂度O&#xff08;n*log2n&#xff09; 不符合要求 思路2&#xff1a;&#xff08;0123...n)-(a[0]a[1][2]...a[n-2]) ——》 时间复杂度O&#xff08;N&#xff09;空间复杂度…

软件验收测试包括几种类型?验收测试报告有什么好处?

在软件开发中&#xff0c;验收测试是软件项目在开发完成后进行的最后一项测试工作。它是确认软件是否满足预期要求&#xff0c;并准备将软件交付用户的核心环节&#xff0c;它可以确保软件的质量和功能符合用户的需求和期望。 一、软件验收测试的类型 软件验收测试可以分为多…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

20230809在WIN10下使用python3批量将TXT文件转换为SRT文件

20230809在WIN10下使用python3批量将TXT文件转换为SRT文件 2023/8/9 17:30 由于喜欢看纪录片等外文视频&#xff0c;通过剪映/PR2023/AUTOSUB识别字幕之后&#xff0c;可以通过google翻译识别为简体中文的DOCX文档。 DOCX文档转换为TXT文档之后&#xff0c;还需要转换为SRT文档…

​三江学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

​三江学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

实战:Prometheus+Grafana监控Linux服务器及Springboot项目

文章目录 前言知识积累什么是Prometheus什么是Grafana怎样完成数据采集和监控 环境搭建docker与docker-compose安装docker-compose编写 监控配置grafana配置prometheus数据源grafana配置dashboardLinux Host Metrics监控Spring Boot 监控 写在最后 前言 相信大家都知道一个项目…

Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题

Visual Studio在Debug模式下&#xff0c;MFC工程中包含Eigen库时的定义冲突的问题 报错信息 Eigen\src\Core\PlainObjectBase.h(143,5): error C2061: 语法错误: 标识符“THIS_FILE” Eigen\src\Core\PlainObjectBase.h(143,1): error C2333: “Eigen::PlainObjectBase::opera…

全网最牛,接口自动化测试实现详细总结,23年测试进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 为什么要做接口自…

SpringBoot 依赖管理

Spring Boot 依赖管理 1. 父项目做依赖管理 无需关注版本号&#xff0c;自动版本仲裁机制 <!-- 依赖管理 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version&g…

金融科技与现代开源技术结合的进展超前到你无法想象!

想要了解最新的金融科技进展吗&#xff1f; 渴望与其他技术爱好者交流&#xff0c;并扩展您在金融科技行业中的人脉关系吗&#xff1f; 那么请参加我们即将举行的 Meetup&#xff0c;本次活动由 Apache DolphinScheduler 社区和 OceanBase 技术社区共同举办&#xff0c;聚焦金…