【编程】我的第三个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