JavaScript编写一个贪吃蛇游戏


Posted in Javascript onMarch 09, 2017

写的比较乱,有个逻辑错误:蛇吃了果果后应该是蛇尾加一节,写成了蛇头部增加一节- -。

可用键盘的上下左右键操作;

效果图:

JavaScript编写一个贪吃蛇游戏

代码如下:

<html>
<head>
<title>
贪吃蛇
</title>
<style type="text/css">
body{margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none;
  -moz-user-select:none;
  -ms-user-select:none;
  user-select:none;}
table{border-collapse:collapse;width:500px}
td{border:1px solid white;width:20px;height:20px;}
#wrap{width:500px;height:500px;background-color:#8B8386;margin:0 auto;position:absolute;border:1px solid #8B2500;}
#tar{width:20px;height:20px;position:absolute;background-color:#FFEE26;}
.num{width:20px;height:20px;background-color:#FDFF68;border:1px solid blue;border-radius:50%;position:absolute;}
input{color:red;font-size:20px;font-weight:bold;position:absolute;display:block;width:60px;height:35px;}
#btn2{top:45px;left:0px;}
#btn4{top:90px;left:70px;}
#btn1{top:45px;left:140px;}
#btn3{top:0px;left:70px;}
#btn{position:absolute;background-color:black;width:200px;height:125px;}
#txt{width:80px;height:55px;background-color:black;position:absolute;left:60px;top:35px;color:white;font-size:16px;font-weight:bold;line-height:55px;text-align:center;cursor:move;}
</style>
</head>
<body>
<div id="btn" style="left:520px;top:20px">
<input type="button" value="→" id="btn1"/>
<input type="button" value="←" id="btn2"/>
<input type="button" value="↑" id="btn3"/>
<input type="button" value="↓" id="btn4"/>
<div id="txt">点此拖动</div>
</div>
<div id="wrap" style="left:20px;top:20px">
<div id="tar"></div>
<table>
<tbody id="tb">
</tbody>
</table>
<div class="num"></div>
<div class="num"></div>
<div class="num"></div>
<div class="num"></div>
<div class="num"></div>
</div>
<script type="text/javascript">
  var tb=document.getElementById('tb');
var wrap=document.getElementById('wrap');
var tr=new Array();
var td=new Array();
for(var i=0;i<25;i++)           //绘制地图
{
 tr[i]=document.createElement('tr');
 tb.appendChild(tr[i]);
 for(var j=0;j<25;j++)
 {
 td[j]=document.createElement('td');
 tr[i].appendChild(td[j]); 
 }
}
var tar=document.getElementById('tar');  //食物定位
function food()
{
 var a,b;
 a=Math.random()*460;
 a=Math.floor(a/20)*20+20;
 b=Math.random()*460;
 b=Math.floor(b/20)*20+20;
 tar.style.left=a+"px";
 tar.style.top=b+"px";
}
food();
var s=document.getElementsByClassName('num'); //定位蛇的位置
s[0].style.backgroundColor="#3EFF1A";
var x=300,y=400,f,d,p,Fraction=0,t=600,tt=60;
for(var k=0;k<s.length;k++)
{
 s[k].style.left=x+"px";
 s[k].style.top=y+20*k+"px";
}
function move(obj,direction)       //控制移动函数开始
{
 clearTimeout(d);
 s=document.getElementsByClassName('num');
 var l=new Array();
 l[0]=s[0].style.left;
 var w=new Array();
 w[0]=s[0].style.top;
 obj;             //移动方向
 s[0].style.left=x+"px";
 s[0].style.top=y+"px";
 for(var k1=1;k1<s.length;k1++)
 {
 l[k1]=s[k1].style.left;
 w[k1]=s[k1].style.top;
 s[k1].style.left=l[k1-1];
 s[k1].style.top=w[k1-1];
 }
 if(parseInt(s[0].style.left)==parseInt(tar.style.left)&&parseInt(s[0].style.top)==parseInt(tar.style.top))
{
 t=t-tt;
 tt-=5;
 if(tt==0)tt=5;
 var new_div=document.createElement('div');
 new_div.className="num";
 Fraction+=100;
 if(p==1)
 {
 new_div.style.top=s[0].style.top;
 new_div.style.left=parseInt(s[0].style.left)+20+"px";
 }
 if(p==2)
 {
 new_div.style.top=s[0].style.top;
 new_div.style.left=parseInt(s[0].style.left)-20+"px";
 }
 if(p==3)
 {
 new_div.style.left=s[0].style.left;
 new_div.style.top=parseInt(s[0].style.top)-20+"px";
 }
 if(p==4)
 {
 new_div.style.left=s[0].style.left;
 new_div.style.top=parseInt(s[0].style.top)+20+"px";
 }
 s[0].parentNode.insertBefore(new_div,s[0]);
 food();
 s[0].style.backgroundColor="#3EFF1A";
 for(var k=1;k<s.length;k++)
 {
 s[k].style.backgroundColor="#FDFF68";
 }
}
if(parseInt(s[0].style.left)<0||parseInt(s[0].style.left)>=500||parseInt(s[0].style.top)<0||parseInt(s[0].style.top)>=500)
{
 alert("GAME OVER!"+"你的分数为:"+Fraction+"分");
 food();
 x=300;
 y=400;
 for(var k=0;k<5;k++)
{
 s[k].style.left=x+"px";
 s[k].style.top=y+20*k+"px";
}
 for(var kk=s.length-1;kk>4;kk--)
 {
  s[kk].parentNode.removeChild(s[kk]);
 }
 t=700;
 tt=60;
 return false;
}
 for(k=1;k<s.length;k++)
{
 if(parseInt(s[0].style.left)==parseInt(s[k].style.left)&&parseInt(s[0].style.top)==parseInt(s[k].style.top))
 {
  alert("GAME OVER!"+"你的分数为:"+Fraction+"分");
  food();
  x=300;
  y=400;
  for(var k=0;k<5;k++)
 {
  s[k].style.left=x+"px";
  s[k].style.top=y+20*k+"px";
 }
 for(var kk=s.length-1;kk>4;kk--)
 {
  s[kk].parentNode.removeChild(s[kk]);
 }
  t=700;
  tt=60;
  return false;
 }
}
 d=setTimeout(direction,t);
}
document.getElementById('btn1').onclick=function R() //绑定鼠标点击事件
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.left)<parseInt(s[1].style.left))return false; 
 p=1;           
 move(x=x+20,R);
}
document.getElementById('btn2').onclick=function L()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.left)>parseInt(s[1].style.left))return false;
 p=2;
 move(x=x-20,L);
}
document.getElementById('btn3').onclick=function T()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.top)>parseInt(s[1].style.top))return false;
 p=3;
 move(y=y-20,T);
}
document.getElementById('btn4').onclick=function B()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.top)<parseInt(s[1].style.top))return false;
 p=4;
 move(y=y+20,B);
}
document.onkeydown=function(event)    //绑定键盘事件
{
var e=event||window.event;
if(e&&e.keyCode==39)
{
 function R()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.left)<parseInt(s[1].style.left))return false; 
 p=1; 
 move(x=x+20,R);
}
R();
return false;
}
if(e&&e.keyCode==37)
{
 function L()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.left)>parseInt(s[1].style.left))return false;
 p=2;
 move(x=x-20,L);
}
L();
return false;
}
if(e&&e.keyCode==38)
{
 function T()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.top)>parseInt(s[1].style.top))return false;
 p=3;
 move(y=y-20,T);
}
T();
return false;
}
if(e&&e.keyCode==40)
{
 function B()
{
 x=parseInt(s[0].style.left);
 y=parseInt(s[0].style.top);
 if(parseInt(s[0].style.top)<parseInt(s[1].style.top))return false;
 p=4;
 move(y=y+20,B);
}
B();
return false;
}
}
var btn=document.getElementById('btn');
var btn_l,btn_t;
function btn_move()
{
 btn_l=clientX-parseInt(wrap.style.left)
}
confirm("可用键盘的上下左右四个按键进行游戏操作!")
var btn=document.getElementById('btn');  //开始制作操作区拖动效果
var txt=document.getElementById('txt');
var new_x,new_y,bool=false;
txt.onmousedown=function ()
{
 var eve=event||window.event;
 bool=true;
 new_x=eve.clientX-parseInt(btn.style.left);
 new_y=eve.clientY-parseInt(btn.style.top);
}
btn.onmousemove=function btn_move(event)
{
 if(bool)
 {
 var e=event||window.event;
 btn.style.left=e.clientX-new_x;
 btn.style.top=e.clientY-new_y;
 if(parseInt(btn.style.left)<520)btn.style.left="520px";
 if(parseInt(btn.style.top)<0)btn.style.top="0px";
 if(parseInt(btn.style.top)>395)btn.style.top="395px";
 }
}
document.body.onmouseup=function()
{
 bool=false;
}
</script>
</body>
</html>

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

Javascript 相关文章推荐
js String对象中常用方法小结(字符串操作)
Jan 27 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
Apr 29 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
jquery采用oop模式class类的使用示例
Jan 22 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
7个你应该知道的JS原生错误类型
Apr 29 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 #Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 #Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 #Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 #Javascript
js实现3D图片环展示效果
Mar 09 #Javascript
Vue监听数组变化源码解析
Mar 09 #Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 #Javascript
You might like
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
js style动态设置table高度
2014/10/21 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现完整的事务操作示例
2017/06/20 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
中间件分为哪几类
2016/09/18 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
学生会离职感言
2014/02/11 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
公司酒会主持词
2015/07/02 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
工作建议书范文
2019/07/08 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android