JS实现简易贪吃蛇游戏


Posted in Javascript onAugust 24, 2020

本文实例为大家分享了JS实现简易贪吃蛇的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
<head>
 <title></title>
 <meta charset="utf-8">
 <style type="text/css">
 #body{
  width: 900px;/*长宽最好是obj的倍数*/
  height: 600px;
  border-width: 10px;
  border-style: solid;
  border-color: blue;
  line-height:600px;/*文本垂直居中*/
  text-align: center;/*文本水平居中*/
  position: relative;/*相对定位*/
  left: 0px;
  top: 0px;
 }
 #obj{
  width: 30px;
  height: 30px;
  background-color: red;
  position: absolute;/*绝对定位*/
  left: 0px;
  top: 0px;
  z-index: 1;/*头部在上层显示*/
 }
 div{
  text-align: center;
  line-height:30px;
 }
 </style>
</head>
 
<body id='body'>
 <!--内容-->
 按awsd移动
 <div id='obj'></div>
 <select id='speed' onclick="setspeed(this)">
 <option value="100">快速</option>
 <option value="500">中速</option>
 <option value="1000" selected>慢速</option>
 </select>
 | <button onclick="lenbodyadd()">身体+1</button>
 | <button onclick="stopspeed()">暂停</button>
 <div class="div"></div>
</body>
</html>
<script>
 
 var val={key:"d"};//默认向右移动
 var key = document.getElementById("body");
 key.onkeydown =f; //注册keydown事件处理函数
 var divnum=1;//身体每节编号
 var lenbody=5;//默认身体长度
 var speed=1000;//默认速度
 
 var obj=document.getElementById('obj');
 var myWidth=parseInt(getComputedStyle(obj,null).getPropertyValue('width'));
 var myHeight=parseInt(getComputedStyle(obj,null).getPropertyValue('height'));
 
 var clientH= document.body.clientHeight;//获取body高
 var clientW= document.body.clientWidth;//获取body宽
 
 var foodLeft=0;//食物x坐标
 var foodTop=0;//食物y坐标
 
 function f (va) {
 var e = e || window.event; //标准化事件处理
 let s = '';//val.type + " " + val.key; //获取键盘事件类型和按下的值
 let key=val.key;
 val=va;
 
 var myTop=parseInt(getComputedStyle(obj,null).getPropertyValue('top'));//获取精灵y坐标 parseInt(obj.style.top);
 var myLeft=parseInt(getComputedStyle(obj,null).getPropertyValue('left'));//获取精灵x坐标 parseInt(obj.style.left);
 
 var movePx=myWidth;//每次移动的距离
 var move=0;
 if(key=='w'){
  move=myTop-movePx;//每次移动10
  if(move<0 || move>clientH){
  return false;//不能超过边界
  }
  obj.style.top=move+'px';
  s='上';
 }
 if(key=='s'){
  move=myTop+movePx;
  if(move<0 || move>clientH-myHeight){
  return false;
  }
  obj.style.top=move+'px';
  s='下';
 }
 if(key=='a'){
  move=myLeft-movePx;
  if(move<0 || move>clientW){
  return false;
  }
  obj.style.left=move+'px';
  s='左';
 }
 if(key=='d'){
  move=myLeft+movePx;
  if(move<0 || move>clientW-myWidth){
  return false;
  }
  obj.style.left=move+'px';
  s='右';
 }
 obj.innerText=s;//设置文本 & 清楚之前的元素
 console.log(move+' top:'+myTop+' left:'+myLeft);
 
 //移除之前的身体元素,使有头有尾
 if(document.getElementsByClassName('div').length>=lenbody){
  document.getElementsByClassName('div')[0].parentNode.removeChild(document.getElementsByClassName('div')[0]);
 }
 
 //div身体元素随后移动
 let newMyMoveWidth=myLeft;
 let newMyMoveHeight=myTop;
 
 let div=document.createElement('div');
  div.className ='div';
  div.style.width = myWidth + 'px';
  div.style.height = myHeight + 'px';
  div.style.position = 'absolute';
  div.style.left=newMyMoveWidth + 'px';
  div.style.top=newMyMoveHeight + 'px';
  div.style.backgroundColor='blue';
  div.innerHTML=divnum;//设置文字|方便识别div顺序
 obj.parentNode.appendChild(div);
 console.log('newMyMoveWidth:'+newMyMoveWidth+' newMyMoveHeight:'+newMyMoveHeight);
 divnum++;
 
 ifeatfood(myLeft,myTop);
 } /*f() end--*/
 
 
 //生成食物
 function setfood(){
 
 foodLeft=parseInt(Math.random()*clientW);
 foodTop=parseInt(Math.random()*clientH);
 
 let div=document.createElement('div');
  div.id ='food';
  div.style.width = myWidth + 'px';
  div.style.height = myHeight + 'px';
  div.style.position = 'absolute';
  div.style.left= foodLeft + 'px';
  div.style.top= foodTop + 'px';
  div.style.backgroundColor='pink';
  div.innerHTML='吃';//设置文字|方便识别div顺序
 document.body.appendChild(div);
 }
 setfood();
 
 //判断吃到食物
 function ifeatfood(myLeft,myTop){
 //判断是否吃到食物
 if(Math.abs(foodLeft-myLeft)<myWidth && Math.abs(foodTop-myTop)<myHeight){
  lenbodyadd();//长度+1
  //删除旧food,生成新food
  document.getElementById('food').parentNode.removeChild(document.getElementById('food'));
  setfood();
 }
 }
 
 //吃到食物身体加1
 function lenbodyadd(){
 lenbody++;
 }
 
 //保持移动
 var setinter=setInterval((function move(){
 f(val);
 }),speed);
 
 //设置移动速度
 function setspeed(obj){
 speed=obj.options[obj.options.selectedIndex].value;
 stopspeed();
 setinter=setInterval((function move(){
  f(val);
 }),speed);
 }
 
 //停止移动
 function stopspeed(){
 clearInterval(setinter);
 }
 
 //窗口改变时跳转-防f12
 window.onresize = ()=>{
 console.log(window.innerWidth,window.innerHeight);
 //window.location.href='https://www.baidu.com';
 }
</script>

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js获取页面description的方法
May 21 Javascript
JS功能代码集锦
May 04 Javascript
jQuery中ScrollTo用法示例
Sep 04 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
react组件基本用法示例小结
Apr 27 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
如何手动实现一个 JavaScript 模块执行器
Oct 16 Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 #Javascript
Node.js 中判断一个文件是否存在
Aug 24 #Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
Aug 24 #Javascript
在Vue中使用HOC模式的实现
Aug 23 #Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 #Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 #Javascript
vue中watch和computed的区别与使用方法
Aug 23 #Javascript
You might like
vmware linux系统安装最新的php7图解
2019/04/14 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
js实现图片轮播效果
2015/12/19 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python Matplotlib库入门指南
2015/05/18 Python
Python切片知识解析
2016/03/06 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python实现简易云音乐播放器
2018/01/04 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
学习心得体会
2014/01/01 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android