话不多说,请看代码:
<!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小时内与您取得联系。