JavaScript编写一个贪吃蛇游戏

发布时间 - 2026-01-11 00:05:41    点击率:

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

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

效果图:

代码如下:

<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>

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


# js  # 贪吃蛇游戏  # javascript贪吃蛇  # JS写的贪吃蛇游戏(个人练习)  # javascript贪吃蛇完整版(源码)  # js贪吃蛇游戏实现思路和源码  # javascript实现简单的贪吃蛇游戏  # JS实现的贪吃蛇游戏完整实例  # 纯原生js实现贪吃蛇游戏  # 原生js实现的贪吃蛇网页版游戏完整实例  # javascript编写贪吃蛇游戏  # js贪吃蛇网页版游戏特效代码分享(挑战十关)  # js实现网页版贪吃蛇游戏  # 拖动  # 绑定  # 数为  # 有个  # 吃了  # 右键  # 点此  # 上下左右  # 果果  # 后应  # 鼠标点击  # 写成了  # 贪吃蛇  # 蛇尾  # radius  # red  # size  # font  # input  # position 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何在云主机上快速搭建多站点网站?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  香港服务器选型指南:免备案配置与高效建站方案解析  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何在局域网内绑定自建网站域名?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Swift中switch语句区间和元组模式匹配  网站制作免费,什么网站能看正片电影?  Laravel如何自定义错误页面(404, 500)?(代码示例)  Laravel如何实现本地化和多语言支持?(i18n教程)  使用spring连接及操作mongodb3.0实例  如何快速登录WAP自助建站平台?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何在Windows虚拟主机上快速搭建网站?  如何基于云服务器快速搭建个人网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  浅谈javascript alert和confirm的美化  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Android中AutoCompleteTextView自动提示  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  java获取注册ip实例  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何解决hover在ie6中的兼容性问题  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel如何使用Livewire构建动态组件?(入门代码)  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  手机软键盘弹出时影响布局的解决方法  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  潮流网站制作头像软件下载,适合母子的网名有哪些?  香港服务器部署网站为何提示未备案?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  网站页面设计需要考虑到这些问题  Laravel如何实现API资源集合?(Resource Collection教程)  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  python中快速进行多个字符替换的方法小结  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何在云指建站中生成FTP站点?  如何在阿里云服务器自主搭建网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】