首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【编程】小弟我的第三个android程序-Snake之穿墙贪吃蛇

2013-01-23 
【编程】我的第三个android程序-Snake之穿墙贪吃蛇自从写完了第二个android程序后,我就彻底迷上了android。于

【编程】我的第三个android程序-Snake之穿墙贪吃蛇

        自从写完了第二个android程序后,我就彻底迷上了android。于是我讲Snake作为我的第三个android程序,在第二个程序编写完后,我在第二周就基本看懂了Snake的全部源代码。之后我尝试改变一下,使贪吃蛇具备穿墙的功能。我主要改了以下两个个地方:

        (1)加入onTouchEvent

        目标:用onTouchEvent替代onKeyDown,因为现在的android手机大多没有方向键了。

        算法:根据onTouchEvent中UP时得到的x,y值与Down的x,y值进行做差,同时比较根据δx与δy的绝对值的大小以及δx、δy的正负,判断用户的手势。

        源代码如下:

        //SnakeView.java

 public boolean onTouchEvent(MotionEvent event){          float x = event.getX();        float y = event.getY();                    switch(event.getAction()){            case MotionEvent.ACTION_DOWN:            mX = x;            mY = y;                //update();                return true;            case MotionEvent.ACTION_UP:            float dx = x-mX;            float dy = y-mY;            if(Math.abs(dx)>=0 || Math.abs(dy)>=0)            {                if(Math.abs(dx) >= Math.abs(dy))                {                if(dx>0.0f)                {                if (mDirection != WEST)                 {                            mNextDirection = EAST;                    }                return true;                }                else                {                 if (mDirection != EAST)                  {                            mNextDirection = WEST;                     }                 return true;                    }                    }                else                {                    if(dy<0.0f)                    {                 if (mMode == READY | mMode == LOSE)                  {                            /*                             * At the beginning of the game, or the end of a previous one,                             * we should start a new game.                             */                             initNewGame();                             setMode(RUNNING);                             update();                             return (true);                         }                         if (mMode == PAUSE)                          {                            /*                             * If the game is merely paused, we should just continue where                             * we left off.                             */                             setMode(RUNNING);                             update();                             return (true);                         }                                     if (mDirection != SOUTH)                      {                             mNextDirection = NORTH;                         }                     return true;                     }//if(dy>0.0f)                 else                 {                      if (mDirection != NORTH)                       {                             mNextDirection = SOUTH;                         }                      return true;                         }                    }//else            }//if(Math...            //return true;        }//switch        return (true);     }//onTouchEvent   


        (2)使贪吃蛇具备穿墙功能

         Snake的源代码如下:

          //SnakeView.java

        if ((newHead.x < 1) || (newHead.y < 1) || (newHead.x > mXTileCount - 2)                || (newHead.y > mYTileCount - 2)) {            setMode(LOSE);//失败            return;        }

 

        穿墙算法:当贪吃蛇头部到达墙时,及时改变其头部的坐标。

        源代码如下:

        //SnakeView.java

if (newHead.x < 1) {     newHead.x = mXTileCount - 2;     //return;}else if(newHead.y < 1){     newHead.y = mYTileCount - 2;     //return; }else if(newHead.x > mXTileCount - 2){    newHead.x = 1;    //return;}else if(newHead.y > mYTileCount - 2){    newHead.y = 1;    //return;   }

 

APK下载地址:http://download.csdn.net/detail/chjr1000/4990935

热点排行