作者:郭涵川


在这次的Android课堂实验中,我实现了五子棋游戏中的人机对战模式。在这次的实验中我遇到了很多困难,在克服这些困难的过程中学到了很多的知识,让我对Android有了更深层次的了解。


五子棋游戏逻辑十分简单,可以明显的分为四个部分:白棋下、判断白棋是否获胜、黑棋下、判断黑棋是否获胜;在判断获胜的两个部分可以使用相同的方法,所以总结起来我们只需完成白棋下、黑棋下、判断获胜三个部分。而如果是人人对战模式,那么白棋下与黑棋下的实现逻辑将完全相同。所以我在选择实现顺序的时候选择先实现人机对战的模式来练习。


我个人认为人机对战的实现相对于人人对战模式更加复杂,人机对战模式的实现相对于人人模式增加了游戏AI,而且仅仅是增加了游戏AI,所以在这个实现中对游戏AI的实现成为了重点。通过在网上的查找和总结,知道最通用的实现五子棋游戏AI的算法就是:根据五子棋游戏规则指定在不同情况下每个位置的权值,然后在Bot开始下棋时在地图上计算权值最大的位置即可。经过对五子棋游戏的简单研究,之后又在网上查找了相关算法的实现资料,自己实现了一个简单的五子棋算法。虽然不能有很高的AI不过已经可以达到初级玩家的水平。


在实现游戏时,除了Bot下棋的算法,还有就是在棋盘上下棋这个过程。我首先是尝试了ImageView作为游戏棋盘的空间载体,但是在实现过程中发现,由于需要对棋盘图片做很多操作,由ImageView实现的棋盘很难满足我自己定制的方法,最后不得不放弃这个控件。经过在网上的查找,我最后通过继承ImageView这个控件,自己定义一个新的控件mapView,来满足自己的各种操作。

对地图的操作首先就是获得鼠标(手)点击的位置,因为mapView是继承自ImageView的自定义控件,所以可以直接重写ImageView的鼠标点击事件响应的




在这个方法中,可以添加对按下、抬起、移动三个事件的响应,在这里根据通常的五子棋游戏设计,我只实现了按下的事件响应,然后通过按下事件获得按下位置的(X,Y)坐标,之后通过换算成棋盘上的位置来实现下棋。除此之外,棋子的画法也是一个问题,在我的实现中我没有使用图片,而是重写了ImageView的画图方法:




这个方法获得了ImageView的canvas,这样我们就可以利用canvas在mapView上画出想要的图形。因为五子棋都是圆形的,所以我们可以直接在相应的位置上画圆。

那么最后一个部分,就是判断游戏是否结束。这个判断的实现非常简单,就是在四个方向上(上下、左右、上左下右、上右下左)判断是否存在五个连续的棋子,如果有那么游戏就结束。对于这个验证方法不做过多介绍,我主要来说一下在已经判断出游戏结束的情况下,如何实现游戏界面的跳转。因为在之前的开发过程中,我都是使用点击事件来实现游戏界面的跳转,但是在这个问题中出现了一个问题,就是我判断游戏是否结束是在mapView类中实现的,而不是哪一个Activity中,所以无法拿到前一个Activity,无法实现跳转。在我查看ImageView源码时,我看到了ImageView构造函数中的Context类型对象,经过在网上的查找,发现它就是我日思夜想的对象,之后我重写了ImageView的三个构造函数:




之后,我就可以使用初始化过程中传过来的context来控制界面的跳转了。

在实现了这些之后,我觉得五子棋游戏可以结束了。但是,在我想推出游戏的时候,我发现按返回按钮,它会一层一层的返回上层界面,这显然不是一个游戏应该有的结束方式。之后,我在网上查找,发现Android有一个堆栈,存放每一个Activity,所以按返回的过程就是堆栈弹出栈的过程。在网上查找之后,我找到了只要在跳转之后加上语句





更多相关文章

  1. J2me游戏如何快速移植到Android(安卓)(2)
  2. android 地理位置共享服务
  3. Android拼图游戏开发全纪录0
  4. Android(安卓)studio 快捷键,解决返回上次浏览位置ctrl+alt+left/
  5. Android游戏Graphics绘图之图像像素操作
  6. flappy bird游戏源代码揭秘和下载后续---移植到android真机上
  7. Android(安卓)Map Api 使用和开发(1) 添加地图和界面
  8. Android华容道——我的第二个Android程序(第一个是HelloWorld)
  9. Android(安卓)Studio和Gradle使用不同位置JDK的问题(Android(安

随机推荐

  1. R cannot be resolved to a variable
  2. Android绘图机制(五)自定义控件的官方实例
  3. Google android初级开发之 : android 模
  4. Ubuntu上编译Android内核源码
  5. android中的Context(android内核学习记录
  6. 深入Android(安卓)【一】 —— 序及开篇
  7. Android(安卓)开发技巧 - Android(安卓)6
  8. android用户界面编程技巧——如何使用Ada
  9. android中APK包的安装以及adb命令的使用
  10. 让Android应用程序支持安装到SD卡(APP2SD)