贪吃蛇(显示食物和蛇身)

<!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>贪吃蛇</title>
<style type="text/css">
#container{
    width:800px;
    margin:auto;
    margin-top:60px;
    }
#map{
    width:800px;
    height:400px;
    background-color:#CCC;
    border-color:#00F;
    border-style:ridge;
    overflow:hidden;
    position:absolute;
    
    }    
</style>
<script type="text/javascript" language="javascript">
//变量不使用var是因为变量的生存周期,如果出了函数体变量就会失效
var start_id;
function Food(){
    this.w = 20;
    this.h = 20;
    this.color = 'red';
    
     //显示食物
    this.display=function(){
        
        //我们要显示一个食物,首先要知道:大小,位置,属性
        var new_div = document.createElement("div");
        new_div.style.width = this.w+'px';
        new_div.style.height = this.h+'px';
        
        //位置我们采用0,1,2……
        //求有多少个空格
        this.x = Math.round(Math.random()*39);//求x轴有多少空格
        this.y = Math.round(Math.random()*19);//求y轴有多少空格
        
        //利用坐标确定位置
        new_div.style.left=(this.w*this.x)+'px';//离左端的距离,也是x轴坐标
        new_div.style.top=(this.h*this.y)+'px';//离左端的距离,也是y轴坐标
        
        new_div.style.backgroundColor=this.color;
        new_div.style.position="absolute";
        document.getElementById('map').appendChild(new_div);
        this.div=new_div;
        }
             this.reDisplay=function(){
                document.getElementById('map').removeChild(this.div);
                    this.display();
                    }
    }    
    
    
    //显示蛇
    function Snake(){
        this.w =20;
        this.h = 20;
        this.direct = 'right';
             //通过数组来保存蛇身,一个元素代表一个蛇节
        this.body=[
          { x:5,y:3,color:"blue"},
          { x:4,y:3,color:"red"},
          { x:3,y:3,color:"red"}

        ]
        this.display=function(){
        
        
        for(var i=0;i<this.body.length;i++){
            var snake_div = document.createElement("div");
            snake_div.style.width = this.w+'px';
            snake_div.style.height = this.h+'px';
            
            snake_div.style.left=(this.w*this.body[i].x)+'px';
            snake_div.style.top=(this.h*this.body[i].y)+'px';
            
            snake_div.style.position="absolute";
            snake_div.style.backgroundColor=this.body[i].color;
            document.getElementById("map").appendChild(snake_div);
            //生成食物时就要给这个食物做个标记,方便删除
            this.body[i].div = snake_div;
            
            }
                
          }

          this.move=function(){
               //移动蛇身
                 for(var i=this.body.length-1;i>0;i--){
                   this.body[i].x=this.body[i-1].x;
                   this.body[i].y=this.body[i-1].y;

                   }
              //移动蛇头
                       switch(this.direct){
                        case 'up':
                             this.body[0].y-=1;
                             break;
                        case 'down':
                             this.body[0].y+=1;
                             break;
                        case 'left':
                             this.body[0].x-=1;
                             break;
                        case 'right':
                             this.body[0].x+=1;
                            // this.body[0].y=this.body[0].y;
                             //alert(this.body[0].x);
                              //alert(this.body[0].y);
                             break;
                            
                        }
    
                        //把旧的蛇节删除
                            this.removeSnake();
                        //按照新的位置属性重新显示一下
                             this.display();
                        //撞墙死后
                         if(this.body[0].x<0 ||this.body[0].x>39 || this.body[0].y<0 || this.body[0].y>19){
                alert('Game Over');
                //清空定时器
                clearInterval(snake_id);            
                            
                             }
                //判断是否撞到自己,判断头的坐标和身体的某一节重合,但是前四节肯定撞不上
                for(var i=this.body.length-1;i>=4;i--){
                    if(this.body[0].x==this.body[i].x && this.body[0].y==this.body[i].y){
                        alert('撞自己了!');
                        //新添 清空定时器
                        <!--clearInterval(snake_id);-->
                        }
                    
                    }            
                        
                    //吃食物后长一节,判断头部坐标和食物坐标重合,并增加一节
                    if(this.body[0].x==food.x && this.body[0].y==food.y){
        //现在吃上食物了,蛇身增加一节
            this.body[this.body.length]={x:0,y:0,color:'red',div:null};                
                //吃一个食物之后,让旧的食物消失,让新的事物显示
                food.reDisplay();        
                        }
                                
                                  
              }
               //改变方向
                    this.setDirect=function(keycode){
                        switch(keycode){
                             case 37:
                        if(this.direct!='right'){
                            this.direct="left";}
                            break;
                             case 38:
                        if(this.direct!='down'){
                             this.direct="up";}
                             break;
                             case 39:
                        if(this.direct!='left'){
                            this.direct="right";}
                            break;
                            case 40:
                        if(this.direct!='up'){
                            this.direct="down";}
                            break;
            
                        }
                    }
            
              
              this.removeSnake=function(){
                  //先找到他的父元素
                  var map = document.getElementById('map');
                  for(var i=0;i<this.body.length;i++){
                      <!--if(this.body[this.body.length]!==null){-->
                    if(this.body[i].div!=null){
                      map.removeChild(this.body[i].div);
                      }
                  }
                  
                  
        }
        }
    
    
    function init(){
            food = new Food();    
            food.display();
            
            snake = new Snake();
            snake.display();
    }
    
 
        
    function changeDirect(evtkey){
        //alert(evtkey.keyCode);
        snake.setDirect(evtkey.keyCode);
        }
        
        
        function Startmove(){
document.getElementById("pause").disabled=false;
snake_id = setInterval('snake.move();',500);
document.getElementById("start").disabled=true;

}
        function Pause(){  
clearInterval(snake_id);
document.getElementById("start").disabled=false;
document.getElementById("pause").disabled=true;
}
</script>
</head>

<body οnlοad="init()" οnkeydοwn="changeDirect(event)">
<div id="container">
<input type="button" value="开始" id="start" οnclick="Startmove()"/>
<input type="button" value="暂停" id="pause" οnclick="Pause()"/>
<div id="map">
</div>
</div>
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值