基于java me的黑白棋游戲設(shè)計(jì)及實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于Java ME的黑白棋游戲設(shè)計(jì)及實(shí)現(xiàn)</p><p><b>  摘 要</b></p><p>  在現(xiàn)代社會(huì)中,手機(jī)及其它無(wú)線設(shè)備越來(lái)越多的走進(jìn)普通老百姓的工作和生活。隨著3G技術(shù)的普及與應(yīng)用,基于Java開發(fā)的軟件在手機(jī)上的使用非常的廣泛,手機(jī)增值服務(wù)的內(nèi)容也是越來(lái)越多,對(duì)豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。<

2、/p><p>  本文基于Java ME技術(shù),以計(jì)算機(jī)手機(jī)游戲的運(yùn)行流程為基礎(chǔ),分模塊開發(fā)一款黑白棋游戲軟件。</p><p>  本文對(duì)以下幾點(diǎn)內(nèi)容做了重點(diǎn)研究和探討:系統(tǒng)整體結(jié)構(gòu),根據(jù)設(shè)計(jì)目標(biāo),結(jié)合普通手機(jī)游戲的運(yùn)行流程,給出了系統(tǒng)總體設(shè)計(jì)方案,并探討了系統(tǒng)設(shè)計(jì)時(shí)需要用到的關(guān)鍵技術(shù)。本設(shè)計(jì)通過(guò)一個(gè)棋類游戲的開發(fā),闡述了棋類游戲的開發(fā)過(guò)程,包括軟件開發(fā)的邏輯分析,程序設(shè)計(jì),軟件實(shí)現(xiàn)和軟件測(cè)試

3、幾個(gè)步驟。</p><p>  關(guān)鍵詞:Java ME;手機(jī)游戲;黑白棋</p><p><b>  ABSTRACT</b></p><p>  In modern society, more and more cell phones and other wireless devices into the work and life of o

4、rdinary people. With the popularization and application of 3G technology, developed in Java-based software on the mobile phone use is very extensive, mobile value-added services is more and more content to enrich people&

5、#39;s lives, to provide quick information and plays an essential role.</p><p>  Based on Java ME technology, computer phone game running processes based on a Reversi game software module development.</p&g

6、t;<p>  In this paper, the following contents focus on research and explore:The structure of the system as a whole, according to the design goals, combined with ordinary mobile phone games running processes, given

7、 the overall system design, and discusses the key technologies required system design. The design through the development of a chess game of chess game development process, including the analysis of the logic of the soft

8、ware development, program design, software implementation and software test</p><p>  Keywords: Java ME; Mobile Games; Black and White Chess</p><p><b>  目 錄</b></p><p> 

9、 第1章 緒論- 1 -</p><p>  1.1 研究背景- 1 -</p><p>  1.1.1 Java ME概況- 1 -</p><p>  1.1.2黑白棋開發(fā)背景- 2 -</p><p>  1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)- 3 -</p><p>  1.2.1 國(guó)內(nèi)外研究現(xiàn)狀- 3 -&

10、lt;/p><p>  1.2.2 發(fā)展趨勢(shì)- 4 -</p><p>  1.3 黑白棋研究意義- 4 -</p><p>  第2章 黑白棋游戲簡(jiǎn)介及需求分析- 6 -</p><p>  2.1 項(xiàng)目可行性分析- 6 -</p><p>  2.1.1 技術(shù)可行性- 6 -</p><p

11、>  2.1.2 操作可行性- 6 -</p><p>  2.2 需求分析- 6 -</p><p>  2.2.1 黑白棋規(guī)則- 7 -</p><p>  2.2.2 黑白棋戰(zhàn)術(shù)分析- 7 -</p><p>  2.2.3 黑白棋程序界面的需求- 7 -</p><p>  第3章 游戲設(shè)計(jì)與實(shí)

12、現(xiàn)- 8 -</p><p>  3.1 游戲的設(shè)計(jì)- 8 -</p><p>  3.1.1 游戲的模塊- 8 -</p><p>  3.1.2 游戲功能流程圖- 8 -</p><p>  3.1.3 游戲詳細(xì)設(shè)計(jì)- 9 -</p><p>  3.14 黑白棋開發(fā)環(huán)境- 10 -</p>

13、<p>  3.2 游戲的實(shí)現(xiàn)- 10 -</p><p>  第4章 游戲測(cè)試- 15 -</p><p>  4.1 系統(tǒng)測(cè)試- 15 -</p><p>  4.1.1 測(cè)試方法- 15 -</p><p>  4.1.2 測(cè)試用例及結(jié)果- 15 -</p><p>  4.1.3游戲的發(fā)

14、布- 16 -</p><p>  總 結(jié)- 17 -</p><p>  致 謝- 18 -</p><p>  參 考 文 獻(xiàn)- 19 -</p><p><b>  第1章 緒論</b></p><p><b>  1.1 研究背景</b></p>

15、;<p>  1.1.1 Java ME概況</p><p>  Java的最大目標(biāo)和特點(diǎn),就是"一次編寫,到處運(yùn)行"的平臺(tái)無(wú)關(guān)性。但是,一套標(biāo)準(zhǔn)無(wú)法適應(yīng)各種不同的需求。因此,Java技術(shù)目前共有三套,分別針對(duì)不同的平臺(tái)和應(yīng)用。</p><p>  Standard Edition(J2SE,標(biāo)準(zhǔn)版):針對(duì)桌面端PC和工作站的個(gè)人和低端商務(wù)應(yīng)用。 <

16、/p><p>  Enterprise Edition(J2EE,企業(yè)版):針對(duì)服務(wù)器端企業(yè)級(jí)應(yīng)用,支持Servlets, JSP和XML等等。</p><p>  Micro Edition(J2ME,袖珍版):針對(duì)有限內(nèi)存,顯示和處理能力的設(shè)備,主要是消費(fèi)電子和嵌入式設(shè)備領(lǐng)域(這實(shí)際正是Java語(yǔ)言設(shè)計(jì)最初的目標(biāo)領(lǐng)域)。</p><p>  圖1.1 Java總體架

17、構(gòu)圖</p><p>  在消費(fèi)電子和嵌入式設(shè)備領(lǐng)域,內(nèi)存從幾百K到幾十M,從沒(méi)有屏幕到Web-TV,CPU從低功耗的嵌入式處理器到206MHz的RISC處理器,硬件條件的差異是相當(dāng)大的。這就使得J2ME的標(biāo)準(zhǔn)需要有不同的層次和類別來(lái)適應(yīng)這個(gè)復(fù)雜的領(lǐng)域,因此相比之下J2ME就比J2SE和J2EE的標(biāo)準(zhǔn)要復(fù)雜得多。因此,清楚的理解J2ME的體系結(jié)構(gòu)的劃分才能更好的理解和掌握J(rèn)2ME。</p><

18、p>  J2ME的3層體系結(jié)構(gòu)依照各種設(shè)備的資源特性,將J2ME技術(shù)構(gòu)架分為簡(jiǎn)表(Profile)、配置(Configuration)和Java Virtual Machine(JVM)3層,然后再進(jìn)一步細(xì)分,這使J2ME能夠在每一類設(shè)備的限制下工作,而同時(shí)提供最低限度的Java語(yǔ)言功能性。</p><p>  關(guān)于J2ME的體系結(jié)構(gòu),可以這樣來(lái)進(jìn)行總結(jié):Configuration的分類是根據(jù)計(jì)算能力的不同

19、來(lái)劃分的,同類設(shè)備的計(jì)算能力相近。Configuration是一個(gè)規(guī)范,定義了這類設(shè)備的共同Java平臺(tái),定義與設(shè)備無(wú)關(guān)的Java虛擬機(jī)和核心庫(kù),是平臺(tái)相容性的基礎(chǔ)。Profile的分類是根據(jù)設(shè)備功能劃分的,同類功能的設(shè)備其他各種硬件條件和需求也相近。Profile是一組API,在某一Configuration的基礎(chǔ)上擴(kuò)展了針對(duì)設(shè)備特定功能的API,使得標(biāo)準(zhǔn)能夠完全適應(yīng)特殊的設(shè)備,徹底發(fā)揮設(shè)備的功能。</p><p&

20、gt;  J2ME體系的一般結(jié)構(gòu)是:由Configuration定義的Java虛擬機(jī)運(yùn)行于設(shè)備的宿主操作系統(tǒng)之上,構(gòu)成整個(gè)平臺(tái)的基礎(chǔ)。Configuration提供了基本的語(yǔ)言特性,Profile提供針對(duì)設(shè)備的特殊功能API和擴(kuò)展類庫(kù)。應(yīng)用程序的運(yùn)行環(huán)境需要一個(gè)Configuration和至少一個(gè)Profile,多個(gè)Profile可以共存,也可以疊加。</p><p>  MIDP(Mobile Informat

21、ion Device Profile)定義了針對(duì)移動(dòng)信息處理設(shè)備(主要指智能手機(jī)和一部分具有無(wú)線通信功能的PDA)的圖形界面,輸入和時(shí)間處理,持久性存儲(chǔ),無(wú)線電話網(wǎng)絡(luò)連接之上的一些消息處理(例如短消息),安全等等API,并且考慮到了移動(dòng)信息設(shè)備的屏幕和內(nèi)存限制。類似于J2SE中的Applet框架,MIDP提供了基于javax.microedition.midlet 包的MIDlet應(yīng)用程序框架。</p><p>

22、  應(yīng)為MIDP提出較的比較早,目前重要的智能手機(jī)和PDA操作系統(tǒng)上都已有了相應(yīng)的實(shí)現(xiàn),而且應(yīng)用的也比較廣泛。 </p><p>  1.1.2黑白棋開發(fā)背景</p><p>  Java語(yǔ)言是美國(guó)Sun Microsystem的James Gosling、Pratrick Naughton及Mike Sheridan等人于1991年精心設(shè)計(jì)出來(lái)的計(jì)算機(jī)編程語(yǔ)言,其構(gòu)想在于實(shí)現(xiàn)使用同一種編

23、程語(yǔ)言所寫出來(lái)的程序可以在不同的平臺(tái)上運(yùn)作。這種架構(gòu)對(duì)于消費(fèi)性電子產(chǎn)品而言是具有革命性的,因?yàn)樵谙M(fèi)性電子產(chǎn)品中的處理器及操作系統(tǒng)各不相同,要在這些平臺(tái)上開發(fā)程序必須要了解各個(gè)平臺(tái)的特性。</p><p>  近幾年,由于微處理器性能的大幅提升,加上無(wú)線通訊技術(shù)的突破,手持式移動(dòng)設(shè)備開始受到大眾的青睞。短短幾年內(nèi),手機(jī)已經(jīng)升級(jí)了幾代產(chǎn)品,普及率逐年攀升,生產(chǎn)效率不斷上升,以至手機(jī)是大多是城市居民不可缺少的一件隨身

24、設(shè)備。繼短信、彩信等服務(wù)之后,中國(guó)移動(dòng)提供基于Java的百寶箱業(yè)務(wù),應(yīng)用產(chǎn)品遍及商務(wù)應(yīng)用、信息獲取、英漢互譯、游戲娛樂(lè)等多媒體領(lǐng)域。</p><p>  為了適應(yīng)移動(dòng)數(shù)據(jù)的發(fā)展,推動(dòng)無(wú)線電子商務(wù)等業(yè)務(wù)的發(fā)展,J2ME(Java 2 Micro Edition)既用于嵌入式系統(tǒng)的Java被引入無(wú)線領(lǐng)域。J2ME的出現(xiàn)實(shí)際上是Java技術(shù)的回歸。隨著J2ME的應(yīng)用,它為移動(dòng)互聯(lián)引入了一種新的模型,既允許手機(jī)可以從互聯(lián)

25、網(wǎng)上下載各種應(yīng)用程序,并在手機(jī)創(chuàng)造可執(zhí)行環(huán)境離線運(yùn)行這些程序。由于定義了可執(zhí)行下載的標(biāo)準(zhǔn),并在手機(jī)上創(chuàng)立了可執(zhí)行環(huán)境和程序開發(fā)語(yǔ)言。</p><p>  隨著計(jì)算機(jī)技術(shù)的日新月異,計(jì)算機(jī)的運(yùn)算速度不僅變得更加的快,也變得更加的智能。利用計(jì)算機(jī)資源來(lái)實(shí)現(xiàn)原本人類才有的思考過(guò)程已經(jīng)成為現(xiàn)實(shí)。在過(guò)去的30多年中,已經(jīng)建立了一些具有一定“智能”的計(jì)算機(jī)程序,例如下棋程序、定理證明系統(tǒng)、集成電路設(shè)計(jì)與分析系統(tǒng)、自然語(yǔ)言翻譯

26、系統(tǒng)、智能信息檢索系統(tǒng)、疾病診斷系統(tǒng)等。這些“人工智能” (Artificial Intelligence,簡(jiǎn)稱AI)被運(yùn)用在人們生活的各個(gè)方面。1997年5月11日,超級(jí)計(jì)算機(jī)深藍(lán)以3勝2負(fù)1平擊敗世界國(guó)際象棋棋王卡斯帕羅夫,這標(biāo)志著人工智能已經(jīng)達(dá)到新的高度。通過(guò)設(shè)計(jì)開發(fā)一套玩棋盤游戲可以研究人工智能的實(shí)現(xiàn)過(guò)程。而黑白棋是一種常見(jiàn)的棋類游戲,它具有規(guī)則簡(jiǎn)單、對(duì)弈時(shí)間短、趣味性強(qiáng)的特點(diǎn)。</p><p>  1.

27、2 研究現(xiàn)狀及發(fā)展趨勢(shì)</p><p>  1.2.1 國(guó)內(nèi)外研究現(xiàn)狀</p><p>  Java語(yǔ)言的學(xué)習(xí)熱潮并沒(méi)有因?yàn)闀r(shí)間的推移而消退,相反,由于計(jì)算機(jī)技術(shù)的發(fā)展所帶來(lái)新應(yīng)用的出現(xiàn),Java越來(lái)越流行,這種情況是以往程序設(shè)計(jì)語(yǔ)言在其生存周期內(nèi)所不多見(jiàn)的。Java語(yǔ)言之所以這樣長(zhǎng)盛不衰,一是因?yàn)槠浔姸嗟募夹g(shù)特點(diǎn)與現(xiàn)今的應(yīng)用十分合拍,可以覆蓋大部分的需求;二是因?yàn)镾UN公司不斷推出新的版

28、本,完善Java自身的功能。</p><p>  黑白棋作為一個(gè)棋類競(jìng)技運(yùn)動(dòng),在民間十分流行,為了熟悉黑白棋規(guī)則及技巧,以及研究簡(jiǎn)單的人工智能,決定用Java開發(fā)黑白棋游戲。主要完成了人機(jī)對(duì)戰(zhàn)功能。在人機(jī)對(duì)弈中通過(guò)深度搜索和估值模塊,來(lái)提高電腦棋手的智能。分析估值模塊中的影響精準(zhǔn)性的幾個(gè)要素,以及提出若干提高精準(zhǔn)性的辦法,以及對(duì)它們搜索的節(jié)點(diǎn)數(shù)進(jìn)行比較,如遞歸算法、電腦學(xué)習(xí)等。算法的研究有助于理解程序結(jié)構(gòu),增強(qiáng)邏

29、輯思維能力,在其他人工智能方面也有很大的參考作用。盡管黑白棋的規(guī)則比較簡(jiǎn)單,但它所包括的豐富戰(zhàn)略,不亞于那些相當(dāng)“經(jīng)典”的策略游戲。其中人工智能部分,由于采用了大量的搜索算法,其中很多被利用到各方面。</p><p>  1.2.2 發(fā)展趨勢(shì)</p><p>  近來(lái)隨著計(jì)算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多的娛樂(lè)項(xiàng)目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,

30、而且棋類游戲水平頗高,大有與人腦分庭抗禮之勢(shì)。其中戰(zhàn)勝過(guò)國(guó)際象棋世界冠軍-卡斯帕羅夫的“深藍(lán)”便是最具說(shuō)服力的代表,其它像圍棋的“手淡”、象棋的“將族”等也以其優(yōu)秀的人工智能深受棋迷喜愛(ài)。</p><p>  越來(lái)越多的具有智能的機(jī)器進(jìn)入了人類的生活,人工智能的重要性如今顯而易見(jiàn)。自人工智能屬于計(jì)算機(jī)科學(xué)的領(lǐng)域,它以計(jì)算機(jī)技術(shù)為基礎(chǔ),近幾十年來(lái),它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴(kuò)大,顯示出強(qiáng)大的生命

31、力。人工智能在專家系統(tǒng),自然語(yǔ)言理解,自動(dòng)定理證明,自動(dòng)程序設(shè)計(jì),人工智能在機(jī)器人學(xué)、模式識(shí)別、物景分析、數(shù)據(jù)庫(kù)的智能檢索、機(jī)器下棋(實(shí)質(zhì)上是博弈論問(wèn)題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。</p><p>  1.3 黑白棋研究意義</p><p>  利用這次畢業(yè)設(shè)計(jì)的機(jī)會(huì)可以熟悉java語(yǔ)言的各種特性,鍛煉程序設(shè)計(jì)的實(shí)踐能力,熟悉Java ME圖形用戶界面的開發(fā),以及鞏固數(shù)據(jù)結(jié)構(gòu)和

32、算法等課程的學(xué)習(xí)成果,并深入理解數(shù)據(jù)結(jié)構(gòu)和算法在程序設(shè)計(jì)中的核心地位。同時(shí),借助開發(fā)本游戲的過(guò)程,可以熟悉人工智能的程序?qū)崿F(xiàn),有助于掌握棋類所需人工智能的常見(jiàn)算法,隨著游戲產(chǎn)業(yè)的日益壯大,人工智能在游戲中的突出表現(xiàn),人工智能越來(lái)越得到世人的重視。在這次的人機(jī)對(duì)戰(zhàn)算法中,通過(guò)一定的算法,實(shí)現(xiàn)電腦的下棋及走棋運(yùn)作,加深了對(duì)人工智能工作原理的了解。</p><p>  第2章 黑白棋游戲簡(jiǎn)介及需求分析</p>

33、;<p>  黑白棋是19世紀(jì)末英國(guó)人發(fā)明的。直到上個(gè)世紀(jì)70年代一個(gè)日本人將其發(fā)展,借用莎士比亞名劇奧賽羅(othello)為這個(gè)游戲重新命名,也就是現(xiàn)在大家玩的黑白棋。游戲通過(guò)相互翻轉(zhuǎn)對(duì)方的棋子,最后以棋盤上誰(shuí)的棋子多來(lái)判斷勝負(fù)。它的游戲規(guī)則簡(jiǎn)單,因此上手很容易,但是它的變化又非常復(fù)雜。有一種說(shuō)法是:只需要幾分鐘學(xué)會(huì)它,卻需要一生的時(shí)間去精通它。</p><p>  2.1 項(xiàng)目可行性分析<

34、;/p><p>  獲得項(xiàng)目需求并對(duì)其進(jìn)行詳細(xì)分析,是項(xiàng)目開始的基礎(chǔ)。只有獲得明確的需求,并做出好的需求分析文檔并得到有效解決,才能保證項(xiàng)目最后的成功。</p><p>  2.1.1 技術(shù)可行性</p><p>  技術(shù)上的可行性分析主要分析技術(shù)條件是否能順利完成開發(fā)工作,硬、軟件能否滿足開發(fā)者的需要等。</p><p>  軟件方面,手機(jī)游戲

35、需要的各種軟件環(huán)境都已具備,其靈活性、安全性和易用性為游戲編程提供了良好的條件。因此,系統(tǒng)的軟件開發(fā)平臺(tái)已成熟可行。</p><p>  硬件方面,科技飛速發(fā)展的今天,硬件更新的速度越來(lái)越快,容量越來(lái)越大,可靠性越來(lái)越高,價(jià)格越來(lái)越低,其硬件平臺(tái)完全能滿足此系統(tǒng)的需要。</p><p>  2.1.2 操作可行性</p><p>  操作可行性,是對(duì)開發(fā)系統(tǒng)在一個(gè)

36、給定的工作環(huán)境中能否運(yùn)行或運(yùn)行好壞程度的量度。本系統(tǒng)以手機(jī)應(yīng)用為主,游戲簡(jiǎn)單、易于操作。所有玩過(guò)手機(jī)游戲的人都可以玩。</p><p><b>  2.2 需求分析</b></p><p>  為了開發(fā)出真正滿足用戶需求的程序,尤其是游戲程序,首先必須知道用戶的需求。把用戶需求作為前提條件,來(lái)指導(dǎo)程序的開發(fā)</p><p>  2.2.1 黑白

37、棋規(guī)則</p><p>  棋盤共有8行8列共64格。開局時(shí),棋盤正中央的4格先置放黑白相隔的4枚棋子。黑子先行,雙方輪流落子。只要落子和棋盤上任一枚己方的棋子在一條線上(橫、直、斜線皆可)夾著對(duì)方棋子(不可以有空格),就能將對(duì)方的這些棋子轉(zhuǎn)變?yōu)槲壹悍?。如果在任一位置落子都不能夾住對(duì)手的任一顆棋子,就要讓對(duì)手下子。當(dāng)雙方皆不能下子時(shí),游戲就結(jié)束,子多的一方勝。</p><p>  2.2.

38、2 黑白棋戰(zhàn)術(shù)分析</p><p>  因?yàn)楹诎灼濯?dú)特的規(guī)則,很容易出現(xiàn)雙方比分的劇烈變化,在游戲后期可能僅用幾個(gè)回合就將大量對(duì)方棋子變成己方,從而扭轉(zhuǎn)局勢(shì)。因此,太著眼于比分是沒(méi)有必要的,更重要的是占據(jù)有利位置。中間位置的棋子最容易受到夾擊,有橫、直、斜線共四個(gè)方向的可能。而邊緣的棋子則只有一個(gè)可能被夾擊的方向,四個(gè)角落上的位置被占據(jù)后,則完全不可能被攻擊。游戲的后期是關(guān)鍵位置的爭(zhēng)奪,而前期的布局,就是為搶占關(guān)

39、鍵位置作準(zhǔn)備。比如,若不想讓對(duì)方占據(jù)棋盤邊緣的有利位置,那么自己就應(yīng)避免在靠近邊緣的那一排落子。</p><p>  2.2.3 黑白棋程序界面的需求</p><p>  通過(guò)常見(jiàn)的一些具有代表性的黑白棋程序的對(duì)比分析,現(xiàn)在一個(gè)基于界面上的用戶需求已經(jīng)基本確立。該需求包含以下幾點(diǎn):</p><p>  1. 作為按鈕出現(xiàn)在主界面上的:開始、分?jǐn)?shù)、幫助、全屏。<

40、/p><p>  2. 能夠直觀顯示在游戲界面上的:各方棋子數(shù)目顯示。</p><p>  第3章 游戲設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  3.1 游戲的設(shè)計(jì)</b></p><p>  3.1.1 游戲的模塊</p><p>  為了實(shí)現(xiàn)黑白棋游戲的開發(fā),通過(guò)流程圖的分析,計(jì)劃采用以下幾大模塊。

41、</p><p>  1、繪圖模塊:本模塊用來(lái)負(fù)責(zé)主界面的繪制,包括棋盤、棋子、棋子個(gè)數(shù)的顯示、以及其它需要顯示的部分。</p><p>  2、人機(jī)模塊:人機(jī)模塊是本程序得以運(yùn)行的基礎(chǔ),并通過(guò)規(guī)則模塊決定能否下子。</p><p>  3、規(guī)則模塊:本模塊主要負(fù)責(zé)判斷下棋是否符合規(guī)則。</p><p>  4、按鍵模塊:本模塊通過(guò)判斷用戶按

42、鍵的位置,判斷出該坐標(biāo)所處棋盤中響應(yīng)位置。</p><p>  3.1.2 游戲功能流程圖</p><p>  程序所需執(zhí)行的流程見(jiàn)圖3.1,該圖表示出了程序執(zhí)行的流程,也基本表示出了程序的各個(gè)模塊和相互關(guān)系,后面的詳細(xì)設(shè)計(jì)和代碼實(shí)現(xiàn),就是基于本圖設(shè)計(jì)的。</p><p>  圖3.1 黑白棋功能流程圖</p><p>  3.1.3 游戲詳

43、細(xì)設(shè)計(jì)</p><p>  在這個(gè)黑白棋游戲中我們對(duì)其作了詳細(xì)設(shè)計(jì),程序沒(méi)有涉及到數(shù)據(jù)庫(kù)方面的知識(shí),其實(shí)現(xiàn)的功能模塊包括:</p><p><b>  游戲棋盤的設(shè)計(jì):</b></p><p>  棋盤由8*8個(gè)方格組成,可用drawRect();方法畫出方格;用for循環(huán)依次畫出8*8個(gè)方格。最初黑棋和白棋各兩顆子占據(jù)一個(gè)方格的對(duì)角線。<

44、;/p><p><b>  棋子的存儲(chǔ):</b></p><p>  將棋盤作為一個(gè)二維數(shù)組,黑棋和白棋賦予不同的值,每落一個(gè)棋子,就將棋子的值存儲(chǔ)在數(shù)組相應(yīng)的位置。新的游戲開始,將所存儲(chǔ)的值清除。</p><p><b>  白棋的落子位置:</b></p><p>  縱觀棋局,尋找落子點(diǎn);<

45、/p><p>  比較各落子點(diǎn)給自己帶來(lái)的收益,選擇最大的落子;</p><p>  在選擇落子點(diǎn)時(shí)會(huì)根據(jù)一些自己的經(jīng)驗(yàn)來(lái)進(jìn)行,比如某一個(gè)點(diǎn)十分重要,則下棋時(shí)會(huì)努力爭(zhēng)奪該點(diǎn),某些點(diǎn)已方占據(jù)后非常不利,則會(huì)極力避免下在該位置</p><p>  通過(guò)計(jì)算機(jī)程序來(lái)模擬人的思考過(guò)程:</p><p>  1、縱觀棋局,尋找落子點(diǎn):</p>

46、<p>  設(shè)定 電腦為:Computer 1 人為: Man 1</p><p>  a.通過(guò)對(duì)當(dāng)前棋盤進(jìn)行搜索,找到已方(Computer)的棋子O,然后對(duì)O進(jìn)行八個(gè)方向的搜索(因?yàn)閷?duì)于一個(gè)點(diǎn)有八個(gè)方向的線段通過(guò)它,如圖) ,找到每個(gè)方向上的落子點(diǎn)(如果有),如此循環(huán)每個(gè)Computer棋子,找到所有的落子點(diǎn),然后將所有點(diǎn)進(jìn)行比較,去掉其中重復(fù)的,最后對(duì)每個(gè)落子點(diǎn)進(jìn)行遞歸搜索,按照合理的估分

47、原則進(jìn)行評(píng)價(jià),得出每個(gè)落子點(diǎn)的價(jià)值(即可獲得的長(zhǎng)期利益),將其進(jìn)行比較,取最大者落子,并改變棋局……</p><p>  b.對(duì)當(dāng)前棋盤進(jìn)行搜索,找到空白點(diǎn)Ox,然后對(duì)Ox進(jìn)八方向搜索,看是否滿足落子條件,即看空白點(diǎn)Ox是否為合乎規(guī)則的落子點(diǎn),如果是,可以進(jìn)行遞歸搜索,得到該點(diǎn)的價(jià)值,然后將所有合乎規(guī)則的Ox進(jìn)行比較,選擇值最大的落子,并改變棋局……</p><p>  c.分析可以發(fā)現(xiàn)總

48、共有50條直線存在落子的可能性,當(dāng)然一條線上存在著多個(gè)落子的可能性??赡芡ㄟ^(guò)對(duì)這50條線的固定搜索,找到可落子點(diǎn),其中也存在著可能重復(fù)的現(xiàn)象,所以要像a方法一樣對(duì)已搜索到的落子點(diǎn)進(jìn)行比較排除,然后對(duì)每個(gè)點(diǎn)進(jìn)行遞歸深入搜索……此方法我們可以在每個(gè)方向上設(shè)定一個(gè)值表示該方向上是否還存在落子可能,當(dāng)顯示不可能時(shí),我們可以跳過(guò),以節(jié)省時(shí)間。</p><p><b>  2、估值系統(tǒng):</b><

49、/p><p>  因?yàn)榇似遄詈笫潜容^看誰(shuí)最后的棋子多誰(shuí)就贏,所以人在選擇落子點(diǎn)的時(shí)候主要是判斷那個(gè)落子點(diǎn)能夠吃到的子最多來(lái)選擇的,每個(gè)點(diǎn)代表的棋面實(shí)際價(jià)值是相同的,所以我們可以設(shè)定每個(gè)棋子的面值均為1,但棋盤上有一些經(jīng)驗(yàn)必爭(zhēng)點(diǎn)Ax,占據(jù)這些點(diǎn)可能帶來(lái)不是一個(gè)或幾個(gè)子的收益,而是關(guān)乎整個(gè)棋局的勝負(fù)(例如,四個(gè)頂點(diǎn)),Ax它具有超過(guò)面值1的戰(zhàn)略意義;而另外一些與必爭(zhēng)點(diǎn)Ax相關(guān)的落子點(diǎn)也根據(jù)其與戰(zhàn)略點(diǎn)Ax位置關(guān)系具有不同于

50、面值的戰(zhàn)略意義,所以整個(gè)估值系統(tǒng)就是要找出各個(gè)點(diǎn)的準(zhǔn)確戰(zhàn)略值x。</p><p>  經(jīng)過(guò)分析,在不同情況下,相同點(diǎn)可能具有不同的戰(zhàn)略意義,所以要列出精確的戰(zhàn)略值可能比較難,只能采用統(tǒng)計(jì)平均值。</p><p>  由于分析上的難度+本人懶惰所以此程序僅采用一個(gè)大概經(jīng)驗(yàn)值,沒(méi)有經(jīng)過(guò)詳細(xì)的統(tǒng)計(jì)分析,相信通過(guò)詳細(xì)的分析后,可以提高AI的思考準(zhǔn)確性……</p><p> 

51、 3、尋找最佳:我們通過(guò)對(duì)落子點(diǎn)進(jìn)行遞歸搜索,并結(jié)合估值系統(tǒng),得到每個(gè)落子點(diǎn)的得分,然后比較選擇最大進(jìn)行落子。</p><p>  3.14 黑白棋開發(fā)環(huán)境</p><p>  操作系統(tǒng):Microsoft Windows XP</p><p>  程序語(yǔ)言:Java </p><p>  開發(fā)平臺(tái):Java Micro Edition&l

52、t;/p><p>  開發(fā)工具:jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe</p><p><b>  3.2 游戲的實(shí)現(xiàn)</b></p><p>  本游戲中用到了兩個(gè)包,javax.microedition.midlet:只能包含一個(gè)MIDlet類,可作為所有MIDlet的父類:jav

53、ax.microedition.lcdui:界面類包,對(duì)GUI組件提供支持。</p><p><b>  1、界面的實(shí)現(xiàn)</b></p><p>  棋盤用drawRect() 方法實(shí)現(xiàn),用for循環(huán)來(lái)畫8*8的棋盤方框</p><p>  背景為一張圖片,用g.drawImage ();方法將背景畫入界面;黑色子和白色棋子的畫法同背景。<

54、;/p><p>  運(yùn)行程序,進(jìn)入游戲的初始界面;點(diǎn)擊按鈕可進(jìn)入相對(duì)應(yīng)的界面。相關(guān)代碼:</p><p>  private void drawReady(){</p><p>  g.setColor(0x0000ff);</p><p>  g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_

55、PLAIN,Font.SIZE_LARGE));</p><p>  g.drawString("黑白棋游戲", getWidth()/2, getHeight()/2,</p><p>  Graphics.BASELINE | Graphics.HCENTER);</p><p>  g.drawString("畢業(yè)設(shè)計(jì)"

56、, getWidth()/2+2*UNITY, getHeight()/2+UNITY,</p><p>  Graphics.BASELINE | Graphics.HCENTER);}</p><p><b>  效果如下圖:</b></p><p>  1、運(yùn)行游戲,游戲進(jìn)入的最初界面,由此界面進(jìn)入游戲的各個(gè)界面。</p>

57、<p>  圖3.2 黑白棋游戲初始界面</p><p>  2、此界面為游戲開始界面,由8*8個(gè)方格組成,黑棋和白棋各兩顆子占據(jù)棋盤中間的一個(gè)方格的對(duì)角線</p><p>  圖3.3 黑白棋游戲開始界面</p><p>  3、幫助界面向玩家說(shuō)明如何通過(guò)按鍵控制下棋。</p><p>  圖3.4 黑白棋游戲的幫助界面</

58、p><p>  4、游戲分?jǐn)?shù)界面在游戲結(jié)束時(shí)自動(dòng)彈出,根據(jù)各方的棋子總數(shù)來(lái)計(jì)算分?jǐn)?shù),在游戲過(guò)程中也可點(diǎn)擊【分?jǐn)?shù)】按鈕查看分?jǐn)?shù)。</p><p>  圖3.5 白棋游戲的分?jǐn)?shù)界面</p><p>  本游戲的重新開始、白棋如何下子、吃子功能的部分代碼如下:</p><p><b>  重新開始的實(shí)現(xiàn):</b></p>

59、;<p>  if(myGameCanvas.restartCommand == c) {</p><p>  myGameCanvas.m_game.m_state = oldState = AllDef.RUN;</p><p>  m_game.m_black.init();</p><p>  m_game.m_white.init();

60、 }</p><p><b>  白子下棋如何下棋:</b></p><p>  以上一個(gè)棋子的位置向八個(gè)方向搜索符合規(guī)則的位置來(lái)下子。如果沿著指定方向,下一個(gè)子的坐標(biāo)過(guò)大或過(guò)小,及超出棋盤范圍,返回false;如果下一個(gè)棋子和要下的棋子是同一種顏色,返回false。部分代碼如下:</p><p>  for(x=1; x<=8; x

61、++){</p><p>  for(y=1; y<=8; y++){</p><p>  if((2==x&&7==y) || (7==x&&2==y) || (2==x&&2==y) || (7==x&&7==y) ||</p><p>  (1==x&&2==y) || (2

62、==x&&1==y) || (1==x&&7==y) || (7==x&&1==y) ||</p><p>  (8==x&&2==y) || (2==x&&8==y) || (8==x&&7==y) || (7==x&&8==y) )</p><p>  { continu

63、e; }</p><p>  if(true==temp[x][y]) {</p><p>  xy[0]= x; xy[1] = y;</p><p>  return xy;</p><p><b>  }</b></p><p><b>  吃子功能:</b>&l

64、t;/p><p>  當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子則將其他的棋子圖片換為我方的圖片</p><p>  private boolean eat(int x, int y, int xChange, int yChange){</p><p>  if(x<1 || x>8 || y<1 || y>8){</p

65、><p>  return AllDef.ERROR; }</p><p>  int xNext = x + xChange;</p><p>  int yNext = y + yChange;</p><p>  while(true){</p><p>  if(xNext<1 || xNext>8 |

66、| yNext<1 || yNext>8||</p><p>  m_bod.getChessMan(xNext, yNext) == null ||</p><p>  m_bod.getChessMan(x+xChange, y+yChange).toBool() == m_turn )</p><p>  { return AllDef.ER

67、ROR;}</p><p><b>  判斷輸贏</b></p><p>  當(dāng)游戲結(jié)束時(shí),用m_game.m_black.getNum() 來(lái)統(tǒng)計(jì)黑棋和白棋各個(gè)的總數(shù),棋子多者為勝。部分代碼如下:</p><p>  if(m_game.m_white.getNum()+m_game.m_black.getNum() == 64){&l

68、t;/p><p>  if(m_game.m_white.getNum() > m_game.m_black.getNum()){</p><p>  msgStr = "白棋贏";</p><p><b>  } }</b></p><p><b>  第4章 游戲測(cè)試</b&g

69、t;</p><p><b>  4.1 系統(tǒng)測(cè)試</b></p><p>  系統(tǒng)測(cè)試的目的主要在于發(fā)現(xiàn)錯(cuò)誤,找出軟件的缺陷和隱患,是確保軟件質(zhì)量的重要方法。在完成黑白棋游戲之后,分別對(duì)游戲中各個(gè)進(jìn)行了測(cè)試,主要是檢驗(yàn)該游戲在各種情況下中的功能能否實(shí)現(xiàn),是否滿足黑白棋游戲規(guī)則的走棋,從而驗(yàn)證該系統(tǒng)確實(shí)符合預(yù)訂的需求。</p><p>  軟件

70、測(cè)試就是在軟件投入運(yùn)行前,對(duì)軟件需求分析、設(shè)計(jì)規(guī)格說(shuō)明和編碼的最終復(fù)查,是軟件質(zhì)量保證的關(guān)鍵步驟。早在1973年, W.Hetael曾經(jīng)指出,測(cè)試是對(duì)程序或系統(tǒng)能否完成特定任務(wù)建立信心的過(guò)程。</p><p>  系統(tǒng)在開發(fā)過(guò)程中采用了多種措施保證軟件質(zhì)量,但是實(shí)際開發(fā)過(guò)程中還是不可避免地會(huì)產(chǎn)生差錯(cuò)。系統(tǒng)中通??赡茈[藏著錯(cuò)誤和缺陷,若將未經(jīng)周密測(cè)試的系統(tǒng)投入運(yùn)行,將會(huì)造成難以想象的后果。因此系統(tǒng)測(cè)試是管理系統(tǒng)開發(fā)

71、過(guò)程中為保證軟件質(zhì)量必須進(jìn)行的工作。大量統(tǒng)計(jì)資料表明,系統(tǒng)測(cè)試的工作量往往占管理系統(tǒng)開發(fā)總工作量的40%以上。因此必須重視測(cè)試工作。</p><p>  4.1.1 測(cè)試方法</p><p>  系統(tǒng)測(cè)試一般有白盒測(cè)試與黑盒測(cè)試兩種方法??紤]到各種因素和條件的限制,我們決定采用黑盒測(cè)試方案。黑盒測(cè)試注重于測(cè)試軟件的功能性需求,也就是說(shuō)黑盒測(cè)試要求軟件工程師列出程序所有功能需求的輸入條件。通

72、過(guò)黑盒測(cè)試,我們能發(fā)現(xiàn)一些平時(shí)不能發(fā)現(xiàn)的細(xì)節(jié)性錯(cuò)誤。</p><p>  4.1.2 測(cè)試用例及結(jié)果</p><p>  黑白棋功能測(cè)試用例見(jiàn)表4.1:</p><p>  表4.1 黑白棋游戲功能測(cè)試用例集</p><p>  4.1.3游戲的發(fā)布</p><p>  1、找到項(xiàng)目文件夾并打開。</p>

73、<p>  2、打開dist文件夾找到一個(gè)與項(xiàng)目名相同的Jar文件。</p><p>  3、將dist文件夾里名的Jar文件拷入手機(jī)</p><p>  4、安裝Jar文件即可。</p><p><b>  總 結(jié)</b></p><p>  通過(guò)這次畢業(yè)設(shè)計(jì),對(duì)很多東西有了新的認(rèn)識(shí)和新的見(jiàn)解,認(rèn)識(shí)問(wèn)題的

74、和思考解決辦法有了本質(zhì)上的進(jìn)步,特別是對(duì)一個(gè)游戲開發(fā)的模式有了更深的認(rèn)識(shí),對(duì)專業(yè)技能的運(yùn)用更熟練。我覺(jué)得對(duì)自己有很大提高克服了自己粗心大意的老毛病這對(duì)我以后的學(xué)習(xí)和工作有很大的幫助。我感受到了編程是一項(xiàng)非常煩瑣周密的活動(dòng)它不但需要一個(gè)人周密的思考問(wèn)題的能力處理問(wèn)題的能力還需要有足夠的耐心和嚴(yán)謹(jǐn)治學(xué)的作風(fēng)來(lái)不得半點(diǎn)馬虎。 通過(guò)本次論文設(shè)計(jì)我初步學(xué)會(huì)了論文設(shè)計(jì)的基本方法學(xué)會(huì)了怎樣去借鑒別人的方法和經(jīng)驗(yàn)知道如何去查找資料和整

75、合處理這些資料的能力這為以后的寫論文打下了一個(gè)初步的基礎(chǔ)使我收益最大的是享受到了一種成功的喜悅。</p><p>  在這半學(xué)期之中從開始的確定論文題目然后是上網(wǎng)和上圖書館查找資料編寫java語(yǔ)言源程序然后是進(jìn)行編譯這個(gè)環(huán)節(jié)是一個(gè)非常艱難的,常常會(huì)因?yàn)橐恍↑c(diǎn)的錯(cuò)誤而在編譯失敗與再次修改的漫漫循環(huán)之路中但失敗的越多對(duì)人的考驗(yàn)就越多在編譯運(yùn)行成功之后的享受成功的喜悅也就越多另外在調(diào)試程序的過(guò)程中

76、不斷的思考和運(yùn)用已經(jīng)學(xué)到的知識(shí)這對(duì)于自己是有很大的提高的。</p><p><b>  致 謝</b></p><p>  必須感謝老師對(duì)我學(xué)習(xí)的支持,精神的支持。沒(méi)有他們的汗水,我是無(wú)法完成大專的學(xué)業(yè)的。</p><p>  感謝我的指導(dǎo)老師:孫老師;孫老師嚴(yán)謹(jǐn)求實(shí)、謙遜和藹、平易近人、處處為學(xué)生著想,令我敬佩。如果沒(méi)老師的悉心指導(dǎo)也不會(huì)

77、順利完成不也設(shè)計(jì)。</p><p>  感謝三年來(lái)教我知識(shí)的其他老師,在即將完成學(xué)業(yè)的時(shí)刻,我向所有教過(guò)我的老師表示衷心的感謝和崇高的敬意。</p><p>  感謝同組的同學(xué),雖然我們的畢業(yè)設(shè)計(jì)是彼此獨(dú)立開發(fā),但在畢業(yè)設(shè)計(jì)期間,經(jīng)常和他一起討論,相處的很融洽。</p><p>  感謝所有幫助過(guò)我的其他人。三年的大專求學(xué)生涯在這段期間得到了很多人的關(guān)懷和幫助,沒(méi)有

78、他們的關(guān)懷和幫助很難想象能順利完成學(xué)業(yè)。</p><p>  感謝互聯(lián)網(wǎng)上的前輩們,為我樹立了榜樣,同時(shí)留下了可供我參考的寶貴的資料和程序。</p><p>  最后,再次對(duì)關(guān)心、幫助我的老師和同學(xué)表示衷心地感謝。 由于我的水平有限,論文難免出現(xiàn)差錯(cuò)和遺漏,敬請(qǐng)老師批評(píng)指正。</p><p><b>  參 考 文 獻(xiàn)</b></p>

79、;<p>  [1] George F.Luger Artificial Intelligence: Structures and Strategies for Complex Problem Solving Addison Wesley[M].2001-7.[2] Mat Buckland.Ai Techniques For Game Programming[M].Premier Press.2002.[3] 張海藩

80、.軟件工程導(dǎo)論(第四版)[M]. 北京:清華大學(xué)出版社 2003-12.[4] 張宏林.數(shù)字圖像分析與處理技術(shù)[M].北京:人民郵電出版社 2003-2.[5] 棋類游戲的智能模塊設(shè)計(jì)――淺談人工智能[J].2004-09.[6] 蔡自興,徐光祐.人工智能及其應(yīng)用(第三版)[M].北京:清華大學(xué)出版社.2003-9.[7] 杜秀全,程家興.博弈算法在黑白棋中的應(yīng)用[J].2003.[8] 王小春.java me游戲編程(人機(jī)博

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論