基于Android的中国象棋手机APP设计与实现

2018-05-15 08:31沈旭梁文
软件导刊 2018年4期
关键词:移动设备中国象棋手机游戏

沈旭 梁文

摘 要:中国象棋历史悠久,集思想谋略、军事竞技于一体,是一种古老而传统的文化。中国象棋手机APP是基于Android平台开发的一款应用软件,具备兼容性和人机对弈的特点。 其APP设计主要由3部分组成:流程分析、功能设计与数据结构设计,对游戏界面设置、棋盘绘制、游戏规则与棋子走法设置,以及所有布局算法进行设计开发,实现了APP的预定功能。实际运行结果表明,中国象棋手机APP界面美观、运行稳定,富有对抗性且具有传统文化色彩,有助于游戏者的智力开发与思维能力锻炼。

关键词:Android;移动设备;中国象棋;手机游戏

DOI:10.11907/rjdk.172668

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2018)004-0104-03

Abstract:Chinese chess has a long history and combines ideological strategy and military competition. It is an ancient and traditional culture. Chinese chess mobile phone APP is based on the Android platform to develop an application software, with compatibility and man-machine chess features. APP design mainly consists of three parts: process analysis, function design and data structure design. the game interface, welcome board drawing, the rules of the game, chess go settings, and all layout algorithm are set and designed, to achieve the intended function of APP. The actual running result proves that Chinese chess mobile phone APP has the characteristics of beautiful interface, stable operation, full of antagonism and traditional culture color, and it is conducive to the development of human intelligence and peoples thinking ability.

Key Words:Android; mobile devices; Chinese chess; mobile game

0 引言

随着信息技术的高速发展,智能手机已进入到普通人的日常生活,手机游戏这种大众化的娱乐方式也受到人们的广泛欢迎。中国象棋发展至今已有两千三百多年历史,是中华民族的国粹。它集文化、科学、军事、竞技于一体,有利于开发人的智力,锻炼人的思维能力,并增强人的竞争意识[1]。中国象棋爱好者遍布全球,通过网络,下棋没有了地域限制,人们甚至可以和电脑对弈。在对弈中,对战双方通过对游戏规则的掌握使游戏结果利于己方,机器博弈研究成果已广泛应用于众多领域[2]。通过中国象棋人机游戏,可以使象棋爱好者及希望了解象棋的人更加轻松地感受象棋的魅力[3]。

1 Android特征与体系结构

1.1 Android特征

Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,打破了iPhone等只能添加为数不多的固定软件的枷锁。同时,与Windows mobile、Symbian等操作系统不同,Android操作系统免费向开发人员开放,从而大大降低了开发成本[4]。

1.2 体系结构

Android的系统架构与其操作系统相同,采用了分层架构。Android结构分为4层,从低到高层分别为:①Linux内核层:该层是基础层,包含各种驱动,并提供操作系统的基本功能;②中间层,包括程序库(Libraries)和Android运行环境;③应用框架层:该层是编写核心应用使用的API框架,开发者可以使用相关框架开发自己的应用,但必须遵守该框架的开发原则[5];④应用层:该层是各种应用软件,包括通话、短信、日历、地图、浏览器等软件的核心应用程序。

2 系统分析

2.1 可行性分析

中国象棋人机游戏是基于Android平台开发的一个手持设备应用游戏,具备兼容性和人机对弈的特点。中国象棋游戏属于棋牌类游戏,每类不同的棋子有着各自固定的走法,对弈双方进行轮换走棋。本游戏模拟人人对弈,可实现人机对弈。游戏设计主要由3方面组成:流程分析、功能设计与数据结构设计。

2.2 界面需求分析

游戏界面需求如下:①运行游戏,首先出现欢迎界面,随后进入菜单页面;②菜单页面设置“开始游戏”、“象棋历史”、“象棋规则”、“退出游戏”几个板块。点击“象棋历史”与“象棋规则”可分别进入象棋历史介绍与游戏玩法介绍页面;③单击“开始游戏”进入游戏主界面,游戏界面中玩家按照象棋规则下棋,可单击声音按钮控制声音,当游戏一方的“将”或“帅”被吃掉时,出现“你输了”或 “你赢了”界面。游戏中玩家还可随时通过“退出”按钮返回游戏主菜单。

2.3 游戏流程分析

进入游戏界面后,设置象棋棋盘。双方各持一種颜色的棋子,棋子按照规则从棋盘的一个位置走到另一个位置,或吃掉该位置上对方的一枚棋子,方为走了一步,之后以轮换的方式进行交互走棋博弈。玩家走完一步后,程序需要在棋子的诸多走法中,通过搜索函数和局面评估函数逐一打分,最后挑选出最佳走法并执行[6]。

3 游戏系统设计与实现

3.1 类框架设计

通过浏览中国象棋的历史以及走法,同时结合象棋人机对战游戏的需求分析,游戏总体设计由以下几部分组成:共有类、辅助界面相关类、游戏界面相关类。

共有类是Activity的派生类Chess_DJB_Activity,该类是游戏的控制器,也是整个程序的入口;辅助界面相关类由欢迎界面类WelcomeView、菜单界面类MenuView等组成;游戏界面相关类由游戏界面类GameView、游戏界面相关常量类ViewConstant组成;走法引擎相关类由常量类Constant、方法类Chess_LoadUtil、走法引擎主类LoadUtil、比较器类MyComparator,以及走棋步骤类StackplayChess组成。

3.2 共有类实现

共有类Chess_DJB_Activity的主要作用是通过接收Handler消息变量,根据各界面发送过来的Handler消息类型判断需要执行的操作。适当地初始化相应用户界面,各个界面初始化被调用时,根据其它界面需求直接将用户界面切换到相应界面[7]。

3.3 辅助界面相关类实现

游戏欢迎界面通过WelcomeView类实现,加载一个欢迎图片,并通过监听菜单图片,向Activity发送Handler消息,通知控制器切换用户界面,然后切换到菜单界面MenuView。MenuView类中通过监听“开始游戏”切换到游戏界面,监听“打开声音/关闭声音”按钮切换声音的打开与关闭,监听“象棋历史”切换到象棋起源界面,监听“象棋规则”切换到规则介绍页面,监听“退出游戏”,结束并退出游戏。

3.4 游戏界面相关类实现

游戏界面类GameView是游戏最核心的类,该类首先绘制屏幕棋盘和相应棋子,提示一方先走,当“帅”或“将”被吃掉则弹出“赢”或者“输”[8],还可控制游戏声音及结束游戏。

3.5 走法引擎相关类实现

3.5.1 常量类Constant

中国象棋分为红黑双方,以楚河汉界为界限,双方排兵布阵,一方持16子,分为2车、2马、2炮、2象(相)、2士(仕)、1将(帅)、5卒(兵)。各类棋子走法不同,具体如下:“将”、“帅”统领整个棋局,在中军帐中运筹帷幄,并且受到严密保护,不能随意走出军帐范围。因此,“将”、“帅”的行走范围只在己方底三行中三列形成的9个交叉点,俗称“九宫格”,一步只能走一个方格的直线距离。同时,在中间无其它棋子隔离时,将帅不能出现在同一条直线上,如图1所示。

“仕”的主要职责是保护首领,因此它们也只能在将帅附近九宫格的交叉线上走动,一步只能走一个交点的距离;“象”、“相”只可在己方阵营以“田字格”形式走动,不能过河,走动时起始点与目标点构成一条斜线,若该斜线的中点位置存在其它棋子(包括己方棋子),则无法走动;“炮”可以走直线上的任意距离,但起点与目标点之间不能存在其它棋子。“炮”消灭对方棋子的条件是与目标棋子在一条直线上,而且两棋子之间有且只有一个棋子(已方或敌方棋子)作为“炮台”,如图2所示。

“马”只能走“日”字方格并且可以过河,但是存在“绊马腿”的情况,从初始位置到目标位置紧挨着的两格长度方向不能有棋子,否则会被绊住;“车”可以随意在直线上走动任意距离,但起点和目标点中间不能有其它棋子,包括己方棋子;卒和兵个数最多,在过河之前不能向左右走,只能向前走,过河之后可以向左右走,但不能向后走。

3.5.2 棋盘表示

对于棋盘的设计,每种棋子采用一个固定值以识别该棋子类型,然后根据红黑双方以及不同类型的棋子设计规则类,调用其中的canMove方法判断每一步走法是否可行。规则类设计采用规则方法,因为棋子种类只有7类,且红黑双方位于棋盘两端[9],部分棋子走动时方向不同,设计时需要进行分类设计,采用14种不同的判别方法对所有棋子的走法进行判断。棋盘上各个棋子以及棋盘的初始布局设计采用10*9的数组进行标识,各数字的对应关系为:

0-无棋子;8-黑方的将;9-黑方的士;10-黑方的象;11-黑方的马;12-黑方的车;13-黑方的炮;14-黑方的卒;16-红方的帅;17-红方的仕;18-红方的相;19-红方的马;20-红方的车;21-红方的炮;22-红方的兵。

3.5.3 走法引擎主类实现

(1)在棋盘上放一枚棋子的方法AddPiece:

public static void AddPiece(int sq, int pc){

ucpcSquares[sq]=pc;

if (pc<16) {

vlWhite+=cucvlPiecePos[pc-8][sq];

} else {

vlBlack+=cucvlPiecePos[pc-16][SQUARE_FLIP(sq)];

}

}

(2)在棋盤上拿走一枚棋子的方法DelPiece:

public static void DelPiece(int sq, int pc){

ucpcSquares[sq]=0;

if (pc<16) {

vlWhite-=cucvlPiecePos[pc-8][sq];

} else {

vlBlack-=cucvlPiecePos[pc-16][SQUARE_FLIP(sq)];

}

(3)撤销一步棋的方法UndoMakeMove:

public static void UndoMakeMove(int mv,int pcCaptured){

nDistance--;

ChangeSide();

UndoMovePiece(mv, pcCaptured);

}

(4)移动棋子方法MovePiece:

public static int MovePiece(int mv){

int sqSrc, sqDst, pc, pcCaptured;

sqSrc=SRC(mv);

sqDst=DST(mv);

pcCaptured=ucpcSquares[sqDst];

if (pcCaptured !=0) {

DelPiece(sqDst, pcCaptured);

}

pc=ucpcSquares[sqSrc];

DelPiece(sqSrc, pc);

AddPiece(sqDst, pc);

return pcCaptured;

}

(5)撤銷移动棋子方法UndoMovePiece:

public static void UndoMovePiece(int mv,int pcCaptured){

int sqSrc, sqDst, pc;

sqSrc=SRC(mv);

sqDst=DST(mv);

pc=ucpcSquares[sqDst];

DelPiece(sqDst, pc);

AddPiece(sqSrc, pc);

if (pcCaptured !=0) {

AddPiece(sqDst, pcCaptured);

}}

(6)走棋的方法MakeMove:

public static boolean MakeMove(int mv, int pcCaptured){

pcCaptured=MovePiece(mv);

if (Checked()) {

UndoMovePiece(mv, pcCaptured);

return false;}

ChangeSide();

nDistance++;

return true;}

3.6 游戏实现

子力价值表示一个棋子在棋盘中某个位置时的价值,而一方棋盘上所有棋子的子力价值之和,表示该局面下的局面价值。局面价值越大,说明该局面对己方越有利,程序根据局面价值搜索最优走棋步骤并执行。

4 结语

在中国象棋人机对战APP的开发中,遇到了诸多问题,如棋子走法如何约束、人机轮流走棋如何控制等。最后成功克服了诸多难题,实现了一款界面美观、运行稳定,且富有对抗性和传统文化色彩的中国象棋人机对弈游戏Android APP。未来还可作进一步改进,比如通过深度学习等人工智能算法[10],让机器更加“聪明”,从而使人机对战更具有挑战性和观赏性。

参考文献:

[1] 杜帮国.基于Java平台的中国象棋游戏的设计与实现[D].大连:大连理工大学,2013.

[2] 魏钦刚,王骄,徐心和,等.中国象棋计算机博弈开局库研究与设计[C].2006中国机器博弈学术研讨会,2006.

[3] 王晓鹏,王骄,徐心和,等.中国象棋与国际象棋比较分析[J].重庆工学院学报:自然科学版,2007(1):71-76.

[4] 韩敬海.Android程序设计[M].北京:电子工业出版社,2012.

[5] 赵燕萍.Java程序设计语言基础研究[J].硅谷,2013(8):61-62.

[6] 徐心和,王骄.中国象棋计算机博弈关键技术分析[J].小型微型计算机系统,2006,27(6):961-969.

[7] 苏攀,王熙照,李艳.基于不平衡学习的分类器博弈模型及其在中国象棋中的应用[J].计算机研究与发展,2011(5):841-847.

[8] 周玮,王水涛,孙旸.中国象棋计算机博弈中的一种数据结构方法[J].计算机工程与应用,2006(35):219-221.

[9] 杜俊俐,张景飞,黄心汉.基于视觉的象棋棋盘识别[J].计算机工程与应用,2007(34):220-222.

[10] 刘建伟,刘媛,罗雄麟.深度学习研究进展[J].计算机应用研究,2014(7):1921-1930.

(责任编辑:黄 健)

猜你喜欢
移动设备中国象棋手机游戏
让手机游戏成为传统文化的传播新渠道
手机游戏对大学生的负面影响及对策分析
移动端界面设计中“容错性”思考
马踏连营
马踏连营
中国象棋博弈程序中边界判断的优化方法研究
为业余棋手诊脉
浅谈手机游戏业务发展策略