沈旭 梁文
摘 要:中國象棋歷史悠久,集思想謀略、軍事競技于一體,是一種古老而傳統(tǒng)的文化。中國象棋手機APP是基于Android平臺開發(fā)的一款應用軟件,具備兼容性和人機對弈的特點。 其APP設計主要由3部分組成:流程分析、功能設計與數(shù)據(jù)結構設計,對游戲界面設置、棋盤繪制、游戲規(guī)則與棋子走法設置,以及所有布局算法進行設計開發(fā),實現(xiàn)了APP的預定功能。實際運行結果表明,中國象棋手機APP界面美觀、運行穩(wěn)定,富有對抗性且具有傳統(tǒng)文化色彩,有助于游戲者的智力開發(fā)與思維能力鍛煉。
關鍵詞: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 引言
隨著信息技術的高速發(fā)展,智能手機已進入到普通人的日常生活,手機游戲這種大眾化的娛樂方式也受到人們的廣泛歡迎。中國象棋發(fā)展至今已有兩千三百多年歷史,是中華民族的國粹。它集文化、科學、軍事、競技于一體,有利于開發(fā)人的智力,鍛煉人的思維能力,并增強人的競爭意識[1]。中國象棋愛好者遍布全球,通過網絡,下棋沒有了地域限制,人們甚至可以和電腦對弈。在對弈中,對戰(zhàn)雙方通過對游戲規(guī)則的掌握使游戲結果利于己方,機器博弈研究成果已廣泛應用于眾多領域[2]。通過中國象棋人機游戲,可以使象棋愛好者及希望了解象棋的人更加輕松地感受象棋的魅力[3]。
1 Android特征與體系結構
1.1 Android特征
Android是一個對第三方軟件完全開放的平臺,開發(fā)者在為其開發(fā)程序時擁有更大的自由度,打破了iPhone等只能添加為數(shù)不多的固定軟件的枷鎖。同時,與Windows mobile、Symbian等操作系統(tǒng)不同,Android操作系統(tǒng)免費向開發(fā)人員開放,從而大大降低了開發(fā)成本[4]。
1.2 體系結構
Android的系統(tǒng)架構與其操作系統(tǒng)相同,采用了分層架構。Android結構分為4層,從低到高層分別為:①Linux內核層:該層是基礎層,包含各種驅動,并提供操作系統(tǒng)的基本功能;②中間層,包括程序庫(Libraries)和Android運行環(huán)境;③應用框架層:該層是編寫核心應用使用的API框架,開發(fā)者可以使用相關框架開發(fā)自己的應用,但必須遵守該框架的開發(fā)原則[5];④應用層:該層是各種應用軟件,包括通話、短信、日歷、地圖、瀏覽器等軟件的核心應用程序。
2 系統(tǒng)分析
2.1 可行性分析
中國象棋人機游戲是基于Android平臺開發(fā)的一個手持設備應用游戲,具備兼容性和人機對弈的特點。中國象棋游戲屬于棋牌類游戲,每類不同的棋子有著各自固定的走法,對弈雙方進行輪換走棋。本游戲模擬人人對弈,可實現(xiàn)人機對弈。游戲設計主要由3方面組成:流程分析、功能設計與數(shù)據(jù)結構設計。
2.2 界面需求分析
游戲界面需求如下:①運行游戲,首先出現(xiàn)歡迎界面,隨后進入菜單頁面;②菜單頁面設置“開始游戲”、“象棋歷史”、“象棋規(guī)則”、“退出游戲”幾個板塊。點擊“象棋歷史”與“象棋規(guī)則”可分別進入象棋歷史介紹與游戲玩法介紹頁面;③單擊“開始游戲”進入游戲主界面,游戲界面中玩家按照象棋規(guī)則下棋,可單擊聲音按鈕控制聲音,當游戲一方的“將”或“帥”被吃掉時,出現(xiàn)“你輸了”或 “你贏了”界面。游戲中玩家還可隨時通過“退出”按鈕返回游戲主菜單。
2.3 游戲流程分析
進入游戲界面后,設置象棋棋盤。雙方各持一種顏色的棋子,棋子按照規(guī)則從棋盤的一個位置走到另一個位置,或吃掉該位置上對方的一枚棋子,方為走了一步,之后以輪換的方式進行交互走棋博弈。玩家走完一步后,程序需要在棋子的諸多走法中,通過搜索函數(shù)和局面評估函數(shù)逐一打分,最后挑選出最佳走法并執(zhí)行[6]。
3 游戲系統(tǒng)設計與實現(xiàn)
3.1 類框架設計
通過瀏覽中國象棋的歷史以及走法,同時結合象棋人機對戰(zhàn)游戲的需求分析,游戲總體設計由以下幾部分組成:共有類、輔助界面相關類、游戲界面相關類。
共有類是Activity的派生類Chess_DJB_Activity,該類是游戲的控制器,也是整個程序的入口;輔助界面相關類由歡迎界面類WelcomeView、菜單界面類MenuView等組成;游戲界面相關類由游戲界面類GameView、游戲界面相關常量類ViewConstant組成;走法引擎相關類由常量類Constant、方法類Chess_LoadUtil、走法引擎主類LoadUtil、比較器類MyComparator,以及走棋步驟類StackplayChess組成。
3.2 共有類實現(xiàn)
共有類Chess_DJB_Activity的主要作用是通過接收Handler消息變量,根據(jù)各界面發(fā)送過來的Handler消息類型判斷需要執(zhí)行的操作。適當?shù)爻跏蓟鄳脩艚缑妫鱾€界面初始化被調用時,根據(jù)其它界面需求直接將用戶界面切換到相應界面[7]。
3.3 輔助界面相關類實現(xiàn)
游戲歡迎界面通過WelcomeView類實現(xiàn),加載一個歡迎圖片,并通過監(jiān)聽菜單圖片,向Activity發(fā)送Handler消息,通知控制器切換用戶界面,然后切換到菜單界面MenuView。MenuView類中通過監(jiān)聽“開始游戲”切換到游戲界面,監(jiān)聽“打開聲音/關閉聲音”按鈕切換聲音的打開與關閉,監(jiān)聽“象棋歷史”切換到象棋起源界面,監(jiān)聽“象棋規(guī)則”切換到規(guī)則介紹頁面,監(jiān)聽“退出游戲”,結束并退出游戲。
3.4 游戲界面相關類實現(xiàn)
游戲界面類GameView是游戲最核心的類,該類首先繪制屏幕棋盤和相應棋子,提示一方先走,當“帥”或“將”被吃掉則彈出“贏”或者“輸”[8],還可控制游戲聲音及結束游戲。
3.5 走法引擎相關類實現(xiàn)
3.5.1 常量類Constant
中國象棋分為紅黑雙方,以楚河漢界為界限,雙方排兵布陣,一方持16子,分為2車、2馬、2炮、2象(相)、2士(仕)、1將(帥)、5卒(兵)。各類棋子走法不同,具體如下:“將”、“帥”統(tǒng)領整個棋局,在中軍帳中運籌帷幄,并且受到嚴密保護,不能隨意走出軍帳范圍。因此,“將”、“帥”的行走范圍只在己方底三行中三列形成的9個交叉點,俗稱“九宮格”,一步只能走一個方格的直線距離。同時,在中間無其它棋子隔離時,將帥不能出現(xiàn)在同一條直線上,如圖1所示。
“仕”的主要職責是保護首領,因此它們也只能在將帥附近九宮格的交叉線上走動,一步只能走一個交點的距離;“象”、“相”只可在己方陣營以“田字格”形式走動,不能過河,走動時起始點與目標點構成一條斜線,若該斜線的中點位置存在其它棋子(包括己方棋子),則無法走動;“炮”可以走直線上的任意距離,但起點與目標點之間不能存在其它棋子?!芭凇毕麥鐚Ψ狡遄拥臈l件是與目標棋子在一條直線上,而且兩棋子之間有且只有一個棋子(已方或敵方棋子)作為“炮臺”,如圖2所示。
“馬”只能走“日”字方格并且可以過河,但是存在“絆馬腿”的情況,從初始位置到目標位置緊挨著的兩格長度方向不能有棋子,否則會被絆住;“車”可以隨意在直線上走動任意距離,但起點和目標點中間不能有其它棋子,包括己方棋子;卒和兵個數(shù)最多,在過河之前不能向左右走,只能向前走,過河之后可以向左右走,但不能向后走。
3.5.2 棋盤表示
對于棋盤的設計,每種棋子采用一個固定值以識別該棋子類型,然后根據(jù)紅黑雙方以及不同類型的棋子設計規(guī)則類,調用其中的canMove方法判斷每一步走法是否可行。規(guī)則類設計采用規(guī)則方法,因為棋子種類只有7類,且紅黑雙方位于棋盤兩端[9],部分棋子走動時方向不同,設計時需要進行分類設計,采用14種不同的判別方法對所有棋子的走法進行判斷。棋盤上各個棋子以及棋盤的初始布局設計采用10*9的數(shù)組進行標識,各數(shù)字的對應關系為:
0-無棋子;8-黑方的將;9-黑方的士;10-黑方的象;11-黑方的馬;12-黑方的車;13-黑方的炮;14-黑方的卒;16-紅方的帥;17-紅方的仕;18-紅方的相;19-紅方的馬;20-紅方的車;21-紅方的炮;22-紅方的兵。
3.5.3 走法引擎主類實現(xiàn)
(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 游戲實現(xiàn)
子力價值表示一個棋子在棋盤中某個位置時的價值,而一方棋盤上所有棋子的子力價值之和,表示該局面下的局面價值。局面價值越大,說明該局面對己方越有利,程序根據(jù)局面價值搜索最優(yōu)走棋步驟并執(zhí)行。
4 結語
在中國象棋人機對戰(zhàn)APP的開發(fā)中,遇到了諸多問題,如棋子走法如何約束、人機輪流走棋如何控制等。最后成功克服了諸多難題,實現(xiàn)了一款界面美觀、運行穩(wěn)定,且富有對抗性和傳統(tǒng)文化色彩的中國象棋人機對弈游戲Android APP。未來還可作進一步改進,比如通過深度學習等人工智能算法[10],讓機器更加“聰明”,從而使人機對戰(zhàn)更具有挑戰(zhàn)性和觀賞性。
參考文獻:
[1] 杜幫國.基于Java平臺的中國象棋游戲的設計與實現(xiàn)[D].大連:大連理工大學,2013.
[2] 魏欽剛,王驕,徐心和,等.中國象棋計算機博弈開局庫研究與設計[C].2006中國機器博弈學術研討會,2006.
[3] 王曉鵬,王驕,徐心和,等.中國象棋與國際象棋比較分析[J].重慶工學院學報:自然科學版,2007(1):71-76.
[4] 韓敬海.Android程序設計[M].北京:電子工業(yè)出版社,2012.
[5] 趙燕萍.Java程序設計語言基礎研究[J].硅谷,2013(8):61-62.
[6] 徐心和,王驕.中國象棋計算機博弈關鍵技術分析[J].小型微型計算機系統(tǒng),2006,27(6):961-969.
[7] 蘇攀,王熙照,李艷.基于不平衡學習的分類器博弈模型及其在中國象棋中的應用[J].計算機研究與發(fā)展,2011(5):841-847.
[8] 周瑋,王水濤,孫旸.中國象棋計算機博弈中的一種數(shù)據(jù)結構方法[J].計算機工程與應用,2006(35):219-221.
[9] 杜俊俐,張景飛,黃心漢.基于視覺的象棋棋盤識別[J].計算機工程與應用,2007(34):220-222.
[10] 劉建偉,劉媛,羅雄麟.深度學習研究進展[J].計算機應用研究,2014(7):1921-1930.
(責任編輯:黃 ?。?/p>