游戏对象,用来管理游戏中的所有对象和开始游戏

    • Game
      • 属性
        • food
        • snake
        • map
      • 方法
        • Game构造函数
        • init 初始化方法 将小蛇和食物显示出来
        • 开启定时器,让小蛇移动起来,添加碰撞检测
        • 添加键盘按键信息,方向键控制小蛇上下左右移动

    ;(function(win){
    //1.构造函数
    function Game(){
    //地图的信息
    this.map = my$(“map”);
    //食物的信息
    this.food = new Food(0,0,20,20,”green”);
    //蛇的信息
    this.snake = new Snake(20,20,”right”);
    }
    //2.添加一个开始游戏的方法
    Game.prototype.startGame = function(){
    this.bindkey();
    //让食物和小蛇出现在页面
    this.food.init(this.map);
    this.snake.init(this.map);
    //开启定时器让小蛇移动
    var timer = setInterval(function(){
    //定时器中的this是window对象 console.log(this);
    //使用this来表示当前的游戏对象
    this.snake.move(this.map,this.food);
    //每移动一次需要判断小蛇是否死掉
    //bind方法还会将原函数拷贝一份,同时修改拷贝后的函数中的this指向
    var aadead = isdead.bind(this);
    aadead(timer);
    }.bind(this),200);
    }
    //3.判断游戏结束
    function isdead(timer){
    console.log(this);
    //什么时候小蛇会挂掉
    //3.1 超出边界
    var headX = this.snake.body[0].x;
    var headY = this.snake.body[0].y;
    if(headX<0 || headX>=(this.map.offsetWidth)/this.snake.width){
    clearInterval(timer);
    alert(“游戏结束”);
    }
    if(headY<0 || headY>=this.map.offsetHeight/this.snake.height){
    clearInterval(timer);
    alert(“游戏结束”);
    }
    //3.2 头撞身体
    //如何表示头撞身体? 用头之外的其他所有body和头相比较,如有有任何一个body的坐标和头一致,则说明头撞了身体
    for(var i=1;i var bodyi = this.snake.body[i];
    //如果头和身体相碰了,就游戏技术
    if(bodyi.x == headX && bodyi.y == headY){
    clearInterval(timer);
    alert(“游戏结束”);
    break;
    }
    }
    }
    //4.添加方向的控制
    //Game是js对象
    //onkeydown必须要dom对象
    Game.prototype.bindkey = function(){
    //给整个文档绑定onkeydown事件
    document.onkeydown = function(e){
    //注意点是我们现在的事件添加在document上面,那么此时的this是document对象
    var oev = e || window.event;
    switch (oev.keyCode){
    case 37:
    //左
    if(this.snake.direction == “right” || this.snake.direction == “left”){
    break;
    }
    this.snake.direction = “left”;
    break;
    case 38:
    if(this.snake.direction == “top” || this.snake.direction == “bottom”){
    break;
    }
    //上
    this.snake.direction = “top”;
    break;
    case 39:
    if(this.snake.direction == “right” || this.snake.direction == “left”){
    break;
    }
    this.snake.direction = “right”;
    //右
    break;
    case 40:
    if(this.snake.direction == “top” || this.snake.direction == “bottom”){
    break;
    }
    //下
    this.snake.direction = “bottom”;
    break;
    default:
    break;
    }
    }.bind(this);
    }
    //5.将game暴露给window
    win.Game = Game;
    }(window))