全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js实现贪吃蛇小游戏(容易理解)

话不多说,请看代码:

<!doctype html>
<html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>贪吃蛇</title>
 <link rel="stylesheet" href="style.css">
 <script src="style.js" ></script>
 </head>
 <body>
 <div id="container"></div>
 </body>
</html>

第一步:初始化地图,创建蛇圈。
第二步:创建蛇,随机生产食物。
第三步:让蛇移动起来。
第四步:通过js绑定键盘事件,控制蛇移动方向。

var box={width:50,height:50};//每一个方块的高度
var snake=[];//保存蛇每一节身体对应的span
var DIR={
 DIR_RIGHT:1,
 DIR_LEFT:2,
 DIR_TOP:3,
 DIR_BOTTOM:4
};
var dir=DIR.DIR_BOTTOM;
var food=null; //始终记录当前的食物 
window.onload=function(){
 //1.初始化地图
 initMap();
 //2.创建蛇
 //2.5随机显示食物
 showFood();
 createSnake();
 //3.让蛇动起来
 setInterval(snakeMove,100);
 //4.控制蛇移动
 document.onkeyup=function(e){
 switch(e.keyCode){
 case 37:dir=DIR.DIR_LEFT;break;
 case 38:dir=DIR.DIR_TOP;break;
 case 39:dir=DIR.DIR_RIGHT;break;
 case 40:dir=DIR.DIR_BOTTOM;break; 
 } 
 }
};
function isInSnakeBody(left,top){
 for(var i=0;i<snake.length;i++){
 if(snake[i].offsetTop==top&&snake[i].offsetLeft==left){
 return true;
 }
 }
}
//这种随机生成食物的方法效率低---随着蛇身体的增长,随机生成食物的时间会变慢。
function showFood(){
 var con=document.getElementById("container");
 food=document.createElement("span");
 food.className="food";
 food.style.width=box.width+"px";
 food.style.height=box.height+"px";
 var left,top;
 do{
 left=Math.floor((con.offsetWidth-2)/box.width*Math.random())*box.width;
 top=Math.floor((con.offsetHeight-2)/box.height*Math.random())*box.height;
 }while(isInSnakeBody(left,top));
 food.style.left=left+"px";
 food.style.top=top+"px";
 con.appendChild(food);
}
function initMap(){
 var con=document.getElementById("container");
 var row=Math.floor(con.offsetWidth/box.width);
 var rol=Math.floor(con.offsetHeight/box.height);
 var num=row*rol;
 var newSpan=null;
 for(var i=1;i<=num;i++){
 newSpan=document.createElement("span");
 newSpan.style.width=box.width+"px";
 newSpan.style.height=box.height+"px";
 con.appendChild(newSpan);
 } 
}
function createSnake(){
 var newBody=null;
 var con=document.getElementById("container");
 for(var i=1;i<=5;i++){
 newBody=document.createElement("span");
 newBody.style.width=box.width+"px";
 newBody.style.height=box.height+"px";
 newBody.style.left=(i-1)*box.width+"px";
 newBody.style.top="0px";
 newBody.className="snake";
 con.appendChild(newBody);
 snake.push(newBody);
 }
}
function snakeMove(){
 var con=document.getElementById("container");
 //蛇头移动
 var head=snake[snake.length-1];
 var newTop=head.offsetTop,newLeft=head.offsetLeft;
 switch(dir){
 case DIR.DIR_LEFT:newLeft-=box.width; break;
 case DIR.DIR_RIGHT:newLeft+=box.width; break;
 case DIR.DIR_TOP:newTop-=box.height; break;
 case DIR.DIR_BOTTOM:newTop+=box.height; break;
 default:break;
 }
 //如果超出边界,计算蛇头下一个位置的坐标
 if(newLeft>con.offsetWidth-2-1){newLeft=0;}
 if(newLeft<0){newLeft=con.offsetWidth-2-box.width;}
 if(newTop<0){newTop=con.offsetHeight-2-box.height;}
 if(newTop>con.offsetHeight-2-1){newTop=0;}
 //判断新蛇头的位置是不是在蛇身体里面
 //for(var i=0;i<snake.length-1;i++){
 // if(snake[i].offsetLeft==newLeft&&snake[i].offsetTop==newTop){
 // alert("Game over!!");
 // window.location.href=window.location.href;
 // } 
 //}
 //1.如果吃到食物
 if(newLeft==food.offsetLeft&&newTop==food.offsetTop){
 food.className="snake";
 snake.push(food);
 showFood();
 return;
 }
 //2.如果没吃到
 //除蛇头外身体移动
 for(var i=0;i<snake.length-1;i++){
 snake[i].style.top=snake[i+1].offsetTop+"px";
 snake[i].style.left=snake[i+1].offsetLeft+"px";
 }
 head.style.left=newLeft+"px";
 head.style.top=newTop=newTop+"px";
}
*{
 padding:0;
 margin:0;
}
html,body{
 width:100%;
 height:100%;
}
body{
 position:relative;
}
div#container{
 position:absolute;
 top:0;
 bottom:0;
 left:0;
 right:0;
 margin:auto;
 width:800px;
 height:500px;
 border:1px solid black;
 font-size:0px;
}
span{
 display:inline-block;
 border:1px solid black;
 box-sizing:border-box;
}
span.snake{
 position:absolute;
 background-color:red;
}
span.food{
 position:absolute;
 background-color:blue;
}

最后的效果图如下:

 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 贪吃蛇  # JS写的贪吃蛇游戏(个人练习)  # javascript贪吃蛇完整版(源码)  # JS实现的贪吃蛇游戏完整实例  # 20行js代码实现的贪吃蛇小游戏  # js编写贪吃蛇的小游戏  # js贪吃蛇游戏实现思路和源码  # javascript 贪吃蛇实现代码  # javascript实现简单的贪吃蛇游戏  # 原生js实现的贪吃蛇网页版游戏完整实例  # js手写贪吃蛇游戏实例源码  # 吃到  # 多说  # 第二步  # 绑定  # 第三步  # 变慢  # 第四步  # DIR_RIGHT  # span  # DIR  # DIR_BOTTOM  # DIR_LEFT  # DIR_TOP  # box  # null  # var  # height  # snake  # width 


相关文章: 江苏网站制作公司有哪些,江苏书法考级官方网站?  如何在Golang中使用replace替换模块_指定本地或远程路径  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  简历在线制作网站免费,免费下载个人简历的网站是哪些?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  寿县云建站:智能SEO优化与多行业模板快速上线指南  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  Thinkphp 中 distinct 的用法解析  电脑免费海报制作网站推荐,招聘海报哪个网站多?  制作旅游网站html,怎样注册旅游网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  教学论文网站制作软件有哪些,写论文用什么软件 ?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何快速生成高效建站系统源代码?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何选择高效响应式自助建站源码系统?  如何在IIS中新建站点并解决端口绑定冲突?  建站之星与建站宝盒如何选择最佳方案?  建站之星CMS五站合一模板配置与SEO优化指南  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何配置WinSCP新建站点的密钥验证步骤?  北京专业网站制作设计师招聘,北京白云观官方网站?  在线教育网站制作平台,山西立德教育官网?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  临沂网站制作企业,临沂第三中学官方网站?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  移民网站制作流程,怎么看加拿大移民官网?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  专业网站建设制作报价,网页设计制作要考什么证?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何配置IIS站点权限与局域网访问?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  网站制作需要会哪些技术,建立一个网站要花费多少?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何高效利用亚马逊云主机搭建企业网站?  免费视频制作网站,更新又快又好的免费电影网站?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何用免费手机建站系统零基础打造专业网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  建站与域名管理如何高效结合? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。