js 贪吃蛇 大部分显而易见的问题已解决 但是代码过于复杂 欢迎纠错

//代码相比,上次做了优化,解决自身缠绕问题 解决后退问题  食物出现问题与自身缠绕问题大同小异,这里不做代码演示,各位如有兴趣,可以自己参考,自作

//鄙人拙作,献丑了

//时间:6小时

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>js控制移动</title>

<script>

window.onload=function(){

var snake={

timer:null,

oEvent:null,

dir:null,

sp:20,

speed:300,

num:0,

oDiv:document.getElementById(‘tou‘),

p:document.getElementsByClassName(‘lei‘),

update:function(){

snake.p=document.getElementsByClassName(‘lei‘);

},

oBigDiv:document.getElementById(‘lei1‘),

color:function(){//颜色分离

for(var i=1;i<snake.p.length;i++){

if(i%2==0)

snake.p[i].style.background=‘red‘

}

},

move:function(oEvent){//控制方向

if(snake.dir==‘left‘&&oEvent.keyCode==37&&snake.sp>0)

return;

if(snake.dir==‘left‘&&oEvent.keyCode==39&&snake.sp<0)//控制不能后退,四种情况

return;

if(snake.dir==‘top‘&&oEvent.keyCode==38&&snake.sp>0)

return ;

if(snake.dir==‘top‘&&oEvent.keyCode==40&&snake.sp<0)

return;

switch(oEvent.keyCode){

case 97:clearInterval(snake.timer);

snake.speed=snake.speed-50;

snake.timer=setInterval(function(){

snake.oDiv.style[snake.dir]=snake.oDiv.offsetLeft+snake.sp+‘px‘;

snake.follow();

},snake.speed);

break;

case 98:clearInterval(snake.timer);snake.speed=snake.speed+50;

snake.timer=setInterval(function(){

snake.oDiv.style[snake.dir]=snake.oDiv.offsetLeft+snake.sp+‘px‘;

snake.follow();

},snake.speed);

break;

case 32:clearInterval(snake.timer);break;

case 37: clearInterval(snake.timer);

snake.timer=setInterval(function(){

snake.dir=‘left‘;

snake.sp=-20;

snake.oDiv.style.left=snake.oDiv.offsetLeft-20+‘px‘;

snake.follow();

},snake.speed);break;

case 39: clearInterval(snake.timer);

snake.timer=setInterval(function(){

snake.dir=‘left‘;

snake.sp=20;

snake.oDiv.style.left=snake.oDiv.offsetLeft+20+‘px‘;

snake.follow();

},snake.speed);break;

case 38: clearInterval(snake.timer);

snake.timer=setInterval(function(){

snake.dir=‘top‘;

snake.sp=-20;

snake.oDiv.style.top=snake.oDiv.offsetTop-20+‘px‘;

snake.follow();

},snake.speed);break;

case 40:clearInterval(snake.timer);

snake.timer=setInterval(function(){

snake.dir=‘top‘;

snake.sp=20;

snake.oDiv.style.top=snake.oDiv.offsetTop+20+‘px‘;

snake.follow();

},snake.speed);break;

}

},

follow:function(){

snake.p[0].style.left=snake.oDiv.offsetLeft+‘px‘;

snake.p[0].style.top=snake.oDiv.offsetTop+‘px‘;

for(var i=snake.p.length-1;i>0;i--){

snake.p[i].style.left=snake.p[i-1].offsetLeft+‘px‘;

snake.p[i].style.top=snake.p[i-1].offsetTop+‘px‘;

}

snake.death();

if(snake.oDiv.offsetLeft>snake.oBigDiv.offsetWidth-snake.oDiv.offsetWidth){

alert(‘游戏结束,共吃‘+snake.num+‘个食物‘);

clearInterval(snake.timer);

document.onkeydown=null;

}

if(snake.oDiv.offsetLeft<0)

{

alert(‘游戏结束,共吃‘+snake.num+‘个食物‘);

clearInterval(snake.timer);

document.onkeydown=null;

}

if(snake.oDiv.offsetTop<0)

{

alert(‘游戏结束,共吃‘+snake.num+‘个食物‘);

clearInterval(snake.timer);

document.onkeydown=null;

}

if(snake.oDiv.offsetTop>snake.oBigDiv.offsetHeight-snake.oDiv.offsetHeight){

alert(‘游戏结束,共吃‘+snake.num+‘个食物‘);

clearInterval(snake.timer);

document.onkeydown=null;

}

if((snake.oDiv.offsetLeft==snake.pos.x)&&(snake.oDiv.offsetTop==snake.pos.y)){

snake.num++;

snake.eat();

}

},

pos:{

x:Math.round(Math.random()*39)*20,

y:Math.round(Math.random()*39)*20,

},

food:function(){

var food=document.createElement(‘div‘);

food.className=‘food‘;

food.style.left=snake.pos.x+‘px‘;

food.style.top=snake.pos.y+‘px‘;

snake.oBigDiv.appendChild(food);

},

eat:function(){//吃食物

var she=document.createElement(‘div‘);

she.className=‘lei‘;

snake.oBigDiv.appendChild(she);

snake.pos.x=Math.round(Math.random()*39)*20;

snake.pos.y=Math.round(Math.random()*39)*20;

snake.oBigDiv.removeChild(snake.oBigDiv.getElementsByClassName(‘food‘)[0]);

snake.food();

},

death:function(){//解决自身缠绕问题

for(var i=2;i<snake.p.length;i++){

if(snake.p[i].offsetLeft==snake.oDiv.offsetLeft&&snake.p[i].offsetTop==snake.oDiv.offsetTop){

alert("you are dead!!");

clearInterval(snake.timer);

document.onkeydown=null;

}

}

}

}

snake.food();

document.onkeydown=function(ev){

var oEvent=ev||event;

snake.color();

snake.oEvent=oEvent;

snake.move(snake.oEvent);

}

}

</script>

</head>

<style>

.food{

position:absolute;

background:#FF0;

width:20px;

height:20px;

float:left;

}

#tou{

width:20px;

height:20px;

background:#0FF;

position:absolute;

float:left;

}

.lei{

width:20px;

height:20px;

background:#063;

position:absolute;

float:left;

}

#lei1{

border:1px solid #000;

width:798px;

height:798px;

position:absolute;

top:150px;

left:50px;

}

#text{

background:#9F3;

width:800px;

height:100px;

position:absolute;

left:50px;

}

</style>

<body>

<div id="text">

<h1>说明:上下左右控制方向,小键盘1加速,2减速,space键暂停,上下左右随便开始</h1>

</div>

<div id="lei1">

<div id="tou" class="lei">1</div>

<div class="lei">2</div>

<div class="lei">3</div>

<div class="lei">4</div>

<div>

</body>

</html>

时间: 2024-08-03 02:05:45

js 贪吃蛇 大部分显而易见的问题已解决 但是代码过于复杂 欢迎纠错的相关文章

JS贪吃蛇游戏

<!DOCTYPE html><html> <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title>JS贪吃蛇游戏</title>    <style>    * {        margin: 0;    

js贪吃蛇 纯手打 代码比较复杂 自己瞎弄的 bug 比较多 自己一点一点排除弄 完全原创

//虽然代码没有别人写的简单,但是这是自己的思想,通过这次实例,学到了很多,也发现了很多不足,努力学习啊,小小的贪吃蛇也包含了很多东西还有 //好多问题需要解决,比如,如何判断蛇头碰到蛇身,如何让食物不出现在蛇的身上等,欢迎大家一起探讨 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt

JS贪吃蛇小游戏

效果图展示: 具体实现代码如下: (1)html部分 1 !DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>贪吃蛇</title> 6 <link rel="stylesheet" type="text/css" href="main.css"> 7 </h

html,css,js,贪吃蛇网页游戏

游戏效果如图: 实现代码如下: <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>贪吃蛇游戏</title> </head> <body> <h1>石健涛</h1> <div id="gameBox" style="text-align: center;&quo

js贪吃蛇源码

1.注意,自己引入jquery,这个demo基于jquery的,我的jquery是写的本地的 2.没有写注释,看不懂的再问我吧, <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> * { padding: 0; margin: 0; } div.w

html+js贪吃蛇

游戏区域限制在一个ul里,蛇的每一节是有一个个li组成,每个li都用position定位.食物是创建的一个div,每次蛇头碰触食物时,创建一个新的li,li会自动加载蛇的尾部,然后通过随机数改变食物的位置.通过响应键盘的wasd控制蛇头的方向(用的是onkeypress事件和keyCode),用定时器控制蛇头自动走,用数组储存蛇头每次所走的top和left值,用循环把这些top和left值赋值给蛇头后面的li上,这样蛇身子就会随着蛇头动起来了. 效果图: 标注:红色的圆是食物,蛇头是黑色的. 代

是男人就下100层【第四层】——Crazy贪吃蛇(2)

在上一篇<是男人就下100层[第四层]--Crazy贪吃蛇(1)>中我们让贪吃蛇移动了起来,接下来我们来实现让贪吃蛇可以绕着手机屏幕边线移动并且可以改变方向 一.添加状态并修改代码 首先我们来用另外一种方式实现上一版本中的刷新界面,在Crazy贪吃蛇(1)中我们自定义了一个线程每隔1s钟刷新界面,在线程中我们使用了postInvalidate()方法通知主线程重绘界面,我们打开View的源代码看看到底是如何通知主线程的,原代码如下: public void postInvalidate(int

贪吃蛇“大作战”(二)

从对象出发看贪吃蛇 在上一篇博客中,我通过逐行分析代码对贪吃蛇的运行机制做了一个简要的介绍:逐行分析后可以看出这个贪吃蛇例程的编写范式更突出面向过程:该例程先是预设食物和贪吃蛇的位置参数,然后通过选择逻辑判断外部命令的值,根据不同的值做出不同的动作,最后在地图上将之前的动作"渲染",达到贪吃蛇"前进"的效果:如此下来,一步一步地根据"看得到的逻辑"实现了贪吃蛇的运行机制. 现在,我从面向对象的编程思维来对这个贪吃蛇运行机制做一个分析.从下面这幅图

用JS实现的贪吃蛇游戏

需要用到html.css.javascript 和 DOM 这些知识点就可以了.主要是js,其他只是一些基本的知识.js貌似也不是很难.但是问题就在这里,即使知识点都会了,但是还是无法综合运用把东西做出来 游戏界面 先把整个游戏界面做出来: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>贪吃蛇</title&