基于Android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第1頁
基于Android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第2頁
基于Android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第3頁
基于Android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第4頁
基于Android的中國象棋的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí) 訓(xùn) 報(bào) 告實(shí)訓(xùn)項(xiàng)目名稱基于android象棋游戲的開發(fā)與測試二 級(jí) 學(xué) 院 信息工程學(xué)院 專 業(yè) 班 級(jí) 11級(jí)計(jì)科(2)班 姓 名 完圓圓、李城城、孫超、胡迪 學(xué) 號(hào) 1142151221、14、20、08 日 期 2014-11-19 項(xiàng)目名稱基于安卓象棋游戲的開發(fā)與測試地點(diǎn)教13 603報(bào) 告 內(nèi) 容在本報(bào)告中,首先介紹了安卓的現(xiàn)狀以及開發(fā)的相關(guān)知識(shí),其次是關(guān)于開發(fā)游戲過程中用到的開發(fā)工具和系統(tǒng)的運(yùn)行環(huán)境配置等。通過對(duì)android系統(tǒng)架構(gòu)和應(yīng)用開發(fā)進(jìn)行初步研究,設(shè)計(jì)一款中國象棋游戲。在對(duì)系統(tǒng)進(jìn)行詳細(xì)需求分析的基礎(chǔ)上,確定了系統(tǒng)的功能和性能要求,對(duì)游戲的菜單界面、屏幕繪制、時(shí)間控制、

2、布局算法和動(dòng)畫等進(jìn)行了設(shè)計(jì),并最終實(shí)現(xiàn)了一個(gè)界面友好、高效穩(wěn)定和富有娛樂性的手機(jī)益智游戲。最后,實(shí)現(xiàn)的是對(duì)本次游戲的測試并列舉了測試用列以及給出了測試結(jié)果。教師評(píng)語成績: 教師簽名: 摘 要 中國象棋是一款智力休閑游戲,具有歷史悠久而且擁有巨大的游戲愛好者群體,他們以中國象棋陶冶情操、鍛煉智力、體驗(yàn)象棋帶來的快樂,中國象棋還是一個(gè)老少皆宜的娛樂游戲。隨著手持設(shè)備、智能手機(jī)的普及,搭載android操作系統(tǒng)的智能手機(jī)也已經(jīng)走進(jìn)了千家萬戶,當(dāng)人們閑暇偶爾需要娛樂時(shí),卻發(fā)現(xiàn)沒有實(shí)物象棋,該軟件不失為一個(gè)很好的替代品,供大家進(jìn)行娛樂享受,尤其是在現(xiàn)在這個(gè)快節(jié)奏的社會(huì)中 ,人們更滿足于手機(jī)的使用,可以方

3、便地隨意移動(dòng),不像實(shí)物象棋那樣靜靜的坐著。 本論文通過實(shí)際應(yīng)用軟件的開發(fā)深入分析和研究android開發(fā)技術(shù)。實(shí)現(xiàn)中國象棋的人機(jī)會(huì)話。本文實(shí)現(xiàn)了中國象棋在計(jì)算機(jī)中表示問題,基于android平臺(tái)應(yīng)用,人機(jī)對(duì)戰(zhàn)模擬現(xiàn)實(shí)中的人人對(duì)戰(zhàn);討論走棋規(guī)則和著法的實(shí)現(xiàn)等一系列問題,最終電腦能夠通過產(chǎn)生著法,搜索,估計(jì)來產(chǎn)生一步最優(yōu)的走棋,實(shí)現(xiàn)人機(jī)會(huì)話的目的。關(guān)鍵字:中國象棋,android,智能手機(jī),人機(jī)對(duì)戰(zhàn)目錄1 緒論11.1 研究背景11.2 本論文研究意義32 游戲系統(tǒng)開發(fā)平臺(tái)及搭建42.1 jdk和 eclipse:42.2 android sdk42.3 adt53 系統(tǒng)分析63.1 可行性研究6

4、3.2 界面的需求分析63.3 游戲走棋需求設(shè)計(jì)分析64 游戲系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)74.1 類框架的設(shè)計(jì)74.2 共有類chessactivity的實(shí)現(xiàn)84.3 輔助界面相關(guān)類的實(shí)現(xiàn)84.4 游戲界面相關(guān)類的實(shí)現(xiàn)94.5 中國象棋的規(guī)則及走法的實(shí)現(xiàn)104.6 游戲人機(jī)對(duì)戰(zhàn)的實(shí)現(xiàn)184.7 系統(tǒng)流程圖195 運(yùn)行測試205.1 測試用例表205.2 測試結(jié)果206 小結(jié)23參考文獻(xiàn)24附錄:251 緒論1.1 研究背景(1) 中國象棋背景中國象棋發(fā)展至今已有兩千三、四百年的歷史,早在戰(zhàn)國時(shí)期就有正式的記載,堪稱中國的國粹。中國象棋具有悠久的歷史,深的人們的喜愛,象棋的愛好者也更是數(shù)不勝數(shù),遠(yuǎn)在戰(zhàn)國中

5、國象棋便在貴族階層廣為流傳,早期的象棋是象征著當(dāng)時(shí)戰(zhàn)斗場面的游戲,后來這種觀念慢慢被改變,經(jīng)過千年的流傳不斷的完善和改進(jìn),成為人們休閑娛樂、鍛煉腦力思維不可獲取的好方式。中國象棋體現(xiàn)的是一種策略,方寸之間包含天地玄機(jī),人生哲理,使人越是細(xì)玩越覺其味悠然深遠(yuǎn)。由于簡單的行棋規(guī)則,趣味性強(qiáng),便捷的載體,使得象棋成為雅俗共賞的競技項(xiàng)目。因此,也成為流行極為廣泛的棋藝活動(dòng)。是我國正式開展的78個(gè)體育項(xiàng)目之一,為促進(jìn)該項(xiàng)目在世界范圍內(nèi)的普及和推廣,在中國古代,象棋被列為士大夫們的修身之藝,現(xiàn)在則被視為怡神益智的一種有益的活動(dòng)。有著數(shù)以億計(jì)的愛好者。它不僅能豐富文化生活,陶冶情操,在棋戰(zhàn)中,人們可以從攻與

6、防、虛與實(shí)、整體與局部等復(fù)雜關(guān)系的變化中悟出某種哲理;更有助于開發(fā)智力,啟迪思維,鍛煉辨證分析能力和培養(yǎng)頑強(qiáng)的意志。(2) android系統(tǒng)簡介android 系統(tǒng)構(gòu)架簡介:android是一個(gè)基于linuxv2.6內(nèi)核的交互性操作環(huán)境,同時(shí)它也是一個(gè)分層系統(tǒng),android系統(tǒng)架構(gòu)顯示如下圖1.1。圖1.1系統(tǒng)架構(gòu)圖 應(yīng)用層由所有的android應(yīng)用程序組成。其中包括電子郵件客戶端,sms程序,地圖,瀏覽器,聯(lián)系人及其他。所有的應(yīng)用程序都是用java編程語言編寫的。 應(yīng)用框架層定義了android應(yīng)用程序框架。所有的android應(yīng)用程序都是基于應(yīng)用框架的。android應(yīng)用框架包括:l

7、豐富及可擴(kuò)展性的視圖,可以用來建立一個(gè)美觀的用戶界面,包括列表,網(wǎng)格,文本框,按鈕,甚至是嵌入到web瀏覽器的應(yīng)用程序。 l 一組內(nèi)容提供商,使應(yīng)用程序能夠訪問其他應(yīng)用程序的數(shù)據(jù)(如電話簿),或共享自己的數(shù)據(jù)。l 資源管理器提供了訪問的非編碼資源的途徑,如本地化的字符串,圖形,布局文件。l 通知管理器允許所有應(yīng)用程序顯示定制的提示或通知在狀態(tài)欄里。l 活動(dòng)管理器可以管理應(yīng)用程序的生命周期,并提供一個(gè)通用的后臺(tái)堆棧導(dǎo)航。 庫層包括了一套被各類android 系統(tǒng)組件使用的c / c + +庫并對(duì)應(yīng)用程序框架提供支持。 android 的運(yùn)行環(huán)境包括一套核心庫和 java 虛擬機(jī)(dalvik虛擬

8、機(jī)),已經(jīng)由谷歌重新設(shè)計(jì)和優(yōu)化來適合android平臺(tái)。 linux 內(nèi)核位于 android 系統(tǒng)的底層并作為硬件和軟件之間的一個(gè)抽象層。它提供了核心系統(tǒng)服務(wù),如安全,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。此外,一些底層功能如 dalvik 虛擬機(jī)線程管理也依賴于linux內(nèi)核。1.2 本論文研究意義 中國象棋是一項(xiàng)智力和策略的游戲,以往都是人和人下棋,現(xiàn)在有了計(jì)算機(jī)我們可以和計(jì)算機(jī)競技,人可以與計(jì)算機(jī)進(jìn)行對(duì)弈??刂朴?jì)算機(jī)的是人類,而人機(jī)會(huì)話綜合性很強(qiáng)的一門邊緣學(xué)科,它的中心任務(wù)是研究使計(jì)算機(jī)如何去做那些過去只能靠人的智力才能做的工作。因此,對(duì)游戲開發(fā)過程中的人工智能技術(shù)的研究自然也就成

9、了業(yè)界的一個(gè)熱門研究方向。 本次論文的研究,主要是對(duì)中國象棋在android系統(tǒng)中的兼容行性,對(duì)游戲界面可觀性,游戲中人機(jī)會(huì)話的研究。對(duì)于游戲中的人機(jī)會(huì)話的要點(diǎn):a 某種在及其上表示棋局的方法,讓程序知道會(huì)話的狀態(tài);b 產(chǎn)生合法的走棋法則,使得會(huì)話雙方公正,并可以判斷人類對(duì)手是否亂走;c 從所有和法定的走法中選擇最佳的走法的技術(shù);d 一種評(píng)估局面優(yōu)化的方法,同上面技術(shù)配合做出智能選擇;e 一個(gè)實(shí)現(xiàn)游戲的界面;通過對(duì)游戲的設(shè)計(jì),來實(shí)現(xiàn)游戲中棋牌的表示,著法的生成,對(duì)著法的搜索,最后對(duì)局面的評(píng)估來實(shí)現(xiàn)中國象棋的人機(jī)會(huì)話。2 游戲系統(tǒng)開發(fā)平臺(tái)及搭建2.1 jdk和 eclipse:jdk是sun公司

10、針對(duì)java開發(fā)員的產(chǎn)品。自從java推出以來,jdk已經(jīng)成為使用最廣泛的java sdk。jdk是整個(gè)java的核心。包括運(yùn)行環(huán)境java工具和java基礎(chǔ)類庫。jdk是學(xué)好java的第一步。安裝eclipse的開發(fā)環(huán)境需要jdk的支持,如果沒有jdk,則啟動(dòng)eclipse時(shí)會(huì)報(bào)告錯(cuò)誤。在windows上安裝jdk非常簡單首先在sun官網(wǎng)上下載,按照默認(rèn)路徑進(jìn)行安裝。安裝完成之后,可以在檢查jdk是否安裝成功。打開cmd窗口,輸入java version 查看jdk的版本信息。出現(xiàn)類似下面的畫面表示安裝成功了:圖 2.1 jdk測試eclipse如果你還沒有eclipse的話,從官網(wǎng)上下載e

11、clipse ide for java developers解壓之后即可使用。2.2 android sdkandroidsdk 提供了在 windows 平臺(tái)上的開發(fā)安卓應(yīng)用程序的開發(fā)組件,也就是說,不論讀者使用什么樣的平臺(tái)都可以開發(fā)出安卓平臺(tái)的應(yīng)用軟件,其中包含了安卓平臺(tái)上開發(fā)移動(dòng)應(yīng)用的各種工具集。它不僅包括了安卓模擬器和用于eclipse的安卓開發(fā)工具插件(adt),而且包括了各種用來調(diào)試,打包盒在模擬器上安裝應(yīng)用的工具。安卓主要是以 java 語言為基礎(chǔ),用戶可以使用 java 語言來開發(fā) 安卓平臺(tái)上的軟件應(yīng)用。通過sdk提供的一些工具將其打包成安卓平臺(tái)使用的apk文件,然后在使用sd

12、k中的模擬器(emulator)來模擬和測試軟件在安卓平臺(tái)運(yùn)行情況和效果。安裝安卓的sdk,安裝好jdk和eclipse后,打開eclipse ide。依次單擊menu項(xiàng)中的windows-android sdk manager項(xiàng),進(jìn)入android sdk manager界面選擇tool和需要的android版本項(xiàng)進(jìn)行更新安裝。2.3 adtandroid為eclipse定制了一個(gè)插件,及adt(android development tools),目的是為用戶提供一個(gè)強(qiáng)大的綜合環(huán)境用于開發(fā)android應(yīng)用程序,adt擴(kuò)展了eclipse的功能,可以讓用戶快速的建立android項(xiàng)目,創(chuàng)建

13、應(yīng)用程序界面,在基于android api的基礎(chǔ)上添加組件,以及用sdk工具集調(diào)試應(yīng)用程序,甚至導(dǎo)出簽名(或未簽名)的apks以便發(fā)行應(yīng)用程序。安裝android development tool plug-in,打開 eclipse ide。依次單擊menu項(xiàng)中的help-software update項(xiàng)3 系統(tǒng)分析3.1 可行性研究本次實(shí)訓(xùn)的題目是:基于android象棋游戲的開發(fā)與測試;主要是在基于android平臺(tái)開發(fā)一個(gè)手持設(shè)備應(yīng)用游戲,使得游戲具有兼容性和人機(jī)對(duì)戰(zhàn);并對(duì)整個(gè)系統(tǒng)分析,設(shè)計(jì)過程給出一個(gè)論證。中國象棋游戲是棋牌類游戲,體現(xiàn)的是一種策略。對(duì)于行棋走棋不同的棋子有不同走棋規(guī)

14、則,走棋都必須按照走棋規(guī)則要求,雙方輪換走棋,吃子,將軍。本游戲設(shè)計(jì)無疑是模擬現(xiàn)實(shí)人人博弈,虛擬的替換了真實(shí)的棋子棋盤,由人來和電腦直接對(duì)弈;在一個(gè)人閑暇時(shí)也可以體驗(yàn)博弈的樂趣。該應(yīng)用游戲的設(shè)計(jì)主要從以下幾方面做起:系統(tǒng)流程分析、系統(tǒng)的功能設(shè)計(jì)、系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。做好這些工作需要對(duì)android開發(fā)平臺(tái)了解,并搭建平臺(tái);深入了解數(shù)據(jù)結(jié)構(gòu)、android應(yīng)用程序以及各種組件(api)庫函數(shù)。3.2 界面的需求分析 通過以往手持設(shè)備游戲的體驗(yàn),和用戶對(duì)中國象棋游戲需求邏輯,游戲的功能以及操作方法把整個(gè)設(shè)計(jì)劃分成單元;先是運(yùn)行游戲,進(jìn)入歡迎游戲界面,隨后單擊歡迎界面的圖片進(jìn)入菜單界面,在菜單中可以

15、點(diǎn)擊“打開聲音”/“關(guān)閉聲音”按鈕來控制聲音開關(guān),單擊“幫助”菜單可以進(jìn)入幫助界面顯示游戲操作方法,而在菜單界面單擊“開始游戲”菜單將進(jìn)入游戲主界面開始游戲,在游戲界面玩家可以通過單擊自己的棋子按照行棋規(guī)則來走棋,同時(shí)可以單擊聲音按鈕打開關(guān)閉聲音,當(dāng)游戲一方的“將”或者敵方的“帥”被吃掉是,會(huì)出現(xiàn)游戲失敗或游戲勝利的界面,在游戲過程中玩家可以隨時(shí)通過單擊“退出”按鈕返回到游戲主菜單,主菜單中還可以點(diǎn)擊“退出游戲”結(jié)束關(guān)閉游戲。3.3 游戲走棋需求設(shè)計(jì)分析進(jìn)入游戲界面,游戲提示當(dāng)前走棋為“帥”或者“將”,雙方各走一著,直至分出勝負(fù)或者直接點(diǎn)擊退出結(jié)束游戲,輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)走

16、到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),都算走一著,雙方各走一著即一個(gè)回合,吃子時(shí),任何棋子走動(dòng),如果目標(biāo)位置上有對(duì)方的棋子,就可以把對(duì)方的棋子拿出棋盤,即屏幕上消失在顯示自己的棋子。玩家走完棋后電腦相對(duì)應(yīng)搜索出自己相對(duì)應(yīng)的走法。程序需要讓計(jì)算機(jī)在輪到它走子的時(shí)候能夠執(zhí)行一步它認(rèn)為最有利的著法,而不是亂走;那么它就要有在諸多可供選擇的著法,提供所有候選著法的列表就是著法生成器所要完成的。之后用搜索函數(shù)來搜索列表,并用局面評(píng)估函數(shù)逐一打分,最后就可以選擇出最佳著法并執(zhí)行。4 游戲系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)4.1 類框架的設(shè)計(jì)通過對(duì)中國象棋游戲的了解,對(duì)基于android技術(shù)的中國象棋人機(jī)對(duì)弈游戲

17、的需求分析,游戲?qū)崿F(xiàn)的理解并結(jié)合自己對(duì)知識(shí)點(diǎn)所掌握的程度;對(duì)中國象棋游戲總體設(shè)計(jì),主要由三個(gè)類組成:共有類,輔助界面相關(guān)類,游戲界面相關(guān)類。共有類是activity的實(shí)現(xiàn)類chessactivity,該類是通過擴(kuò)展基類activity得到的,是整個(gè)游戲的控制器,也是整個(gè)游戲程序的入口;輔助界面相關(guān)類由welcomeview歡迎界面類(該類為游戲歡迎界面的實(shí)現(xiàn)類,主要負(fù)責(zé)歡迎界面的繪制工作),helpview幫助界面類(該類為幫助界面的實(shí)現(xiàn)類),menuview菜單界面類(該類為菜單界面的實(shí)現(xiàn)類,負(fù)責(zé)繪制菜單界面以及對(duì)菜單界面的屏幕進(jìn)行監(jiān)聽)三個(gè)類實(shí)現(xiàn);游戲界面相關(guān)類由gameview游戲界面類

18、(該類為游戲程序中最主要的類,負(fù)責(zé)繪制游戲過程中所有的信息,如棋盤、棋子、各個(gè)按鈕以及勝利或失敗菜單等),guize象棋規(guī)則類(該類是象棋規(guī)則的實(shí)現(xiàn)類,其中包含所有棋子的走棋規(guī)則以及當(dāng)前棋牌所有可能走法),chessmove走法類(該類為棋子的走法的封裝類,包括棋子的名稱,出發(fā)點(diǎn)以及目標(biāo)點(diǎn))。之間關(guān)系如圖4.1所示:圖4.1游戲類圖4.2 共有類chessactivity的實(shí)現(xiàn)該類的主要作用是通過接受handler消息變量,根據(jù)各個(gè)界面發(fā)送的handler消息的類型判斷所需要執(zhí)行的操作。在適當(dāng)?shù)臅r(shí)間初始化相應(yīng)的用戶界面,各個(gè)界面初始化方法被調(diào)用時(shí),并根據(jù)其他界面的需求直接將用戶界面切換到相應(yīng)的

19、界面4.3 輔助界面相關(guān)類的實(shí)現(xiàn)該游戲的第一個(gè)用戶界面即歡迎界面如圖4.2所示,通過welcomeview類來實(shí)現(xiàn)該界面加載了一個(gè)歡迎中國象棋圖片,并通過監(jiān)聽菜單圖片,向activity發(fā)送handler消息通知控制器切換用戶界面;然后切換到菜單界面menuview。圖 4.2 游戲歡迎界面 menuview類中通過監(jiān)聽“開始游戲”切換到游戲界面;通過監(jiān)聽“打開聲音”/“關(guān)閉聲音”進(jìn)行聲音的打開與關(guān)閉,與此同時(shí)“打開聲音”、“關(guān)閉聲音”按鈕進(jìn)行切換;通過監(jiān)聽“幫助”來切換都幫助界面;通過監(jiān)聽“退出游戲”結(jié)束游戲用行退出游戲。幫助界面helpview,該類中加載圖片,圖片中顯示該游戲“怎么玩”同

20、時(shí)監(jiān)聽“返回”按鈕,向activity發(fā)送handler消息通知控制器切換用戶界面從而返回到菜單界面,如圖4.3所示。圖 4.3 菜單界面4.4 游戲界面相關(guān)類的實(shí)現(xiàn)游戲界面gameview,該類是整個(gè)程序中最主要的類,該類首先是繪制屏幕上的內(nèi)容棋盤和對(duì)應(yīng)的棋子。提示一方先走;當(dāng)“黑帥”或者“紅將”被吃的話,彈出您贏了或者您輸了通過監(jiān)聽結(jié)束游戲切換到菜單界面。或者點(diǎn)擊退出按鈕也可結(jié)束游戲切換至菜單界面。監(jiān)聽聲音按鈕來控制聲音的開與關(guān)并以紅色顯示聲音開,消失即為關(guān),如圖4.4所示。圖4.4游戲界面4.5 中國象棋的規(guī)則及走法的實(shí)現(xiàn)(1) 行棋規(guī)則中國象棋分為紅黑雙方,以楚河漢界為分界線,雙方各執(zhí)

21、16字,分別為2車2馬2相2仕2炮1將5卒,各自走法不同,具體如下:馬:只可以走“日”字方格,因此一匹馬的最理想落子點(diǎn)有8個(gè),但存在絆馬腿的情況,即從馬的位置到要走到的目標(biāo)位置,順著此方向,“日”字方格有兩個(gè)方向,即兩格長度和一個(gè)長度,馬緊挨的兩格長度方向的位置不能有子,否則即被絆住,不能走動(dòng)。若目標(biāo)位置為空,即可走過,若為對(duì)方的棋子,即可吃掉。圖4.5馬的走法紅黑馬規(guī)則走法的介紹:case 10:/紅馬 case 3:/黑馬if(!(math.abs(tox-fromx)=1 & math.abs(toy-fromy)=2)| (math.abs(tox-fromx)=2 & math.ab

22、s(toy-fromy)=1)return false;/馬走的不是日字時(shí)if(tox-fromx=2)/向右走i=fromx+1;/移動(dòng)j=fromy;else if(fromx-tox=2)/向左走i=fromx-1;/移動(dòng)j=fromy;else if(toy-fromy=2)/向下走i=fromx;/移動(dòng)j=fromy+1;else if(fromy-toy=2)/向上走i=fromx;/移動(dòng)j=fromy-1;if(qiziji != 0)return false;/絆馬腿break;炮:只可以走直線,且一步可以走任意距離,其起始點(diǎn)與目標(biāo)點(diǎn)之間不得存在其他棋子。炮吃子的條件是與目標(biāo)棋

23、子在一條直線上,且兩子之間必須有且只有一個(gè)棋子作為“跳板”,讓炮進(jìn)行跳躍式攻擊。紅黑炮規(guī)則走法的介紹:圖4.6炮的走法case 11:/紅砲case 4:/黑炮if(fromy!=toy & fromx!=tox)/炮走直線return false;/返回falseif(qizitoytox = 0)/不吃子時(shí)if(fromy = toy)/橫線if(fromx tox)/想右走for(i = fromx + 1; i tox; i+)if(qizifromyi != 0)return false;/返回falseelse/向走走for(i = tox + 1; i fromx; i+)if(

24、qizifromyi!=0)return false;/返回falseelse/豎線if(fromy toy)/向下走for(j = fromy + 1; j toy; j+)if(qizijfromx != 0)return false;/返回falseelse/向上走for(j = toy + 1; j fromy; j+)if(qizijfromx != 0)return false;/返回falseelse/吃子時(shí)int count=0;if(fromy = toy)/走的是橫線if(fromx tox)/向右走for(i=fromx+1;itox;i+)if(qizifromyi!=

25、0)count+;if(count != 1)return false;/返回falseelse/向左走for(i=tox+1;ifromx;i+)if(qizifromyi != 0)count+;if(count!=1)return false;/返回falseelse/走的是豎線if(fromytoy)/向下走for(j=fromy+1;jtoy;j+)if(qizijfromx!=0)count+;/返回falseif(count!=1)return false;/返回falseelse/向上走for(j=toy+1;j4)/不能過河return false;if(math.abs(f

26、romx-tox) != 2 | math.abs(fromy-toy) != 2)/相走“田”字return false;if(qizi(fromy+toy)/2(fromx+tox)/2 != 0)return false;/相眼處有棋子break;case 13:/紅相if(toy2|tox5)/出了九宮格return false;if(math.abs(fromy-toy)+math.abs(tox-fromx)1)/只能走一步return false;break;case 8:/紅將if(toy5|tox1)/只能走一步return false;break;(2) 棋盤的表示針對(duì)棋盤

27、的設(shè)計(jì),每一種棋子對(duì)應(yīng)一個(gè)固定的值用以識(shí)別該棋子的類型,那么設(shè)計(jì)就根據(jù)紅黑雙方的棋子以及每個(gè)類型的棋子,設(shè)計(jì)規(guī)則類(guize類,調(diào)用其中的canmove方法用以判斷某一步走棋的是否可行。規(guī)則類的設(shè)計(jì)則采用了常規(guī)的辦法,因?yàn)槠遄拥姆N類只有7種,且紅黑雙方處于棋盤的兩端,某些棋子走動(dòng)時(shí)的方向不一樣,設(shè)計(jì)時(shí)就要進(jìn)行分類討論設(shè)計(jì),供存在14中不同的判別方法來對(duì)所以的棋子走法進(jìn)行判別是否可行,每一個(gè)判別方法都對(duì)應(yīng)于其獨(dú)有的判斷算法。棋盤上各種棋子以及棋盤的初始布局的設(shè)計(jì)采用10*9的數(shù)組來進(jìn)行標(biāo)識(shí),如下圖4.9所示 : 圖 4.9棋盤初始布局各個(gè)數(shù)字的對(duì)應(yīng)關(guān)系如下:0-無棋子;1-黑方的帥;2-黑方的

28、車;3-黑方的馬;4-黑方的炮;5-黑方的士;6-黑方的象;7-黑方的卒;8-紅方的將;9-紅方的車;10-紅方的馬;11-紅方的炮;12-紅方的士;13-紅方的相;14-紅方的兵。坐標(biāo)(0,0)到坐標(biāo)(8,4)之間的坐標(biāo)代表楚河漢界的一方,坐標(biāo)(0,5)到坐標(biāo)(8,9)之間的坐標(biāo)代表楚河漢界的另一方,即紅黑雙方各自的領(lǐng)土。電腦走棋時(shí)通過構(gòu)造一個(gè)走法類chessmove,創(chuàng)建一個(gè)對(duì)象調(diào)用negamaxengine類中的search()函數(shù)根據(jù)當(dāng)前局勢查詢一個(gè)最好的走法記錄棋子的原有位置坐標(biāo)、目標(biāo)位置坐標(biāo)、棋子類型并對(duì)該對(duì)象進(jìn)行初始化。然后根據(jù)該對(duì)象記錄的原有位置坐標(biāo)和目標(biāo)位置坐標(biāo)進(jìn)行數(shù)據(jù)改變達(dá)

29、到行棋目的。玩家走棋是通過對(duì)屏幕進(jìn)行監(jiān)聽,從而記錄棋子類型,原有位置坐標(biāo)和目標(biāo)位置坐標(biāo),通過調(diào)用規(guī)則類guize中的canmove判斷該棋子走法是否可行符合棋子走棋規(guī)則,可行就改變?cè)形恢煤湍繕?biāo)位置數(shù)據(jù),達(dá)到行棋的目的輪到走棋的一方,游戲界面當(dāng)前位置顯示走棋一方的“黑帥”或者“紅將”,將某個(gè)棋子從一個(gè)交叉點(diǎn)走到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),這樣一方走棋結(jié)束當(dāng)前位置顯示改變輪到另一方走棋。任何棋子走動(dòng),如果目標(biāo)位置上有對(duì)方的棋子,就可以把對(duì)方的棋子拿出棋盤,即在10*9數(shù)組中相應(yīng)位置的數(shù)字變?yōu)樽约浩遄铀鶎?duì)應(yīng)的數(shù)字,自己棋子原來所在的位置對(duì)應(yīng)數(shù)組的數(shù)字變?yōu)?,刷幀線程不斷的刷新界

30、面改變屏幕顯示,這樣對(duì)方的棋子就被吃掉,在屏幕上消失在對(duì)應(yīng)顯示自己的棋子;如果目標(biāo)位置上沒有對(duì)方棋子,10*9數(shù)組對(duì)應(yīng)目標(biāo)位置數(shù)字改變,原有位置數(shù)字變?yōu)?,刷幀線程更新界面改變顯示。4.6 游戲人機(jī)對(duì)戰(zhàn)的實(shí)現(xiàn)(1) 首先產(chǎn)生所有可能的走法,定義一個(gè)arraylist容器,把可能的走法放入arraylist容器里面。public list allpossiblemoves(int qizi)/產(chǎn)生所有可能的走法 list ret = new arraylist();/用來裝所有可能的走法 for (int x = 0; x 10; x+) for (int y = 0; y 7)/是紅方,即是玩

31、家棋子時(shí)跳過 continue; . return ret.isempty() ? null : ret;/當(dāng)ret中沒有走法時(shí),返回空,有時(shí)返回ret(2) 利用隨機(jī)數(shù)從容器中取出一種走法,完成移動(dòng)。public chessmove searchagoodmove(int qizi)/查詢一個(gè)好的走法list ret = allpossiblemoves(qizi);/產(chǎn)生所有走法try thread.sleep(1000);/睡眠四秒鐘,以便調(diào)試 catch (interruptedexception e) /捕獲異常e.printstacktrace();/打印堆棧信息return re

32、t.get(int)(math.random()*ret.size();4.7 系統(tǒng)流程圖游戲流程圖如圖4.10所示圖4.10系統(tǒng)流程圖5 運(yùn)行測試5.1 測試用例表測試編號(hào)測試目標(biāo)期望結(jié)果實(shí)際結(jié)果001測試象棋“馬”是否“絆馬腿”游戲過程中,“馬”在絆馬腿情況下不能移動(dòng)。能實(shí)現(xiàn)“絆馬腿”002測試一方棋子能否被另一方吃掉,并消失棋子被吃后消失,吃子的棋子能代替被吃棋子的位置一方棋子能被另一方吃掉,并消失003測試對(duì)手的象棋“將”能否被將死,能結(jié)束游戲?qū)κ值南笃濉皩ⅰ北粚⑺?,并出現(xiàn)提示“你贏了” ,結(jié)束游戲?qū)κ值南笃濉皩ⅰ北粚⑺?,能結(jié)束游戲004測試象棋“炮”是否能隔子吃掉對(duì)手的棋子,即“炮打

33、隔子”“炮”隔子吃掉對(duì)手棋子“炮”能“炮打隔子”005測試游戲棋子是否能移動(dòng)棋子從一個(gè)到另一個(gè)位置游戲棋子能移動(dòng)006不同分辨率模擬器能否正常運(yùn)行能夠正常運(yùn)行不能正常運(yùn)行007能否對(duì)將可以對(duì)將不能對(duì)將5.2 測試結(jié)果(1) 測試001“馬”是否“絆馬腿”測試結(jié)果如圖5.1所示圖5.1測試絆馬腿(2) 測試002一方棋子能否被另一方吃掉測試結(jié)果如圖5.2所示圖5.2測試吃子(3) 測試003“將”能否被將死測試結(jié)果如圖5.3所示圖5.3測試能否贏棋(4) 測試003“將”能否被將死測試結(jié)果如圖5.4所示圖5.4測試對(duì)將(5) 測試006不同分辨率模擬器能否正常運(yùn)行如圖5.5所示圖5.5測試不同分

34、辨率模擬器6 小結(jié)三周的android實(shí)訓(xùn),已接近尾聲。在這短暫的三周之內(nèi),有成功有失??;有喜悅有心酸。在實(shí)訓(xùn)老師的帶領(lǐng)下,我學(xué)到了很多。我們小組在老師的協(xié)助下最終成功的完成實(shí)訓(xùn)項(xiàng)目。在這次實(shí)訓(xùn)中讓我學(xué)到了,對(duì)于每一個(gè)項(xiàng)目開發(fā),都需端正態(tài)度,量力而行,發(fā)揮自己的長處,這樣不僅有利于促進(jìn)團(tuán)隊(duì)項(xiàng)目開發(fā)的進(jìn)度,還有利于把自己代入這個(gè)項(xiàng)目中。當(dāng)自己融于這個(gè)項(xiàng)目時(shí),就能多思考。這樣是一個(gè)自我學(xué)習(xí)的過程,這里本來不會(huì)做,但是經(jīng)過這個(gè)項(xiàng)目或這個(gè)模塊后,這里也就會(huì)了,把不會(huì)的變成會(huì)的,把別人的知識(shí)變成自己的,這才是會(huì)學(xué)習(xí)。通過為期三周的android實(shí)訓(xùn),這次的實(shí)訓(xùn)讓我學(xué)到了很多知識(shí)。在項(xiàng)目中,除了讓我明白工

35、作中需要能力,素質(zhì),更重要的是學(xué)會(huì)如何去完成一個(gè)任務(wù),懂得了享受工作。當(dāng)遇到問題時(shí)要冷靜去想辦法一點(diǎn)一點(diǎn)的排除障礙,到最后取得成功,一種自信油然而生,這就是工作的樂趣。有時(shí)候也需要虛心請(qǐng)教,從別人身上能夠?qū)W到自己沒有的知識(shí),每一次的挫折只能使我們更接近成功。在這次項(xiàng)目中讓我體會(huì)到了團(tuán)隊(duì)合作的重要性,團(tuán)隊(duì)合作注重溝通和信任,不能不屑于做一些小事,永遠(yuǎn)要保持親和誠信,把專業(yè)理論運(yùn)用到具體實(shí)踐中,不僅加深我對(duì)理論的掌握和運(yùn)用,這是實(shí)訓(xùn)中最大的收獲。剛開始接觸android感覺到他很有意思,在界面開發(fā)和web也可以形成想通的架構(gòu),更加方便,視覺上也非常的酷,前期我通過大量的android sdk開發(fā)范

36、例和android提供的api文檔中學(xué)習(xí),通過這些例子的學(xué)習(xí)我從中發(fā)現(xiàn)了很多和以前java相同的思想。在這為期三周的實(shí)訓(xùn)中讓我學(xué)到了很多課堂上學(xué)不到的知識(shí),讓我基本掌握了android應(yīng)用程序開發(fā)的一般流程。對(duì)常用控件基本掌握使用,對(duì)其事件的監(jiān)聽也基本掌握。學(xué)習(xí)android不僅是對(duì)前沿開發(fā)技術(shù)的了解,也是對(duì)編程知識(shí)的一次提升。通過學(xué)習(xí)android的控件、布局、activity、service等一系列基礎(chǔ)知識(shí),對(duì)整個(gè)android的開發(fā)有了大致的了解。通過這次的實(shí)訓(xùn),讓我學(xué)到了很多,因?yàn)槲覀兌际堑谝淮谓佑|android,所以老師先給我們講的每一個(gè)程序我們都去認(rèn)真編寫,通過這些小程序,讓我們知

37、道了如何去創(chuàng)建一個(gè)android項(xiàng)目,了解了android項(xiàng)目里的每一個(gè)文件夾和文件的作用。在這次項(xiàng)目中讓我體會(huì)到了團(tuán)隊(duì)合作的重要性,團(tuán)隊(duì)合作注重溝通和信任。同時(shí)還讓我知道做任何事都需端正態(tài)度,量力而行,發(fā)揮自己的長處,這樣不僅有利于促進(jìn)團(tuán)隊(duì)項(xiàng)目開發(fā)的進(jìn)度,還能讓我們知道我們自己的位置??傊谶@次的實(shí)訓(xùn)中讓我學(xué)到了知識(shí),同時(shí)也讓我學(xué)到了經(jīng)驗(yàn),這讓我在以后的工作中有重大幫助。參考文獻(xiàn)1 劉敏.移動(dòng)終端的android移植與應(yīng)用程序設(shè)計(jì)d. 西安電子科技大學(xué) 2011 2 王蕾.哈爾濱招行android手機(jī)銀行匯率換算模塊的設(shè)計(jì)與實(shí)現(xiàn)d. 吉林大學(xué) 2011 3 施金蘭.基于android平臺(tái)的網(wǎng)

38、絡(luò)共享研究與實(shí)現(xiàn)d. 華東師范大學(xué) 2011 4 趙建勛.基于android平臺(tái)的移動(dòng)位置服務(wù)的開發(fā)與實(shí)現(xiàn)j. 現(xiàn)代商貿(mào)工業(yè). 2010(20) 5 李林濤,朱珊虹.基于android系統(tǒng)的手機(jī)游戲黑白棋的設(shè)計(jì)與實(shí)現(xiàn)j. 新鄉(xiāng)學(xué)院學(xué)報(bào)(自然科學(xué)版). 2011(03) 6 叢秋波.用于android手機(jī)操作系統(tǒng)的視頻引擎j. 電子設(shè)計(jì)技術(shù). 2010(07) 7 郭國勇.android啟動(dòng)過程優(yōu)化研究d. 蘭州大學(xué) 2012 8 擺云.基于android開放平臺(tái)和無線通信網(wǎng)絡(luò)的實(shí)時(shí)音視頻傳輸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)d. 蘭州大學(xué) 2012 9 劉牛.基于android平臺(tái)的數(shù)字電視機(jī)頂盒模擬器的研究與開

39、發(fā)d. 蘭州大學(xué) 2012 10 王康.android ril研究及其在無線通訊模塊上的實(shí)現(xiàn)d. 太原科技大學(xué) 2012 附錄:chessactivity.javapackage com.example.chessgame;import android.app.activity;/引入相關(guān)的包import android.media.mediaplayer;import android.os.bundle;import android.os.handler;import android.os.message;import android.view.window;import android.v

40、iew.windowmanager;public class chessactivity extends activity boolean issound = true;/是否播放聲音mediaplayer startsound;/開始和菜單時(shí)的音樂mediaplayer gamemusic;/游戲聲音handler myhandler = new handler()/用來更新ui線程中的控件 public void handlemessage(message msg) if(msg.what = 1)/welcomeview或helpview或gameview傳來的消息,切換到menuvie

41、w initmenuview();/初始化并切換到菜單界面 else if(msg.what = 2)/menuview傳來的消息,切換到gameview initgameview();/初始化并切換到游戲界面 else if(msg.what = 3)/menuview傳來的消息,切換到helpview inithelpview();/初始化并切換到幫助界面 ; public void oncreate(bundle savedinstancestate) /重寫的oncreate super.oncreate(savedinstancestate);/全屏requestwindowfeat

42、ure(window.feature_no_title);getwindow().setflags(windowmanager.layoutparams.flag_fullscreen , windowmanager.layoutparams.flag_fullscreen);startsound = mediaplayer.create(this, r.raw.startsound);/加載歡迎聲音startsound.setlooping(true);/設(shè)置游戲聲音循環(huán)播放 gamemusic = mediaplayer.create(this, r.raw.gamemusic);/游戲過

43、程的背景聲音gamemusic.setlooping(true);/設(shè)置游戲聲音循環(huán)播放 this.initwelcomeview();/初始化歡迎界面 public void initwelcomeview()/初始化歡迎界面 this.setcontentview(new welcomeview(this,this);/切換到歡迎界面 if(issound)/需要播放聲音時(shí) startsound.start();/播放聲音 public void initgameview()/初始化游戲界面 this.setcontentview(new gameview(this,this); /切換到

44、游戲界面 public void initmenuview()/初始化菜單界面 if(startsound != null)/停止 startsound.stop();/停止播放聲音 startsound = null; if(this.issound)/是否播放聲音 gamemusic.start();/播放聲音 this.setcontentview(new menuview(this,this);/切換view public void inithelpview()/初始化幫助界面 this.setcontentview(new helpview(this,this);/切換到幫助界面 c

45、hessmove.javapackage com.example.chessgame;/* * 該類為棋子的一個(gè)走法 * 包含是什么棋子 * 起始點(diǎn)的位置 * 目標(biāo)點(diǎn)的位置 * 以及估值時(shí)所用到的score */public class chessmove int chessid;/表明是什么棋子int fromx;/起始的坐標(biāo)int fromy;int tox;/目的地的坐標(biāo)int toy;int score;/值,估值時(shí)會(huì)用到public chessmove(int chessid, int fromx,int fromy,int tox,int toy,int score)/構(gòu)造器thi

46、s.chessid = chessid;/棋子的類型this.fromx = fromx;/棋子的起始坐標(biāo)this.fromy = fromy;this.tox = tox;/棋子的目標(biāo)點(diǎn)x坐標(biāo)this.toy = toy;/棋子的目標(biāo)點(diǎn)y坐標(biāo)this.score = score;searchengine.javapackage com.example.chessgame;public class searchengine /表示棋盤棋的分布 public static int m_curposition = new int109; /記錄最佳走棋 public static chessmove bestmove = new chessmove(); /走法產(chǎn)生七器 public static guize movegen = new guize(); /估值產(chǎn)生器 public static ev

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論