Andriod环境下开发五子棋游戏关键技术研究

时间:2022-09-24 06:30:43

Andriod环境下开发五子棋游戏关键技术研究

【摘要】本文以笔者在android环境下设计的一款五子棋游戏为研究对象,深入剖析了开发五子棋游戏关键技术,在棋盘绘制、屏幕监听和棋子绘制、五子棋输赢算法、五子棋AI设计各项技术方面介绍了笔者的解决方案。

【关键词】五子棋;AI设计;屏幕监听

随着Android手机的普及,Android游戏渐成趋势,本文在Android平台提供的控件和布局框架中开发一个简单易懂的五子棋游戏,对关键技术进行剖析。

1.游戏总体架构分析

对于五子棋游戏,首先要解决的是游戏界面问题,因为清晰美观的界面才能吸引用户,界面包括:棋盘,即棋子绘制范围;提示信息,即下棋结果提示语;棋子。界面的类分成:棋盘类、消息面板类、控制面板类。对他们进行操作不影响其他组件。棋盘可以绘制出来了,然后就是下棋了,计算机要选择合适的位置下棋,即每次下完棋后要有一个控制变量来控制能不能下棋。人可以随意下子,可计算机要计算哪个位置下子。这由计算机下子算法确定,对弈只要在双方下子时判断赢棋情况,还要同步的控制两个人下棋的顺序,这样的话就要用到线程,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。

2.游戏关键技术分析与实现

五子棋对弈要遵守五子棋规则,需要定义规则算法来保证对弈过程的正确性和真实性。规则算法中主要实现两个功能:输赢判断,人工智能AI。棋盘的绘制是将组成棋盘的元素,包括背景图片、棋盘线、星点和坐标,顺序绘制在屏幕上。监听手机的触屏动作,刷新界面,将棋子图片绘制在屏幕正确的位置上,完成下棋的效果。

2.1 棋盘绘制

五子棋对弈界面的开发可以划归到游戏开发里面,Android中游戏开发常常使用到三种视图:View,SurfaceView和GLSuifaceView。View是显示视图,布置画布,提供图形按键事件、触屏事件、绘制函数等;GLSuiface-View是由SurfaceView扩展而来专门用于3D游戏开发。View游戏框架已经足够开发五子棋界面的2D显示。定义游戏界面类gameView.继承View。复写父类的onDraw方法,在画布(Canvas)上依次绘制棋盘材质图片、垂直交叉的棋盘线。

2.2 屏幕监听和棋子绘制

View视图类中已封装触屏监听函数:onTouchEvent(MotionEvent event),event实例中保存触屏动作,如:按下、抬起、屏幕压力等。重写onTouchEvent函数,调用event的getX()、getY()方法获取手指在屏幕上的接触位置,将触摸点对应到相应棋盘坐标上。监听到Actiong_DOWN事件后就依据规则,判断是否可以落子,如果可以此处可以落子,那么调用invalidate()方法重绘画布,刷新屏幕,将棋子绘制在棋盘上。

2.3 五子棋输赢算法思想

准备一个数组表示当前棋盘,另外准备两个数组分别保存电脑和玩家每个可下点的坐标及其分数(棋型数组),每个可下点包括4个方向的分数,分别是横、竖、左斜、右斜。若某一方向有同色五子,那么输赢就分晓,游戏结束。

public boolean checkWin(int wfg){

for(int i = 0; i < GRID_SIZE- 1 ; i++ )

for(int j = 0; j < GRID_SIZE-1; j++){

//检测横轴五个相连

if(((i+4) < (GRID_SIZE-1))&&(mGarr[i][j]==wfg)&&(mGarr[i+1][j]==wfg)&& (mGarr[i+2][j] == wfg) && (mGarr[i+3][j]==wfg) && (mGarr[i+4][j]== wfg)){

Log.e("check win or loss:", wfg + "win");

mWinFlag = wfg;

} //纵轴5个相连

if(((j+4)<(GRID_SIZE-1))&&(mGarr[i][j]==wfg)&& (mGarr[i][j+1]==wfg)&&(mGarr[i][j+2]==wfg) && (mGarr[i ][j+ 3] == wfg) && (mGarr[i ][j+ 4] == wfg)){

Log.e("check win or loss:", wfg + "win");

mWinFlag = wfg;

}//左上到右下5个相连

if(((j+4) < (GRID_SIZE - 1))&& ((i+4) < (GRID_SIZE - 1)) && (mGarr[i][j] == wfg) && (mGarr[i+1][j+1] == wfg)&& (mGarr[i + 2 ][j+ 2] == wfg) && (mGarr[i + 3][j+ 3] == wfg) && (mGarr[i + 4 ][j+ 4] == wfg)){

Log.e("check win or loss:", wfg + "win");

mWinFlag = wfg;

}//右上到左下5个相连

if(((i-4)>=0)&& ((j+4)<(GRID_SIZE - 1)) && (mGarr[i][j] == wfg) && (mGarr[i-1][j+1] == wfg)&& (mGarr[i-2][j+2] == wfg) && (mGarr[i - 3][j+ 3] == wfg) && (mGarr[i-4 ][j+4]==wfg)){

Log.e("check win or loss:", wfg+"win");

mWinFlag=wfg;

}}

if( mWinFlag==wfg){

return true;

}else

return false;}

2.4 五子棋AI设计

游戏开始后,玩家第一次落子,清空从前的搜索结果,进行该次游戏的第一次搜索,扫描所有空白点,看是不是有可以连接五子的危险,若玩家先活三的情况下就防守,而AI方先达到活三的情况下则进攻。每次玩家落子,再次搜索,由搜索结果决定AI下子。如图1所示。

图1 五子棋AI

3.结论

本文主要讨论目前Android环境下五子棋游戏开发的关键技术,重点介绍了笔者的解决方案,随着研究的深入,相信基于Android 平台的游戏开发会有着很好的应用前景。

参考文献

[1]董红安.计算机五子棋博奕系统的研究与实现[D].南开大学,2011.

[2]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.

[3]李宁.Android开发完全讲义[M](第四版).中国水利水电出版社,2012.

[4]吴亚峰.于兴复.Android 应用开发完全自学手册[M](第一版).人民邮电出版社,2012.

[5]李宁.Android开发完全讲义[M](第二版).中国水利水电出版社,2012.

上一篇:实施ERP促进物资管理水平提升 下一篇:计算机辅助岔管下料的应用