javascript實現貪喫蛇

<html>
<head>
<style>
body
{
 background:#444;
}
.rect
{
	border:1px solid #94F;
	width:680px;
	height:680px;
}
.gridred
{
width:38px;
height:38px;
background:red;
border:1px #555 solid;
float:left
}
.gridgreen
{
width:38px;
height:38px;
background:green;
border:1px #555 solid;
float:left
}
.gridblue
{
width:38px;
height:38px;
background:blue;
border:1px #555 solid;
float:left
}
.st
{
width:100;
height:40;
font-size: 30;
font-family:Georgia;
color:#F40;
margin:0.5cm;
top:800px;
background:#FFF;
text-align:center;
}
h1.important
{
 color:#FFFF00;
}

</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
<script>
var Max=17;//格子數
var direction=3;//蛇正在爬行的方向1左 2上 3右 4下
var snack=new Array();
var arr=new Array();
var foodx,foody;
var time;
var gameover1=1;
//獲得下一個食物的座標
function getrand()
{
 foodx=Math.round(Math.random()*20)%Max;
 foody=Math.round(Math.random()*20)%Max;
}
//判斷下一個食物的座標合法性
function rand()
{
getrand();
while(arr[foodx][foody])
 getrand();
 var before=document.getElementById(foodx+"_"+foody);
 before.setAttribute("class","gridblue");
}
//開始遊戲
function begin()
{
if(!gameover1)
return ;
gameover1=0;
console.log(foodx);
var bu=document.getElementById("beg");
bu.disabled=true;
 snack.push([8,8]);
 var before=document.getElementById(8+"_"+8);
 arr[8][8]=1;
 before.setAttribute("class","gridred");
 rand();
 time=setInterval("go()",850);
}

//遊戲結束
function gameover()
{
  clearInterval(time);
  gameover1=1;
  alert("gameover!");
  var bu=document.getElementById("beg");
  bu.disabled=false;
  for(var i=0;i<snack.length;i++)
  {
    var x=snack[i][0];
    var y=snack[i][1];
	arr[x][y]=0;
	var bu=document.getElementById(x+"_"+y);
	bu.setAttribute("class","gridgreen");
  }
  var bu=document.getElementById(foodx+"_"+foody);
	bu.setAttribute("class","gridgreen");
  snack.length=0;
}
//判斷是否出界
function legal(x,y)
{
  if(x>=0&&x<Max&&y>=0&&y<Max)
  return true;
  return false;
}
//蛇行走
function go()
{
if(gameover1)
return ;
var x=snack[snack.length-1][0];
var y=snack[snack.length-1][1];
switch(direction)
 {
  case 1:y-=1;break;
  case 2:x-=1;break;
  case 3:y+=1;break;
  case 4:x+=1;break;
 }
 if(!legal(x,y))
 {
 gameover();
 return false;
 }
 if(arr[x][y]==1)
 {
 gameover();
 return false;
 }
 arr[x][y]=1;
 snack.push([x,y]);
 var before=document.getElementById(x+"_"+y);
 before.setAttribute("class","gridred");
 if(!(x==foodx&&y==foody))
 {
 var point=snack.shift();
  arr[point[0]][point[1]]=0;
 var last=document.getElementById(point[0]+"_"+point[1]);
 last.setAttribute("class","gridgreen");
 }
 else
 {
 rand();
 }
 return true;
}
function map()//生成地圖
{
  arr.length=Max;
  for(var i=0;i<Max;i++)
  {
  arr[i]=new Array();
  arr[i].length=Max;
  }
  for(var i=0;i<Max;i++)
  for(var j=0;j<Max;j++)
  {
   arr[i][j]=0;
  }
  var x=document.getElementById("body");
  for(var i=0;i<Max*Max;i++)
  {
   var local=document.createElement("div");
   local.setAttribute("class","gridgreen");
   local.id=parseInt(i/Max)+'_'+parseInt(i%Max);
	x.appendChild(local);
  }
}
//監測鍵盤按鍵
$(document).ready(function(){
$("html").keydown(function(event){
 keycommand(event.which);
});
});
//按鍵命令觸發
function keycommand(which)
{
 if(which!=32&&(which<37||which>40))
  return ;
  switch (which)
  {
     case 32:stop();break;
	 case 37:changeDirection(1);break;
	 case 38:changeDirection(2);break;
	 case 39:changeDirection(3);break;
	 case 40:changeDirection(4);break;
  }
}
//改變蛇的方向
function changeDirection(x)
{
 if(Math.abs(x-direction)==2)
 return ;
 direction = x;
 clearInterval(time);
 if(go()) 
 time=setInterval("go()",800-snack.length*15+50);
}

</script>

</head>
<body οnlοad="map()" >
<br/>
<h1 align="center" class="important">貪喫蛇</h1>
<div align="center">
<div class="rect" id="body" >
</div>
</div>
<div align="center">
<button id="beg" οnclick="begin()" class="st">start</button>
</div>

</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章