通过上下左右的方向键控制

<!DOCTYPE html>
<!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>* {margin: 0;padding: 0;box-sizing: border-box;}#main {width: 360px;height: 420px;border: 10px solid #000;background-color: #b7d4a8;border-radius: 20px;margin: 50px auto;}#stage {width: 304px;height: 304px;border: 2px solid #000;margin: 20px auto;position: relative;}#snake>div {width: 10px;height: 10px;background-color: #000;position: absolute;border: 1px solid #b7d4a8;}#food {width: 10px;height: 10px;position: absolute;top: 100px;left: 120px;display: flex;/* 自动换行 */flex-flow: wrap;}#food div {width: 5px;height: 5px;background-color: #000;transform: rotate(45deg);}#info {width: 304px;margin: 0 auto;display: flex;justify-content: space-between;font: bold 20px Courier;}</style>
</head><body><div id="main"><div id="stage"><!-- 贪吃蛇的 --><div id="snake"><div></div></div><!-- 食物 --><div id="food"><div></div><div></div><div></div><div></div></div></div><div id="info"><div>SCORE:<span id="score">0</span></div><div>LEVEL<span id="level">1</span></div></div></div><script>// 获取snakeconst snake = document.getElementById("snake");// 获取snake里的divconst snakes = snake.getElementsByTagName("div");// 获取食物const food = document.getElementById("food");// 获取分数和等级的spanconst scoreSpan = document.getElementById("score");const levelSpan = document.getElementById("level");// 创建变量 存储分数和等级let score = 0;let level = 0;// 事物的坐标应该在0--290之间function changeFood() {// 生成0--29之间的随机数  //向下取整const x = Math.floor(Math.random() * 30) * 10;const y = Math.floor(Math.random() * 30) * 10;// 设置食物坐标food.style.left = x + "px";food.style.top = y + "px";}// 定义一个变量  存储运动的方向let dir;// 创建一个变量 记录按键的状态let keyActive = true;const keyArr = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];// 创建对象const reObj = {ArrowUp: "ArrowDown",ArrowDown: "ArrowUp",ArrowRight: "ArrowLeft",ArrowLeft: "ArrowRight"}// 禁止掉头// 身体超过2,不能是相反的方向// 保持原来的方向不变(不修改dir的值)// 绑定按键事件keydown keyup//  键盘事件只能绑定给可以获取焦点的元素或者是doucumentdocument.addEventListener("keydown", (event) => {if (keyActive && keyArr.includes(event.key)) {if (snakes.length < 2 || reObj[dir] !== event.key) {// 设置方向dir = event.key;keyActive = false;}}})// 要想使得身体和头一起运动 只需将尾部的一个移动位置let isGameOver;setTimeout(function move() {keyActive = true;// 获取头部const head = snakes[0];// 获取头部坐标let x = head.offsetLeft;let y = head.offsetTop;switch (dir) {case "ArrowUp":y -= 10;break;case "ArrowRight":// 向右移动,让left增加x += 10;break;case "ArrowDown":y += 10;break;case "ArrowLeft":x -= 10;break;}// 检查是否吃到食物if (head.offsetTop === food.offsetTop &&head.offsetLeft === food.offsetLeft) {// 1改变食物位置,changeFood();// 2增加其身体长度snake.insertAdjacentHTML("beforeend", "<div/>")score++;scoreSpan.textContent = score;// 检查等级if (score % 10 === 0 && level < 14) {level++;levelSpan.textContent = level + 1;}}// 判断游戏是否结束// 撞墙if (x < 0 || x > 290 || y < 0 || y > 290) {// 游戏结束alert("撞墙啦,游戏结束~")return}// 撞自己if (dir) {for (let i = 0; i < snakes.length; i++) {if (snakes[i].offsetLeft === x && snakes[i].offsetTop === y) {alert("撞到自己啦,游戏结束~");return;}}}// 获取尾巴const tail = snakes[snakes.length - 1]// 移动的位置tail.style.left = x + "px"tail.style.top = y + "px"// 将尾巴移到最前面snake.insertAdjacentElement("afterbegin", tail);keyActive = true;setTimeout(move, 300 - level * 20);}, 300)</script>
</body></html>

JavaScript的小游戏——贪吃蛇相关推荐

  1. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  2. 微信小游戏——贪吃蛇

    博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...

  3. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  4. 小游戏贪吃蛇的c++源代码

    小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...

  5. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  6. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  7. 我的小游戏——贪吃蛇

    我的小游戏--贪吃蛇 简介 最近学习了Java的GUI编程写一个贪吃蛇的游戏来玩玩. 游戏主要涉及到Java的GUI编程和多线程等技术. 游戏一共有两种模式:窗墙模式和撞墙模式,默认是窗墙模式,选择不 ...

  8. GUI编程详解:小游戏贪吃蛇

    GUI编程 1.简介 Gui的核心技术:Swing.AWT 界面不美观 需要jre环境 为什么要学习? 可以写出自己想要的小工具 工作时候,也可能需要维护到swing界面 了解MVC架构,了解监听 ( ...

  9. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

最新文章

  1. Docker从入门到实践
  2. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装
  3. 工作148:父子组件传值 获取时间戳
  4. 快速入门RabbitMq,看这一篇就够了。
  5. 如何写好标题,才能轻松上简书首页?
  6. git maven 一键部署_jenkins+git+maven搭建自动化部署项目环境
  7. map分组后取前10个_35岁詹皇有多强?17年生涯首拿助攻王背后:10个月前早已定下目标...
  8. 360浏览器导出Excel闪退BUG
  9. 【网络通信 -- 直播】SRS 实战记录 -- 开源流媒体服务器对比与 SRS 直播效果测试
  10. 河南巴旦木生态农业:巴旦木与杏仁有哪些不同,如何分辨巴旦木仁与杏仁?
  11. 浏览器兼容video视频播放的多种方法
  12. 吴峰光杀进 Linux 内核
  13. mysql opened tables_open_table与opened_table --2
  14. IDA Pro7.0使用技巧总结
  15. VMware 终端安装 VMware Tools 以及 开启共享文件夹
  16. LVGL V0.01版本移植到STM32F4
  17. 【资源分享】一周整理的,这是价值10W的32个Python项目!
  18. selenium成功绕过淘宝登录反爬机制!
  19. 工欲善其事,必先利其器 – 网络抓包
  20. slam第六讲_g2o

热门文章

  1. Python 的内置容器之 list (列表) 详细指南!!
  2. 怎么测内阻 恒压源_测电流表内阻的几种方法
  3. nuc972移植diaochan
  4. 通过学MySQL学活架构设计,举一反十
  5. Android App清除数据的方案
  6. IOS用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly.
  7. 数据分析必备思维之:系统性思维
  8. dataframe选取特定行和列
  9. 89C51单片机之寄存器
  10. Vivado调用VIO核