雷舒昊 何歡
【摘 要】中國(guó)象棋不僅娛樂(lè)性強(qiáng),還能激發(fā)頭腦的思考,集娛樂(lè)與智慧于一體。但由于實(shí)體中國(guó)象棋的娛樂(lè)受限于時(shí)間地點(diǎn)和對(duì)弈人的限制,不能達(dá)到業(yè)余時(shí)間隨時(shí)隨地娛樂(lè)的目的,因此,在熟練掌握中國(guó)象棋的行走規(guī)則的背景下,學(xué)習(xí)了在Android平臺(tái)下的游戲開(kāi)發(fā)技術(shù),設(shè)計(jì)和實(shí)現(xiàn)了在Android系統(tǒng)下的中國(guó)象棋游戲的設(shè)計(jì),經(jīng)過(guò)系統(tǒng)調(diào)試,中國(guó)象棋游戲運(yùn)行良好,實(shí)現(xiàn)最終設(shè)計(jì)目標(biāo)。
【關(guān)鍵詞】Android;中國(guó)象棋;游戲開(kāi)發(fā);
中圖分類號(hào): TP 393 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)30-0266-003
DOI:10.19694/j.cnki.issn2095-2457.2018.30.118
The Design and Implementation of Chinese Chess in Android
LEI Shu-hao1 HE Huan2
(1.Anshan First Middle School,Anshan Liaoning 114041;
2.National Computer Experimental Teaching Demonstration Center,Northeastern University,
Shenyang Liaoning 110819,China)
【Abstract】Chinese chess is not only entertaining,but also stimulates the mind and integrates entertainment and wisdom.However,due to the restriction of time,place and players, the entertainment of Chinese chess in the entity can not achieve the purpose of entertaining anytime,anywhere in the spare time.Therefore,under the background of mastering the rules of Chinese chess,we learned the game development technology under Android platform,designed and realized the design of Chinese chess game under Android system.After debugging,Chinese chess game runs well and achieves the final goal.
【Key words】Android;Chinese chess;Game Development
中國(guó)象棋是受廣大中國(guó)人喜愛(ài)的休閑娛樂(lè)活動(dòng)之一。中國(guó)象棋[1]發(fā)展至今已有兩千三百多年歷史,是中華民族的國(guó)粹。以往經(jīng)常見(jiàn)到路邊一堆人圍在一起下棋的場(chǎng)面,但隨著信息技術(shù)的高速發(fā)展,智能手機(jī)已進(jìn)入到普通人的日常生活,手機(jī)游戲[2]這種大眾化的娛樂(lè)方式也受到人們的廣泛歡迎。因此手機(jī)端的游戲開(kāi)發(fā),成為目前研究的熱點(diǎn)。中國(guó)象棋愛(ài)好者遍布全球,通過(guò)網(wǎng)絡(luò),下棋沒(méi)有了地域限制,人們甚至可以和電腦對(duì)弈。在對(duì)弈中,對(duì)戰(zhàn)雙方通過(guò)對(duì)游戲規(guī)則的掌握使游戲結(jié)果利于己方,機(jī)器博弈研究成果已廣泛應(yīng)用于眾多領(lǐng)域[3]。中國(guó)象棋集文化、科學(xué)、軍事、競(jìng)技于一體,有利于開(kāi)發(fā)人的智力,鍛煉人的思維能力,并增強(qiáng)人的競(jìng)爭(zhēng)意識(shí)[4],使人更加輕松地感受象棋的魅力。
鑒于此,本文在Android系統(tǒng)[5]上開(kāi)發(fā)了一款中國(guó)象棋游戲,提出一種簡(jiǎn)單、實(shí)用、易操作的象棋游戲系統(tǒng),方便各個(gè)年齡階層使用。
1 系統(tǒng)需求及總體設(shè)計(jì)
1.1 系統(tǒng)需求分析
游戲界面需求如下:
(1)運(yùn)行游戲,首先出現(xiàn)歡迎界面,隨后進(jìn)入菜單頁(yè)面;
(2)菜單頁(yè)面設(shè)置“開(kāi)始游戲”、“象棋歷史”、“象棋 規(guī)則”、“退出游戲”幾個(gè)板塊。點(diǎn)擊“象棋歷史”與“象棋 規(guī)則”可分別進(jìn)入象棋歷史介紹與游戲玩法介紹頁(yè)面;
(3)單擊“開(kāi)始游戲”進(jìn)入游戲主界面,分為單機(jī)游戲和聯(lián)機(jī)游戲。游戲界面中玩家按照象棋規(guī)則下棋,可單擊聲音按鈕控制聲音,當(dāng)游戲一方的“將”或“帥”被吃掉時(shí),出現(xiàn)“你輸了”或“你贏了”界面。游戲中玩家還可隨時(shí)通過(guò)“退出”按鈕返回游戲主菜單。
1.2 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)構(gòu)架及功能設(shè)計(jì),使用功能層次圖或類圖等描述,并進(jìn)行說(shuō)明,如圖1所示。
整個(gè)系統(tǒng)主要分為四大塊,分別為登錄模塊,注冊(cè)模塊,注銷模塊,下棋模塊。
登錄模塊為游客登錄APP操作。注冊(cè)模塊是游客注冊(cè)為會(huì)員操作,注冊(cè)功能和注銷功能緊密相連,注銷和注冊(cè)都可以由管理員進(jìn)行。而注冊(cè)還可以由游客自行完成。下棋模塊是APP的核心模塊,通過(guò)本模塊進(jìn)行中國(guó)象棋游戲,游戲結(jié)束后可進(jìn)行再來(lái)一局和返回菜單功能。
2 系統(tǒng)詳細(xì)設(shè)計(jì)及方案
下面將分別實(shí)現(xiàn)各個(gè)模塊的設(shè)計(jì),由于涉及的模塊較多,這里列出主要模塊的設(shè)計(jì)實(shí)現(xiàn)。
2.1 注冊(cè)模塊
實(shí)現(xiàn)功能:游客注冊(cè)成為用戶,將用信息寫入數(shù)據(jù)庫(kù)內(nèi)。
實(shí)現(xiàn)過(guò)程:(1)系統(tǒng)獲取用戶輸入的用戶名、密碼和昵稱。
(2)若有空,則提示用戶輸入完整;若均已輸入,則系統(tǒng)檢驗(yàn)該用戶名、郵箱和手機(jī)號(hào)是否已被注冊(cè),即遍歷用戶表查詢是否有相同信息,若有相同記錄則提示用戶該用戶名/郵箱/手機(jī)號(hào)已被注冊(cè),否則用戶注冊(cè)成功,跳轉(zhuǎn)至登錄界面。
2.2 登錄模塊
實(shí)現(xiàn)功能:游客登錄到APP。
實(shí)現(xiàn)過(guò)程:(1)系統(tǒng)獲取用戶輸入的用戶名、密碼。
(2)若有空,則提示用戶輸入完整;若均已輸入,則系統(tǒng)檢驗(yàn)該用戶名和密碼是否已被注冊(cè),即遍歷用戶表查詢是否有相同信息,若有相同記錄則提示用戶登錄成功,否則輸出相應(yīng)結(jié)果,即用戶名、密碼不存在,跳轉(zhuǎn)至菜單界面。
2.3 注銷模塊
實(shí)現(xiàn)功能:管理員注銷用戶,將信息在數(shù)據(jù)庫(kù)中修改或刪除。
實(shí)現(xiàn)過(guò)程:(1)管理員選擇要注銷的用戶。
(2)若不存在,則提示用戶輸入完整;若存在,則系統(tǒng)檢驗(yàn)該用戶名是否已被注冊(cè),即遍歷用戶表查詢是否有相同信息,若不存在有相同記錄則提示用戶該用戶名不存在,否則用戶注銷成功。
2.4 下棋模塊
實(shí)現(xiàn)功能:用戶進(jìn)行象棋游戲,選擇單機(jī)或者聯(lián)機(jī)。
實(shí)現(xiàn)過(guò)程:
1.游戲開(kāi)始之前,初始化棋盤。
2.選中棋子進(jìn)行走子操作,如果已有選中的棋子,則不能選中其他棋子。如果想選擇其他棋子,則需點(diǎn)擊已選中的棋子,進(jìn)行取消。
3.判斷是哪種棋子,若游戲未結(jié)束,則循環(huán)執(zhí)行步驟3。
當(dāng)未選擇棋子時(shí):如果選擇位置為空,則輸出結(jié)果。如果選擇位置不為空,先判斷當(dāng)前執(zhí)方,再對(duì)執(zhí)行次數(shù)進(jìn)行判斷,選中時(shí),執(zhí)行次數(shù)為1,落下時(shí)為2.如果大于1,則執(zhí)行另一方棋子,輸入已落子,請(qǐng)另一方落子。
(1)為“兵”或“卒”時(shí):新建solider類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。
如果非法,輸出結(jié)果;
如果合法,則判斷落點(diǎn)是否有子。
如果落點(diǎn)沒(méi)有棋子,更新棋盤。
如果落點(diǎn)有子,首先判斷是否為本方棋子,
如果是本方棋子,輸出結(jié)果;
否則,更新棋盤。
如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4
行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(2)為“車”或“車”時(shí):新建car類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。如果非法,輸出結(jié)果;如果合法,則判斷落點(diǎn)是否有子。如果落點(diǎn)沒(méi)有棋子,更新棋盤。如果落點(diǎn)有子,首先判斷是否為本方棋子,如果是本方棋子,輸出結(jié)果;否則,更新棋盤。如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(3)為“帥”或“將”時(shí):新建marshal類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。如果非法,輸出結(jié)果;如果合法,則判斷落點(diǎn)是否有子。如果落點(diǎn)沒(méi)有棋子,更新棋盤。如果落點(diǎn)有子,首先判斷是否為本方棋子,如果是本方棋子,輸出結(jié)果;否則,更新棋盤。如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
判斷棋子的執(zhí)方,將棋子的當(dāng)前位置賦給相應(yīng)的變量,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(4)為“士”或“仕”時(shí):新建housecarl類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。如果非法,輸出結(jié)果;如果合法,則判斷落點(diǎn)是否有子。如果落點(diǎn)沒(méi)有棋子,更新棋盤。如果落點(diǎn)有子,首先判斷是否為本方棋子,如果是本方棋子,輸出結(jié)果;否則,更新棋盤。如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(5)為“馬”或“馬”時(shí):新建horse類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。
如果非法,輸出結(jié)果;
如果合法,
判斷是否蹩馬腳,如果蹩馬腳輸出相應(yīng)結(jié)果
否則,判斷落點(diǎn)是否有子。
如果落點(diǎn)沒(méi)有棋子,更新棋盤。
如果落點(diǎn)有子,首先判斷是否為本方棋子,
如果是本方棋子,輸出結(jié)果;
否則,更新棋盤。
如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4
行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(6)為“相”或“象”時(shí):新建prime minister類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。
如果非法,輸出結(jié)果;
如果合法,
判斷是否堵象眼,如果堵象眼輸出相應(yīng)結(jié)果
否則,判斷落點(diǎn)是否有子。
如果落點(diǎn)沒(méi)有棋子,更新棋盤。
如果落點(diǎn)有子,首先判斷是否為本方棋子,
如果是本方棋子,輸出結(jié)果;
否則,更新棋盤。
如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4
行棋結(jié)束后,判斷兩帥是否相對(duì),如果相對(duì)執(zhí)行步驟4。
(7)為“炮”或“砲”時(shí):新建cannon類,將落點(diǎn)和棋子的原橫縱坐標(biāo)及棋子執(zhí)方存入。
判斷走棋規(guī)則是否合法。如果非法,輸出結(jié)果;
如果合法,
判斷起始點(diǎn)和落點(diǎn)之間間隔的子數(shù),如果大于1,輸出相應(yīng)結(jié)果
如果中間隔了一個(gè)棋子,判斷落點(diǎn)是否有子。如果落點(diǎn)沒(méi)有棋子,輸出結(jié)果。
如果落點(diǎn)有子,首先判斷是否為本方棋子,如果是本方棋子,輸出結(jié)果;否則,更新棋盤。如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4
如果中間沒(méi)有棋子,判斷落點(diǎn)是否有子。如果落點(diǎn)沒(méi)有棋子,更新棋盤。如果落點(diǎn)有子,首先判斷是否為本方棋子,如果是本方棋子,輸出結(jié)果;否則,更新棋盤。如果吃掉的棋子為敵方將帥,則輸出結(jié)果勝利。執(zhí)行步驟4
4.游戲結(jié)束,彈出對(duì)話框,選擇重新開(kāi)始或再來(lái)一局。
5.聯(lián)機(jī)模式下,用戶創(chuàng)建房間,第二個(gè)用戶會(huì)自動(dòng)搜尋第一個(gè)未滿的房間,來(lái)加入到游戲中。進(jìn)入游戲后,通過(guò)比目提供的數(shù)據(jù)監(jiān)聽(tīng),來(lái)對(duì)數(shù)據(jù)進(jìn)行更新操作。當(dāng)本方為黑時(shí),下棋結(jié)束后將執(zhí)方繼續(xù)置為黑,知道數(shù)據(jù)更新后才進(jìn)行行棋操作。
3 電路調(diào)試與驗(yàn)收
3.1 本次開(kāi)發(fā)所用環(huán)境及工具
系統(tǒng)開(kāi)發(fā)所使用的操作系統(tǒng)為:Windows10
開(kāi)發(fā)工具[6]為:Android Studio
Java SDK版本:1.8.0.1610.12
Android版本:Android 9.0 API 28
AndroidManifest:minSdkVersion=15,targetSdkVersion=23
3.2 測(cè)試項(xiàng)目
(1)使用不同型號(hào)的安卓手機(jī),系統(tǒng)是否能夠正常顯示和運(yùn)行。
(2)系統(tǒng)能否正常連接數(shù)據(jù)庫(kù),多用戶登錄,服務(wù)端會(huì)不會(huì)發(fā)生異常。
(3)能否正常實(shí)現(xiàn)用戶注冊(cè)和登錄,注冊(cè)信息是否被寫入到后端數(shù)據(jù)庫(kù)內(nèi)的用戶表中。
(4)玩家的昵稱是否正確的顯示出來(lái)。
(5)各種棋子的判斷是否正確。
(6)當(dāng)取消棋子時(shí)是否正確的取消棋子的選中,當(dāng)取消后是否能正確的選擇下一個(gè)棋子。
(7)當(dāng)選擇空位置時(shí),是否正確的顯示提示信息。
(8)各種棋子的行棋規(guī)則是否正確的表現(xiàn)出來(lái)。
(9)能否正確的判斷是否對(duì)將。
(10)吃掉敵方將帥后是否正確的顯示游戲結(jié)束和勝利結(jié)果。
(11)游戲結(jié)束后彈出的對(duì)話框是否正確的顯示再來(lái)一局和返回,以及能否正確的進(jìn)行下一步操作。
(12)數(shù)據(jù)是否能正確同步。
(13)修改各類個(gè)人信息后,是否正常更新了數(shù)據(jù)庫(kù)數(shù)據(jù)。
(14)一系列其它運(yùn)行過(guò)程中的細(xì)節(jié)測(cè)試,包括UI界面的效果等。
3.3 測(cè)試結(jié)果
所測(cè)試項(xiàng)目均符合預(yù)期目標(biāo),并且APP在運(yùn)行過(guò)程中并未出現(xiàn)任何異常,測(cè)試順利結(jié)束。
4 結(jié)束語(yǔ)
本文在熟練掌握中國(guó)象棋運(yùn)行規(guī)則的前提下,在Android系統(tǒng)上開(kāi)發(fā)了中國(guó)象棋游戲,界面簡(jiǎn)潔,步驟易操作,實(shí)現(xiàn)了網(wǎng)絡(luò)人工對(duì)弈的效果,以后的設(shè)計(jì)中還可以引入人工智能等先進(jìn)熱點(diǎn)技術(shù),優(yōu)化游戲算法,提示游戲性能。
【參考文獻(xiàn)】
[1]危春波.中國(guó)象棋博弈系統(tǒng)的研究與實(shí)現(xiàn)[D].昆明:昆明理工大學(xué),2008.
[2]姚昱昱,劉衛(wèi)國(guó).Android的架構(gòu)與應(yīng)用開(kāi)發(fā)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):110-112.
[3]徐心和,王驕.中國(guó)象棋計(jì)算機(jī)博弈關(guān)鍵技術(shù)分析[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(6):961-969.
[4]杜幫國(guó).基于Java平臺(tái)的中國(guó)象棋游戲的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2013.
[5]胡偉.Android系統(tǒng)構(gòu)架及其驅(qū)動(dòng)研究[J].廣州:廣播電視大學(xué)學(xué)報(bào),2008.8.
[6]趙燕萍.Java程序設(shè)計(jì)語(yǔ)言基礎(chǔ)研究[J].硅谷,2013(8): 61-62.