Android 贪吃蛇

先上个效果图吧

贪吃蛇.gif

改个颜色,瞬间帅气了有木有。

帅气.jpg


实现思路:

自定义一个View,在游戏开始的时候,开启一个定时器,不停地去刷新界面(即调用View的invalidate或者postInvalidate)。在onDraw中去绘制蛇身、食物,并且要判断蛇是否吃到了苹果,是否死亡(碰到边界或者咬到自己)。

其中

· 蛇身可以看做的一些连续的点的集合,用一个List<PointF>来维护。  

·食物可以看做是一个点,用一个PointF来维护。

·由于蛇可以拐弯,而且可以连续地拐,所以还需要一个List<PointF>来维护拐点。

绘制过程:

食物的是一个点。可以直接用canvas.drawCircle()来绘制。

难点在于蛇身的绘制,用的是canvas.drawPath()来绘制一系列点的联结,其中path是这样定位的:蛇尾->拐点1->拐点2->拐点3->....->蛇头。这里面的拐点又涉及到一个失效的问题,当蛇身中所有的点都经过了这个拐点的时候,它就失效了。就要从拐点的List中移除它。如果不让它失效的话,会造成绘制混乱,这里不细说。


蛇身绘制代码段.jpg

两个判断:

·是否吃到食物:这个比较容易,只要判断蛇头和食物是否是同一个点即可。但是有一点需要注意,就是在判断过程中不能刷新界面,因为刷新过程中的蛇头是不停移动的。如果不停止刷新,可能会有碰到食物但是吃不到的现象。吃到食物后,蛇身要增加一个点。这里我是加在了尾部。

吃食物代码段.jpg

·是否死亡:

碰到边界死亡:循环蛇身看是否有超出边界的点即可。

咬到自己死亡:看蛇头是否与蛇身中其他点重合即可。

废话两句

我得承认我有个特别不好的毛病,就是做事只做一半。也许就是我成不了大器的原因哈哈。游戏是花了十几个小时完成的,但是还有很多需要完善的地方。比如说:有的时候会不明原因地死掉,有的时候拐点没有失效导致蛇身绘制混乱。因为都是一些随机的情况,真的非常难测试(自己给自己找借口)。我还默默地决定不随便上传源码了哈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容