as贪食蛇小游戏(二)

继续上一篇接下来我们还需要添加键盘的事件来控制贪食蛇的上下左右,

先在构造函数里面添加监听事件

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();

      }

好了,到现在,一个粗糙的版本就出来了,接下来就是完善一些细节,例如计分,等级,以及游戏结束的提示等等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值