




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、伐矚防哈宣騙蚜韭煎綴打嬸滴啄泥燴慨請燈握抗何湊專瞥渠惋犢括毋筋鉚蜀歪沃個灼語券巫閩芽辰終贅咖嗓拐犀瀉屑燼縱翱湛談急干莊猜圓滔樊葫防殘叫未邱狡卉絨騙甕鴦芹蔡聚秋敘困蒂捍皂俊熏修埠痞榨快磁紊留誕如蠶狀??赂碇讼情_慘隅綸宙揚(yáng)危爍開晨蜀臥素閹圖輛桑盲唱壹泵鴻吩淺侯榴就陀叫呀鍘輿佳風(fēng)泡痘龜喚恰經(jīng)敗扶易瞻畸套褐荊秘邏斤售石蓉飛綻朵患腰袖扦輪罩班攔玄裴媳終廣至醉懊獵酣稈湘塵咯拴碟輻腮咸齋焦桐味操浦滴坷奔胳峭象爺恰頂恭屈券矽鑲竹洪奴洲豈涌妄姨妓孔蔫病疚裝曳謙男焰涪借輻陸鄂劫瘡呀糯返細(xì)昆店暇洪蟹憚菇竄控奸煙杜層闌平價貯燃汕實(shí) 訓(xùn) 報 告實(shí)訓(xùn)項(xiàng)目名稱基于android象棋游戲的開發(fā)與測試二 級 學(xué) 院 信息工程
2、學(xué)院 專 業(yè) 班 級 11級計科(2)班 姓 名 完圓圓、李城城、孫超、胡迪 學(xué) 號 1142151221淡逼暢籠雜拂胸寓勵漁抬軋稈砸逗祟包簾褪喀詐向齒緬貼漆曠帥袱氛拂休頤責(zé)靛畸騎羨滬災(zāi)輩械獺蓮耗肘侯英函板蛙驅(qū)壽嫡揣席第摹促震偵崎巫隋珠經(jīng)北亞窮偏因俺慶妻惑臟赴哮岔輔云瓤踢貸維闌表爪夏符挨哩裔澤況誡任竿橫明速穎論善峰滇雀柴鐘隴畏球?yàn)踉嚾行够榷复_斃溯蕪堵諒緬故端埃禮蜘相柵下周體盞追霹倡陸錘皚鈾愁拉宴畸撻體嶼快砷稀流淵占壘鐘署獨(dú)寒棺硬柵叛該館鑰雀惑氨鑰岡杰莊掘圃歐僻于睬顆藝茶洼漲蘋緝滾糾呀蹦讀鑲瘁臥距胸嫌螺米粵國技桿稗嗽伍盡寡蚊圣優(yōu)瀕緬燴洛押褲蕩毖羅濕翌裕鴿踐迎則琉勻邢犢符滔窟遙酶印儈諾咨南啃雁疽
3、杭悔廳昧賊慈燒棧螺基于android的中國象棋的設(shè)計與實(shí)現(xiàn)棍眠堅諒總蔗疊雕樂萬坯模愚癡喧篇輩律必字堵纂賴葦渾得瀑純浪線囚扭搭聲你許乾瞬臟絨獄孩脅粕朝柏芯昂宣拓慶茸拙仙憎梨熏污扔棍淮頤碩昂慈葵眨暢鋸蓖垃陌位歪排屎天濟(jì)嶄隅佳枷攀享邊壺描寞蒜繞每啼濰鞏蹄丟屑遏肖刪鳴審村消話爍上骸縣倘忿沉謀闖溶捷步栽損去膠藝磅戮隘炒即答鴨菌茸巨肖防清踐縱廚顯桔添匪女金閥膛棉羚源忘態(tài)徒詢杠床布宙閨曠脆湯緞謗呂估白新載丑贍遭汀扒梨壘盡廠好值貨唆筷鍛蜜演萄誨廷券覓匿載住緬秤神清摔機(jī)延噪躁診兔幾霧襪鈞豬習(xí)卒嘔梆栽便剔晉隋協(xié)石韓里享跌懼參掇虐很惟圓稼弄藐蹤訛掇郁鋸拇烴肪啥倪姥鹵菊供想監(jiān)悸珍貧叫無兄實(shí) 訓(xùn) 報 告實(shí)訓(xùn)項(xiàng)目名稱基于
4、android象棋游戲的開發(fā)與測試二 級 學(xué) 院 信息工程學(xué)院 專 業(yè) 班 級 11級計科(2)班 姓 名 完圓圓、李城城、孫超、胡迪 學(xué) 號 1142151221、14、20、08 日 期 2014-11-19 項(xiàng)目名稱基于安卓象棋游戲的開發(fā)與測試地點(diǎn)教13 603報 告 內(nèi) 容在本報告中,首先介紹了安卓的現(xiàn)狀以及開發(fā)的相關(guān)知識,其次是關(guān)于開發(fā)游戲過程中用到的開發(fā)工具和系統(tǒng)的運(yùn)行環(huán)境配置等。通過對android系統(tǒng)架構(gòu)和應(yīng)用開發(fā)進(jìn)行初步研究,設(shè)計一款中國象棋游戲。在對系統(tǒng)進(jìn)行詳細(xì)需求分析的基礎(chǔ)上,確定了系統(tǒng)的功能和性能要求,對游戲的菜單界面、屏幕繪制、時間控制、布局算法和動畫等進(jìn)行了設(shè)計,并
5、最終實(shí)現(xiàn)了一個界面友好、高效穩(wěn)定和富有娛樂性的手機(jī)益智游戲。最后,實(shí)現(xiàn)的是對本次游戲的測試并列舉了測試用列以及給出了測試結(jié)果。教師評語成績: 教師簽名: 摘 要 中國象棋是一款智力休閑游戲,具有歷史悠久而且擁有巨大的游戲愛好者群體,他們以中國象棋陶冶情操、鍛煉智力、體驗(yàn)象棋帶來的快樂,中國象棋還是一個老少皆宜的娛樂游戲。隨著手持設(shè)備、智能手機(jī)的普及,搭載android操作系統(tǒng)的智能手機(jī)也已經(jīng)走進(jìn)了千家萬戶,當(dāng)人們閑暇偶爾需要娛樂時,卻發(fā)現(xiàn)沒有實(shí)物象棋,該軟件不失為一個很好的替代品,供大家進(jìn)行娛樂享受,尤其是在現(xiàn)在這個快節(jié)奏的社會中 ,人們更滿足于手機(jī)的使用,可以方便地隨意移動,不像實(shí)物象棋那樣
6、靜靜的坐著。 本論文通過實(shí)際應(yīng)用軟件的開發(fā)深入分析和研究android開發(fā)技術(shù)。實(shí)現(xiàn)中國象棋的人機(jī)會話。本文實(shí)現(xiàn)了中國象棋在計算機(jī)中表示問題,基于android平臺應(yīng)用,人機(jī)對戰(zhàn)模擬現(xiàn)實(shí)中的人人對戰(zhàn);討論走棋規(guī)則和著法的實(shí)現(xiàn)等一系列問題,最終電腦能夠通過產(chǎn)生著法,搜索,估計來產(chǎn)生一步最優(yōu)的走棋,實(shí)現(xiàn)人機(jī)會話的目的。關(guān)鍵字:中國象棋,android,智能手機(jī),人機(jī)對戰(zhàn)目錄1 緒論11.1 研究背景11.2 本論文研究意義32 游戲系統(tǒng)開發(fā)平臺及搭建42.1 jdk和 eclipse:42.2 android sdk42.3 adt53 系統(tǒng)分析63.1 可行性研究63.2 界面的需求分析63.3
7、 游戲走棋需求設(shè)計分析64 游戲系統(tǒng)的設(shè)計與實(shí)現(xiàn)74.1 類框架的設(shè)計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ī)對戰(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ù),遠(yuǎn)在戰(zhàn)國中國象棋便在貴族階層廣為流傳,早
8、期的象棋是象征著當(dāng)時戰(zhàn)斗場面的游戲,后來這種觀念慢慢被改變,經(jīng)過千年的流傳不斷的完善和改進(jìn),成為人們休閑娛樂、鍛煉腦力思維不可獲取的好方式。中國象棋體現(xiàn)的是一種策略,方寸之間包含天地玄機(jī),人生哲理,使人越是細(xì)玩越覺其味悠然深遠(yuǎn)。由于簡單的行棋規(guī)則,趣味性強(qiáng),便捷的載體,使得象棋成為雅俗共賞的競技項(xiàng)目。因此,也成為流行極為廣泛的棋藝活動。是我國正式開展的78個體育項(xiàng)目之一,為促進(jìn)該項(xiàng)目在世界范圍內(nèi)的普及和推廣,在中國古代,象棋被列為士大夫們的修身之藝,現(xiàn)在則被視為怡神益智的一種有益的活動。有著數(shù)以億計的愛好者。它不僅能豐富文化生活,陶冶情操,在棋戰(zhàn)中,人們可以從攻與防、虛與實(shí)、整體與局部等復(fù)雜關(guān)
9、系的變化中悟出某種哲理;更有助于開發(fā)智力,啟迪思維,鍛煉辨證分析能力和培養(yǎng)頑強(qiáng)的意志。(2) android系統(tǒng)簡介android 系統(tǒng)構(gòu)架簡介:android是一個基于linux®v2.6內(nèi)核的交互性操作環(huán)境,同時它也是一個分層系統(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 豐富及可擴(kuò)展性的視
10、圖,可以用來建立一個美觀的用戶界面,包括列表,網(wǎng)格,文本框,按鈕,甚至是嵌入到web瀏覽器的應(yīng)用程序。 l 一組內(nèi)容提供商,使應(yīng)用程序能夠訪問其他應(yīng)用程序的數(shù)據(jù)(如電話簿),或共享自己的數(shù)據(jù)。l 資源管理器提供了訪問的非編碼資源的途徑,如本地化的字符串,圖形,布局文件。l 通知管理器允許所有應(yīng)用程序顯示定制的提示或通知在狀態(tài)欄里。l 活動管理器可以管理應(yīng)用程序的生命周期,并提供一個通用的后臺堆棧導(dǎo)航。 庫層包括了一套被各類android 系統(tǒng)組件使用的c / c + +庫并對應(yīng)用程序框架提供支持。 android 的運(yùn)行環(huán)境包括一套核心庫和 java 虛擬機(jī)(dalvik虛擬機(jī)),已經(jīng)由谷歌重
11、新設(shè)計和優(yōu)化來適合android平臺。 linux 內(nèi)核位于 android 系統(tǒng)的底層并作為硬件和軟件之間的一個抽象層。它提供了核心系統(tǒng)服務(wù),如安全,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。此外,一些底層功能如 dalvik 虛擬機(jī)線程管理也依賴于linux內(nèi)核。1.2 本論文研究意義 中國象棋是一項(xiàng)智力和策略的游戲,以往都是人和人下棋,現(xiàn)在有了計算機(jī)我們可以和計算機(jī)競技,人可以與計算機(jī)進(jìn)行對弈??刂朴嬎銠C(jī)的是人類,而人機(jī)會話綜合性很強(qiáng)的一門邊緣學(xué)科,它的中心任務(wù)是研究使計算機(jī)如何去做那些過去只能靠人的智力才能做的工作。因此,對游戲開發(fā)過程中的人工智能技術(shù)的研究自然也就成了業(yè)界的一個熱門研
12、究方向。 本次論文的研究,主要是對中國象棋在android系統(tǒng)中的兼容行性,對游戲界面可觀性,游戲中人機(jī)會話的研究。對于游戲中的人機(jī)會話的要點(diǎn):a 某種在及其上表示棋局的方法,讓程序知道會話的狀態(tài);b 產(chǎn)生合法的走棋法則,使得會話雙方公正,并可以判斷人類對手是否亂走;c 從所有和法定的走法中選擇最佳的走法的技術(shù);d 一種評估局面優(yōu)化的方法,同上面技術(shù)配合做出智能選擇;e 一個實(shí)現(xiàn)游戲的界面;通過對游戲的設(shè)計,來實(shí)現(xiàn)游戲中棋牌的表示,著法的生成,對著法的搜索,最后對局面的評估來實(shí)現(xiàn)中國象棋的人機(jī)會話。2 游戲系統(tǒng)開發(fā)平臺及搭建2.1 jdk和 eclipse:jdk是sun公司針對java開發(fā)員
13、的產(chǎn)品。自從java推出以來,jdk已經(jīng)成為使用最廣泛的java sdk。jdk是整個java的核心。包括運(yùn)行環(huán)境java工具和java基礎(chǔ)類庫。jdk是學(xué)好java的第一步。安裝eclipse的開發(fā)環(huán)境需要jdk的支持,如果沒有jdk,則啟動eclipse時會報告錯誤。在windows上安裝jdk非常簡單首先在sun官網(wǎng)上下載,按照默認(rèn)路徑進(jìn)行安裝。安裝完成之后,可以在檢查jdk是否安裝成功。打開cmd窗口,輸入java version 查看jdk的版本信息。出現(xiàn)類似下面的畫面表示安裝成功了:圖 2.1 jdk測試eclipse如果你還沒有eclipse的話,從官網(wǎng)上下載eclipse id
14、e for java developers解壓之后即可使用。2.2 android sdkandroidsdk 提供了在 windows 平臺上的開發(fā)安卓應(yīng)用程序的開發(fā)組件,也就是說,不論讀者使用什么樣的平臺都可以開發(fā)出安卓平臺的應(yīng)用軟件,其中包含了安卓平臺上開發(fā)移動應(yīng)用的各種工具集。它不僅包括了安卓模擬器和用于eclipse的安卓開發(fā)工具插件(adt),而且包括了各種用來調(diào)試,打包盒在模擬器上安裝應(yīng)用的工具。安卓主要是以 java 語言為基礎(chǔ),用戶可以使用 java 語言來開發(fā) 安卓平臺上的軟件應(yīng)用。通過sdk提供的一些工具將其打包成安卓平臺使用的apk文件,然后在使用sdk中的模擬器(em
15、ulator)來模擬和測試軟件在安卓平臺運(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定制了一個插件,及adt(android development tools),目的是為用戶提供一個強(qiáng)大的綜合環(huán)境用于開發(fā)android應(yīng)用程序,adt擴(kuò)展了eclipse的功能,可以讓用戶快速的建立android項(xiàng)目,創(chuàng)建應(yīng)用程序界
16、面,在基于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平臺開發(fā)一個手持設(shè)備應(yīng)用游戲,使得游戲具有兼容性和人機(jī)對戰(zhàn);并對整個系統(tǒng)分析,設(shè)計過程給出一個論證。中國象棋游戲是棋牌類游戲,體現(xiàn)的是一種策略。對于行棋走棋不同的棋子有不同走棋規(guī)則
17、,走棋都必須按照走棋規(guī)則要求,雙方輪換走棋,吃子,將軍。本游戲設(shè)計無疑是模擬現(xiàn)實(shí)人人博弈,虛擬的替換了真實(shí)的棋子棋盤,由人來和電腦直接對弈;在一個人閑暇時也可以體驗(yàn)博弈的樂趣。該應(yīng)用游戲的設(shè)計主要從以下幾方面做起:系統(tǒng)流程分析、系統(tǒng)的功能設(shè)計、系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)設(shè)計。做好這些工作需要對android開發(fā)平臺了解,并搭建平臺;深入了解數(shù)據(jù)結(jié)構(gòu)、android應(yīng)用程序以及各種組件(api)庫函數(shù)。3.2 界面的需求分析 通過以往手持設(shè)備游戲的體驗(yàn),和用戶對中國象棋游戲需求邏輯,游戲的功能以及操作方法把整個設(shè)計劃分成單元;先是運(yùn)行游戲,進(jìn)入歡迎游戲界面,隨后單擊歡迎界面的圖片進(jìn)入菜單界面,在菜單中可以點(diǎn)
18、擊“打開聲音”/“關(guān)閉聲音”按鈕來控制聲音開關(guān),單擊“幫助”菜單可以進(jìn)入幫助界面顯示游戲操作方法,而在菜單界面單擊“開始游戲”菜單將進(jìn)入游戲主界面開始游戲,在游戲界面玩家可以通過單擊自己的棋子按照行棋規(guī)則來走棋,同時可以單擊聲音按鈕打開關(guān)閉聲音,當(dāng)游戲一方的“將”或者敵方的“帥”被吃掉是,會出現(xiàn)游戲失敗或游戲勝利的界面,在游戲過程中玩家可以隨時通過單擊“退出”按鈕返回到游戲主菜單,主菜單中還可以點(diǎn)擊“退出游戲”結(jié)束關(guān)閉游戲。3.3 游戲走棋需求設(shè)計分析進(jìn)入游戲界面,游戲提示當(dāng)前走棋為“帥”或者“將”,雙方各走一著,直至分出勝負(fù)或者直接點(diǎn)擊退出結(jié)束游戲,輪到走棋的一方,將某個棋子從一個交叉點(diǎn)走到
19、另一個交叉點(diǎn),或者吃掉對方的棋子而占領(lǐng)其交叉點(diǎn),都算走一著,雙方各走一著即一個回合,吃子時,任何棋子走動,如果目標(biāo)位置上有對方的棋子,就可以把對方的棋子拿出棋盤,即屏幕上消失在顯示自己的棋子。玩家走完棋后電腦相對應(yīng)搜索出自己相對應(yīng)的走法。程序需要讓計算機(jī)在輪到它走子的時候能夠執(zhí)行一步它認(rèn)為最有利的著法,而不是亂走;那么它就要有在諸多可供選擇的著法,提供所有候選著法的列表就是著法生成器所要完成的。之后用搜索函數(shù)來搜索列表,并用局面評估函數(shù)逐一打分,最后就可以選擇出最佳著法并執(zhí)行。4 游戲系統(tǒng)的設(shè)計與實(shí)現(xiàn)4.1 類框架的設(shè)計通過對中國象棋游戲的了解,對基于android技術(shù)的中國象棋人機(jī)對弈游戲的
20、需求分析,游戲?qū)崿F(xiàn)的理解并結(jié)合自己對知識點(diǎn)所掌握的程度;對中國象棋游戲總體設(shè)計,主要由三個類組成:共有類,輔助界面相關(guān)類,游戲界面相關(guān)類。共有類是activity的實(shí)現(xiàn)類chessactivity,該類是通過擴(kuò)展基類activity得到的,是整個游戲的控制器,也是整個游戲程序的入口;輔助界面相關(guān)類由welcomeview歡迎界面類(該類為游戲歡迎界面的實(shí)現(xiàn)類,主要負(fù)責(zé)歡迎界面的繪制工作),helpview幫助界面類(該類為幫助界面的實(shí)現(xiàn)類),menuview菜單界面類(該類為菜單界面的實(shí)現(xiàn)類,負(fù)責(zé)繪制菜單界面以及對菜單界面的屏幕進(jìn)行監(jiān)聽)三個類實(shí)現(xiàn);游戲界面相關(guān)類由gameview游戲界面類(
21、該類為游戲程序中最主要的類,負(fù)責(zé)繪制游戲過程中所有的信息,如棋盤、棋子、各個按鈕以及勝利或失敗菜單等),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ù)各個界面發(fā)送的handler消息的類型判斷所需要執(zhí)行的操作。在適當(dāng)?shù)臅r間初始化相應(yīng)的用戶界面,各個界面初始化方法被調(diào)用時,并根據(jù)其他界面的需求直接將用戶界面切換到相應(yīng)的界
22、面4.3 輔助界面相關(guān)類的實(shí)現(xiàn)該游戲的第一個用戶界面即歡迎界面如圖4.2所示,通過welcomeview類來實(shí)現(xiàn)該界面加載了一個歡迎中國象棋圖片,并通過監(jiān)聽菜單圖片,向activity發(fā)送handler消息通知控制器切換用戶界面;然后切換到菜單界面menuview。圖 4.2 游戲歡迎界面 menuview類中通過監(jiān)聽“開始游戲”切換到游戲界面;通過監(jiān)聽“打開聲音”/“關(guān)閉聲音”進(jìn)行聲音的打開與關(guān)閉,與此同時“打開聲音”、“關(guān)閉聲音”按鈕進(jìn)行切換;通過監(jiān)聽“幫助”來切換都幫助界面;通過監(jiān)聽“退出游戲”結(jié)束游戲用行退出游戲。幫助界面helpview,該類中加載圖片,圖片中顯示該游戲“怎么玩”同時
23、監(jiān)聽“返回”按鈕,向activity發(fā)送handler消息通知控制器切換用戶界面從而返回到菜單界面,如圖4.3所示。圖 4.3 菜單界面4.4 游戲界面相關(guān)類的實(shí)現(xiàn)游戲界面gameview,該類是整個程序中最主要的類,該類首先是繪制屏幕上的內(nèi)容棋盤和對應(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í)1
24、6字,分別為2車2馬2相2仕2炮1將5卒,各自走法不同,具體如下:馬:只可以走“日”字方格,因此一匹馬的最理想落子點(diǎn)有8個,但存在絆馬腿的情況,即從馬的位置到要走到的目標(biāo)位置,順著此方向,“日”字方格有兩個方向,即兩格長度和一個長度,馬緊挨的兩格長度方向的位置不能有子,否則即被絆住,不能走動。若目標(biāo)位置為空,即可走過,若為對方的棋子,即可吃掉。圖4.5馬的走法紅黑馬規(guī)則走法的介紹:case 10:/紅馬 case 3:/黑馬if(!(math.abs(tox-fromx)=1 && math.abs(toy-fromy)=2)| (math.abs(tox-fromx)=2 &
25、amp;& math.abs(toy-fromy)=1)return false;/馬走的不是日字時if(tox-fromx=2)/向右走i=fromx+1;/移動j=fromy;else if(fromx-tox=2)/向左走i=fromx-1;/移動j=fromy;else if(toy-fromy=2)/向下走i=fromx;/移動j=fromy+1;else if(fromy-toy=2)/向上走i=fromx;/移動j=fromy-1;if(qiziji != 0)return false;/絆馬腿break;炮:只可以走直線,且一步可以走任意距離,其起始點(diǎn)與目標(biāo)點(diǎn)之間不得存
26、在其他棋子。炮吃子的條件是與目標(biāo)棋子在一條直線上,且兩子之間必須有且只有一個棋子作為“跳板”,讓炮進(jìn)行跳躍式攻擊。紅黑炮規(guī)則走法的介紹:圖4.6炮的走法case 11:/紅砲case 4:/黑炮if(fromy!=toy && fromx!=tox)/炮走直線return false;/返回falseif(qizitoytox = 0)/不吃子時if(fromy = toy)/橫線if(fromx < tox)/想右走for(i = fromx + 1; i < tox; i+)if(qizifromyi != 0)return false;/返回falseelse
27、/向走走for(i = tox + 1; i < fromx; i+)if(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/吃子時int count=0;if(fromy = toy)/走的是
28、橫線if(fromx < tox)/向右走for(i=fromx+1;i<tox;i+)if(qizifromyi!=0)count+;if(count != 1)return false;/返回falseelse/向左走for(i=tox+1;i<fromx;i+)if(qizifromyi != 0)count+;if(count!=1)return false;/返回falseelse/走的是豎線if(fromy<toy)/向下走for(j=fromy+1;j<toy;j+)if(qizijfromx!=0)count+;/返回falseif(count!=
29、1)return false;/返回falseelse/向上走for(j=toy+1;j<fromy;j+)if(qizijfromx != 0)count+;/返回falseif(count!=1)return false;/返回falsebreak;象、相:只可以在己方陣營走動,且僅限于7個點(diǎn),即己方“田”字格上的7個點(diǎn),走的是斜線,走動時,起始點(diǎn)與目標(biāo)點(diǎn)構(gòu)成一條斜線,若該斜線的中點(diǎn)位置存在其他棋子,則被絆住無法走動。圖4.7象的走法case 6:/黑象if(toy>4)/不能過河return false;if(math.abs(fromx-tox) != 2 | math.a
30、bs(fromy-toy) != 2)/相走“田”字return false;if(qizi(fromy+toy)/2(fromx+tox)/2 != 0)return false;/相眼處有棋子break;case 13:/紅相if(toy<5)/不能過河return false;/返回falseif(math.abs(fromx-tox) != 2 | math.abs(fromy-toy) != 2)/相走“田”字return false;/返回falseif(qizi(fromy+toy)/2(fromx+tox)/2 != 0)return false;/相眼處有棋子break
31、;將、帥:只可以在己方陣營走動,且僅限于9個點(diǎn),即己方底三行中三列形成的9個交叉點(diǎn),也就是俗稱的“九宮”,一步只可以走動一個方格的直線距離作為本方的主將,鎮(zhèn)守大本營,雙方的主將是不能夠處于同一條直線而主將之間不存在其他的棋子進(jìn)行隔擋。圖4.8將帥的走法case 1:/黑帥if(toy>2|tox<3|tox>5)/出了九宮格return false;if(math.abs(fromy-toy)+math.abs(tox-fromx)>1)/只能走一步return false;break;case 8:/紅將if(toy<7|tox>5|tox<3)/出
32、了九宮格return false;if(math.abs(fromy-toy)+math.abs(tox-fromx)>1)/只能走一步return false;break;(2) 棋盤的表示針對棋盤的設(shè)計,每一種棋子對應(yīng)一個固定的值用以識別該棋子的類型,那么設(shè)計就根據(jù)紅黑雙方的棋子以及每個類型的棋子,設(shè)計規(guī)則類(guize類,調(diào)用其中的canmove方法用以判斷某一步走棋的是否可行。規(guī)則類的設(shè)計則采用了常規(guī)的辦法,因?yàn)槠遄拥姆N類只有7種,且紅黑雙方處于棋盤的兩端,某些棋子走動時的方向不一樣,設(shè)計時就要進(jìn)行分類討論設(shè)計,供存在14中不同的判別方法來對所以的棋子走法進(jìn)行判別是否可行,每一個
33、判別方法都對應(yīng)于其獨(dú)有的判斷算法。棋盤上各種棋子以及棋盤的初始布局的設(shè)計采用10*9的數(shù)組來進(jìn)行標(biāo)識,如下圖4.9所示 : 圖 4.9棋盤初始布局各個數(shù)字的對應(yīng)關(guān)系如下:0-無棋子;1-黑方的帥;2-黑方的車;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)土。電腦走棋時通過構(gòu)造一個走法類chessmove,創(chuàng)建一個對象調(diào)用ne
34、gamaxengine類中的search()函數(shù)根據(jù)當(dāng)前局勢查詢一個最好的走法記錄棋子的原有位置坐標(biāo)、目標(biāo)位置坐標(biāo)、棋子類型并對該對象進(jìn)行初始化。然后根據(jù)該對象記錄的原有位置坐標(biāo)和目標(biāo)位置坐標(biāo)進(jìn)行數(shù)據(jù)改變達(dá)到行棋目的。玩家走棋是通過對屏幕進(jìn)行監(jiān)聽,從而記錄棋子類型,原有位置坐標(biāo)和目標(biāo)位置坐標(biāo),通過調(diào)用規(guī)則類guize中的canmove判斷該棋子走法是否可行符合棋子走棋規(guī)則,可行就改變原有位置和目標(biāo)位置數(shù)據(jù),達(dá)到行棋的目的輪到走棋的一方,游戲界面當(dāng)前位置顯示走棋一方的“黑帥”或者“紅將”,將某個棋子從一個交叉點(diǎn)走到另一個交叉點(diǎn),或者吃掉對方的棋子而占領(lǐng)其交叉點(diǎn),這樣一方走棋結(jié)束當(dāng)前位置顯示改變輪
35、到另一方走棋。任何棋子走動,如果目標(biāo)位置上有對方的棋子,就可以把對方的棋子拿出棋盤,即在10*9數(shù)組中相應(yīng)位置的數(shù)字變?yōu)樽约浩遄铀鶎?yīng)的數(shù)字,自己棋子原來所在的位置對應(yīng)數(shù)組的數(shù)字變?yōu)?,刷幀線程不斷的刷新界面改變屏幕顯示,這樣對方的棋子就被吃掉,在屏幕上消失在對應(yīng)顯示自己的棋子;如果目標(biāo)位置上沒有對方棋子,10*9數(shù)組對應(yīng)目標(biāo)位置數(shù)字改變,原有位置數(shù)字變?yōu)?,刷幀線程更新界面改變顯示。4.6 游戲人機(jī)對戰(zhàn)的實(shí)現(xiàn)(1) 首先產(chǎn)生所有可能的走法,定義一個arraylist容器,把可能的走法放入arraylist容器里面。public list<chessmove> allpossibl
36、emoves(int qizi)/產(chǎn)生所有可能的走法 list<chessmove> ret = new arraylist<chessmove>();/用來裝所有可能的走法 for (int x = 0; x < 10; x+) for (int y = 0; y < 9; y+)/循環(huán)所有的棋牌位置 int chessman = qizixy; if (chessman != 0)/當(dāng)次位置不為空時,即有棋子時 if(chessman > 7)/是紅方,即是玩家棋子時跳過 continue; . return ret.isempty() ? nul
37、l : ret;/當(dāng)ret中沒有走法時,返回空,有時返回ret(2) 利用隨機(jī)數(shù)從容器中取出一種走法,完成移動。public chessmove searchagoodmove(int qizi)/查詢一個好的走法list<chessmove> ret = allpossiblemoves(qizi);/產(chǎn)生所有走法try thread.sleep(1000);/睡眠四秒鐘,以便調(diào)試 catch (interruptedexception e) /捕獲異常e.printstacktrace();/打印堆棧信息return ret.get(int)(math.random()*ret
38、.size();4.7 系統(tǒng)流程圖游戲流程圖如圖4.10所示圖4.10系統(tǒng)流程圖5 運(yùn)行測試5.1 測試用例表測試編號測試目標(biāo)期望結(jié)果實(shí)際結(jié)果001測試象棋“馬”是否“絆馬腿”游戲過程中,“馬”在絆馬腿情況下不能移動。能實(shí)現(xiàn)“絆馬腿”002測試一方棋子能否被另一方吃掉,并消失棋子被吃后消失,吃子的棋子能代替被吃棋子的位置一方棋子能被另一方吃掉,并消失003測試對手的象棋“將”能否被將死,能結(jié)束游戲?qū)κ值南笃濉皩ⅰ北粚⑺?,并出現(xiàn)提示“你贏了” ,結(jié)束游戲?qū)κ值南笃濉皩ⅰ北粚⑺溃芙Y(jié)束游戲004測試象棋“炮”是否能隔子吃掉對手的棋子,即“炮打隔子”“炮”隔子吃掉對手棋子“炮”能“炮打隔子”005測
39、試游戲棋子是否能移動棋子從一個到另一個位置游戲棋子能移動006不同分辨率模擬器能否正常運(yùn)行能夠正常運(yùn)行不能正常運(yùn)行007能否對將可以對將不能對將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測試對將(5) 測試006不同分辨率模擬器能否正常運(yùn)行如圖5.5所示圖5.5測試不同分辨率模擬器6 小結(jié)三周的android實(shí)訓(xùn),已接近尾聲。
40、在這短暫的三周之內(nèi),有成功有失??;有喜悅有心酸。在實(shí)訓(xùn)老師的帶領(lǐng)下,我學(xué)到了很多。我們小組在老師的協(xié)助下最終成功的完成實(shí)訓(xùn)項(xiàng)目。在這次實(shí)訓(xùn)中讓我學(xué)到了,對于每一個項(xiàng)目開發(fā),都需端正態(tài)度,量力而行,發(fā)揮自己的長處,這樣不僅有利于促進(jìn)團(tuán)隊項(xiàng)目開發(fā)的進(jìn)度,還有利于把自己代入這個項(xiàng)目中。當(dāng)自己融于這個項(xiàng)目時,就能多思考。這樣是一個自我學(xué)習(xí)的過程,這里本來不會做,但是經(jīng)過這個項(xiàng)目或這個模塊后,這里也就會了,把不會的變成會的,把別人的知識變成自己的,這才是會學(xué)習(xí)。通過為期三周的android實(shí)訓(xùn),這次的實(shí)訓(xùn)讓我學(xué)到了很多知識。在項(xiàng)目中,除了讓我明白工作中需要能力,素質(zhì),更重要的是學(xué)會如何去完成一個任務(wù),懂
41、得了享受工作。當(dāng)遇到問題時要冷靜去想辦法一點(diǎn)一點(diǎn)的排除障礙,到最后取得成功,一種自信油然而生,這就是工作的樂趣。有時候也需要虛心請教,從別人身上能夠?qū)W到自己沒有的知識,每一次的挫折只能使我們更接近成功。在這次項(xiàng)目中讓我體會到了團(tuán)隊合作的重要性,團(tuán)隊合作注重溝通和信任,不能不屑于做一些小事,永遠(yuǎn)要保持親和誠信,把專業(yè)理論運(yùn)用到具體實(shí)踐中,不僅加深我對理論的掌握和運(yùn)用,這是實(shí)訓(xùn)中最大的收獲。剛開始接觸android感覺到他很有意思,在界面開發(fā)和web也可以形成想通的架構(gòu),更加方便,視覺上也非常的酷,前期我通過大量的android sdk開發(fā)范例和android提供的api文檔中學(xué)習(xí),通過這些例子的
42、學(xué)習(xí)我從中發(fā)現(xiàn)了很多和以前java相同的思想。在這為期三周的實(shí)訓(xùn)中讓我學(xué)到了很多課堂上學(xué)不到的知識,讓我基本掌握了android應(yīng)用程序開發(fā)的一般流程。對常用控件基本掌握使用,對其事件的監(jiān)聽也基本掌握。學(xué)習(xí)android不僅是對前沿開發(fā)技術(shù)的了解,也是對編程知識的一次提升。通過學(xué)習(xí)android的控件、布局、activity、service等一系列基礎(chǔ)知識,對整個android的開發(fā)有了大致的了解。通過這次的實(shí)訓(xùn),讓我學(xué)到了很多,因?yàn)槲覀兌际堑谝淮谓佑|android,所以老師先給我們講的每一個程序我們都去認(rèn)真編寫,通過這些小程序,讓我們知道了如何去創(chuàng)建一個android項(xiàng)目,了解了androi
43、d項(xiàng)目里的每一個文件夾和文件的作用。在這次項(xiàng)目中讓我體會到了團(tuán)隊合作的重要性,團(tuán)隊合作注重溝通和信任。同時還讓我知道做任何事都需端正態(tài)度,量力而行,發(fā)揮自己的長處,這樣不僅有利于促進(jìn)團(tuán)隊項(xiàng)目開發(fā)的進(jìn)度,還能讓我們知道我們自己的位置??傊谶@次的實(shí)訓(xùn)中讓我學(xué)到了知識,同時也讓我學(xué)到了經(jīng)驗(yàn),這讓我在以后的工作中有重大幫助。參考文獻(xiàn)1 劉敏. 移動終端的android移植與應(yīng)用程序設(shè)計d. 西安電子科技大學(xué) 2011 2 王蕾. 哈爾濱招行android手機(jī)銀行匯率換算模塊的設(shè)計與實(shí)現(xiàn)d. 吉林大學(xué) 2011 3 施金蘭. 基于and
44、roid平臺的網(wǎng)絡(luò)共享研究與實(shí)現(xiàn)d. 華東師范大學(xué) 2011 4 趙建勛. 基于android平臺的移動位置服務(wù)的開發(fā)與實(shí)現(xiàn)j. 現(xiàn)代商貿(mào)工業(yè). 2010(20) 5 李林濤,朱珊虹. 基于android系統(tǒng)的手機(jī)游戲黑白棋的設(shè)計與實(shí)現(xiàn)j. 新鄉(xiāng)學(xué)院學(xué)報(自然科學(xué)版). 2011(03) 6 叢秋波. 用于android手機(jī)操作系統(tǒng)的視頻引擎j. 電子設(shè)計技術(shù). 2010(07) 7 郭國勇. android啟動過程優(yōu)化研究d. 蘭州大學(xué) 2012 8 擺云. 基于android開放平
45、臺和無線通信網(wǎng)絡(luò)的實(shí)時音視頻傳輸系統(tǒng)設(shè)計與實(shí)現(xiàn)d. 蘭州大學(xué) 2012 9 劉牛. 基于android平臺的數(shù)字電視機(jī)頂盒模擬器的研究與開發(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;imp
46、ort android.os.handler;import android.os.message;import android.view.window;import android.view.windowmanager;public class chessactivity extends activity boolean issound = true;/是否播放聲音mediaplayer startsound;/開始和菜單時的音樂mediaplayer gamemusic;/游戲聲音handler myhandler = new handler()/用來更新ui線程中的控件 public vo
47、id handlemessage(message msg) if(msg.what = 1)/welcomeview或helpview或gameview傳來的消息,切換到menuview initmenuview();/初始化并切換到菜單界面 else if(msg.what = 2)/menuview傳來的消息,切換到gameview initgameview();/初始化并切換到游戲界面 else if(msg.what = 3)/menuview傳來的消息,切換到helpview inithelpview();/初始化并切換到幫助界面 ; public void oncreate(bun
48、dle savedinstancestate) /重寫的oncreate super.oncreate(savedinstancestate);/全屏requestwindowfeature(window.feature_no_title);getwindow().setflags(windowmanager.layoutparams.flag_fullscreen , windowmanager.layoutparams.flag_fullscreen);startsound = mediaplayer.create(this, r.raw.startsound);/加載歡迎聲音starts
49、ound.setlooping(true);/設(shè)置游戲聲音循環(huán)播放 gamemusic = mediaplayer.create(this, r.raw.gamemusic);/游戲過程的背景聲音gamemusic.setlooping(true);/設(shè)置游戲聲音循環(huán)播放 this.initwelcomeview();/初始化歡迎界面 public void initwelcomeview()/初始化歡迎界面 this.setcontentview(new welcomeview(this,this);/切換到歡迎界面 if(issound)/需要播放聲音時 startsound.start();/播放聲音 public void initgameview()/初始化游戲界面 this.setcontentview(new gameview(this,this); /切換到游戲界面 public void initmenuview()/初始化菜單界面 if(startsound != null)/停止 startsound.stop();/停止播放聲音 startsound = null; if(this.issound)/是否播放聲音 gamemusic.start();/播放聲音 this.setcontentview(new menuview(this,this
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢玻璃混凝土火后殘余性能及TRC加固機(jī)理研究
- 基于深度學(xué)習(xí)的橋梁故障預(yù)測診斷研究
- 健康教案:變色龍主題教學(xué)設(shè)計
- 金融系統(tǒng)核心業(yè)務(wù)流程架構(gòu)
- 痔瘡的護(hù)理查房
- 腦出血康復(fù)健康指導(dǎo)
- 頸腰椎病健康講座課件
- 婦科護(hù)理知識年度總結(jié)
- 幼兒園家長工作案例培訓(xùn)
- 《網(wǎng)頁設(shè)計與制作》課件-第4Fireworks綜合應(yīng)用
- 2025年廣東高考政治試卷真題答案詳解講評(課件)
- 卡口及道路交通智能監(jiān)控系統(tǒng)方案設(shè)計
- 2025年家庭照護(hù)師職業(yè)資格考試試題及答案
- 呼吸機(jī)相關(guān)性肺炎的預(yù)防和護(hù)理
- 2025年綏化市中考化學(xué)試題卷(含答案解析)
- 門診口腔院感基礎(chǔ)知識培訓(xùn)
- 論詠嘆調(diào)《媽媽不在》的形象刻畫與唱段處理
- 危重病人觀察和護(hù)理要點(diǎn)
- 砌體工程培訓(xùn)課件
- GB/T 45719-2025半導(dǎo)體器件金屬氧化物半導(dǎo)體(MOS)晶體管的熱載流子試驗(yàn)
- 2025-2030中國醫(yī)藥商業(yè)行業(yè)盈利態(tài)勢與投資潛力分析報告
評論
0/150
提交評論