游戏对象,用来管理游戏中的所有对象和开始游戏
- Game
- 属性
- food
- snake
- map
- food
- 方法
- Game构造函数
- init 初始化方法 将小蛇和食物显示出来
- 开启定时器,让小蛇移动起来,添加碰撞检测
- 添加键盘按键信息,方向键控制小蛇上下左右移动
- Game构造函数
- 属性
;(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
//如果头和身体相碰了,就游戏技术
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))