继续上一篇接下来我们还需要添加键盘的事件来控制贪食蛇的上下左右,
先在构造函数里面添加监听事件
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler);
snakeGame类里面添加2个全局变量
private varisStop:Boolean=true;
private varisOver:Boolean=false;
把snakeGame类构造函数里面的timer.start()去掉,不然程序一运行游戏就开始了。
添加以下2个方法事件
private functiononKeyDownHandler(event:KeyboardEvent):void
{
switch(event.keyCode)
{
case 38 : //up
{
goX=0;
goY=goY>0?goY:-Config.MAP_GRID_WIDTH;
break;
}
case 40 : //down
{
goX=0;
goY=goY<0?goY:Config.MAP_GRID_WIDTH;
break;
}
case 37 : //left
{
goX=goX>0?goX:-Config.MAP_GRID_WIDTH;
goY=0;
break;
}
case 39 : //right
{
goX=goX<0?goX:Config.MAP_GRID_WIDTH;
goY=0;
break;
}
case 32 : //如果按下的是空格键
{
GameStatusChangeHandler(newMouseEvent("space") );
}
default:
break;
}
}
private functionGameStatusChangeHandler(event:MouseEvent):void
{
if(!isOver)
{
if(isStop)
{
timer.start();
isStop=false;
}
else
{
timer.stop();
isStop=true;
}
}
}
好了,现在运行程序,按空格键就开始游戏了。
还有,游戏什么情况下结束呢?
1. 咬到自己
2. 撞到墙了。
那我们就在snakeMove方法里面添加多2种判断:
if(snakeHead.x+goX<=Config.MAP_X||snakeHead.y+goY<=Config.MAP_Y
||snakeHead.x+goX>=Config.MAP_X+Config.MAP_WIDTH
||snakeHead.y+goY>=Config.MAP_Y+Config.MAP_HEIGHT)
{
gameOver();
return;
}
for(varj:int=snakeList.length-1;j>0;j--)
{
if(snakeHead.x+goX==snakeList[j].x&&snakeHead.y+goY==snakeList[j].y)
{
gameOver();
return;
}
}
然后添加多一个方法
private function gameOver():void
{
isOver=true;
timer.stop();
}
好了,到现在,一个粗糙的版本就出来了,接下来就是完善一些细节,例如计分,等级,以及游戏结束的提示等等。