2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)論文(設(shè)計(jì))</p><p>  題目: 基于Java的中國象棋游戲設(shè)計(jì) </p><p>  學(xué)院: 計(jì)算機(jī)科學(xué)學(xué)院 </p><p>  班級(jí): 08級(jí)計(jì)算機(jī)本科一班 </p><p>  姓名: *** </p&g

2、t;<p>  指導(dǎo)教師: *** 職稱: 講師 </p><p>  完成日期: 2012 年 月 日</p><p>  基于Java的中國象棋游戲設(shè)計(jì)</p><p>  摘要:隨著社會(huì)的發(fā)展,科學(xué)技術(shù)不斷提高,人們的娛樂活動(dòng)不斷地增加,中國象棋作為中華民族的傳統(tǒng)文化,不僅在國內(nèi)深受群眾喜愛,而且流傳國外。開發(fā)中國象棋游

3、戲軟件,推廣我們傳統(tǒng)的象棋文化。本文通過運(yùn)用Java語言、軟件工程的知識(shí),參考網(wǎng)上一些文獻(xiàn)資料的設(shè)計(jì)思路,開發(fā)出中國象棋對(duì)弈游戲系統(tǒng),程序?qū)崿F(xiàn)了游戲計(jì)時(shí)、悔棋、和棋、認(rèn)輸?shù)裙δ?。通過對(duì)系統(tǒng)進(jìn)行詳細(xì)地需求分析,設(shè)計(jì)出了系統(tǒng)的邏輯模型,并且對(duì)各個(gè)功能進(jìn)行了詳細(xì)的分析,對(duì)中國象棋規(guī)則進(jìn)行了詳細(xì)地算法描述,最后對(duì)該程序的功能進(jìn)行了測(cè)試與總結(jié)。</p><p>  關(guān)鍵詞:JAVA;中國象棋;對(duì)弈;游戲</p>

4、<p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 項(xiàng)目開發(fā)的背景及意義1</p><p>  1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)1</p><p>  1.3 研究目標(biāo)1</p><p><b

5、>  2 可行性研究2</b></p><p>  2.1 技術(shù)可行性2</p><p>  2.1.1 使用java技術(shù)的優(yōu)點(diǎn)2</p><p>  2.1.2 Eclipse簡(jiǎn)介3</p><p>  2.2 經(jīng)濟(jì)可行性3</p><p>  2.3 社會(huì)可行性3</p>

6、<p>  3 需求分析及總體設(shè)計(jì)4</p><p>  3.1 需求分析4</p><p>  3.2 總體設(shè)計(jì)4</p><p>  3.2.1 總體結(jié)構(gòu)設(shè)計(jì)4</p><p>  3.2.2 棋盤棋子的設(shè)計(jì)5</p><p>  3.3 類圖說明6</p><p>

7、<b>  4 詳細(xì)設(shè)計(jì)9</b></p><p>  4.1 程序流程設(shè)計(jì)9</p><p>  4.2 開始游戲設(shè)計(jì)9</p><p>  4.3 功能設(shè)計(jì)12</p><p>  4.3.1 計(jì)時(shí)功能12</p><p>  4.3.2 悔棋功能12</p><

8、;p>  4.3.3 求和和認(rèn)輸12</p><p>  4.3.4 信息幫助13</p><p>  4.4 界面設(shè)計(jì)14</p><p>  4.5 走棋和吃棋規(guī)則設(shè)計(jì)14</p><p>  5 系統(tǒng)測(cè)試與總結(jié)16</p><p>  5.1 系統(tǒng)測(cè)試16</p><p>

9、;  5.1.1 系統(tǒng)功能測(cè)試16</p><p>  5.1.2 運(yùn)行效果測(cè)試17</p><p>  5.2 總結(jié)與展望18</p><p><b>  參考文獻(xiàn)20</b></p><p><b>  1 緒論</b></p><p>  1.1 項(xiàng)目開發(fā)的背景

10、及意義</p><p>  隨著電子信息技術(shù)的不斷發(fā)展以及網(wǎng)絡(luò)技術(shù)的普及,網(wǎng)絡(luò)能夠提供多樣、便捷的服務(wù),已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡(luò)休閑游戲發(fā)展非常迅猛,它憑借健康、方便、益智、互動(dòng)性強(qiáng)等諸多優(yōu)點(diǎn),成為大眾休閑娛樂的首選。</p><p>  作為中華民族悠久文化的代表之一,中國象棋不僅源遠(yuǎn)流長(zhǎng),而且基礎(chǔ)廣泛,作為一項(xiàng)智力運(yùn)動(dòng),中國象棋不僅能豐富人們文化生活,陶冶

11、情操,而且有助于開發(fā)智力,啟迪思維,培養(yǎng)人的品格。弈棋可磨練意志,錘煉品質(zhì),塑造性格,陶冶情操,中國象棋是中國文化的縮影,是中華民族智慧的反映。中國象棋的規(guī)則的復(fù)雜性是社會(huì)復(fù)雜性在中國象棋游戲中的一個(gè)反映。</p><p>  通過Java技術(shù)開發(fā)中國象棋游戲系統(tǒng),以便于與時(shí)俱進(jìn),將中國象棋運(yùn)用于計(jì)算機(jī)等電子設(shè)備,實(shí)現(xiàn)中國象棋對(duì)弈系統(tǒng),為象棋在網(wǎng)絡(luò)應(yīng)用平臺(tái)提供多人對(duì)弈。</p><p> 

12、 1.2 研究現(xiàn)狀及發(fā)展趨勢(shì)</p><p>  象棋游戲軟件現(xiàn)在有騰訊象棋、JJ象棋、象棋巫師等游戲軟件;騰訊象棋和JJ象棋是網(wǎng)絡(luò)對(duì)弈游戲。</p><p>  現(xiàn)在的棋盤類軟件有很多,大多數(shù)都是游戲?qū)?zhàn)平臺(tái)的網(wǎng)絡(luò)對(duì)弈軟件;如騰訊QQ象棋、JJ象棋等網(wǎng)絡(luò)對(duì)弈游戲。在文獻(xiàn)[7]中提到的象棋巫師等。在文獻(xiàn)[5]中提到五子棋、國際象棋等棋類的計(jì)算機(jī)博弈已經(jīng)取得了成功,但規(guī)則更加復(fù)雜的中國象棋電

13、子計(jì)算機(jī)博弈尚處于萌芽階段。棋盤類游戲?qū)⑾蚨嗥脚_(tái)、智能化方向發(fā)展。</p><p><b>  1.3 研究目標(biāo)</b></p><p>  此項(xiàng)目主要應(yīng)用于中國象棋對(duì)弈軟件,本文針對(duì)的是雙人的對(duì)弈,能夠運(yùn)用該軟件進(jìn)行象棋對(duì)弈。實(shí)現(xiàn)對(duì)弈計(jì)時(shí)、悔棋、和棋、認(rèn)輸?shù)裙δ堋?lt;/p><p><b>  2 可行性研究</b><

14、;/p><p>  可行性研究的目的,就是以最小的代價(jià)、在盡量短的時(shí)間內(nèi)確定問題是否能夠被解決。因此,必須客觀的分析問題,找出主要的可能解決法,然后從系統(tǒng)邏輯模型出發(fā),分析若干種主要的解法,研究每種解法的可行性,從而最終確定這項(xiàng)工程的可行性。</p><p><b>  2.1 技術(shù)可行性</b></p><p>  Java是Sun Micros

15、ystem公司開發(fā)的編程語言,Java語言具有高效性、通用性、平臺(tái)移植性和安全性等特點(diǎn)。運(yùn)用Eclipse軟件進(jìn)行編寫,并進(jìn)行編譯執(zhí)行。</p><p>  2.1.1使用Java技術(shù)的優(yōu)點(diǎn)</p><p>  Java是非常新的一種語言,具有面向?qū)ο?、分布式、解釋?zhí)行、體系結(jié)構(gòu)中立、可移植、多線程、以及動(dòng)態(tài)性等特點(diǎn)。和其他編程語言相比,它有很多優(yōu)點(diǎn)。使用Java語言的主要優(yōu)點(diǎn)體現(xiàn)在以下幾

16、個(gè)方面:</p><p><b>  (1)靈活性</b></p><p>  Java語言是非常靈活的,它支持部署和開發(fā)環(huán)境中的各種變化。因?yàn)镴ava是在面向?qū)ο蟮幕A(chǔ)平臺(tái)上構(gòu)建的,故其很容易對(duì)基本的語言進(jìn)行擴(kuò)展和發(fā)布。</p><p>  (2)廠商的廣泛支持</p><p>  采用Java有一個(gè)非常重要的原因,就

17、是受到了廠商的廣泛支持。Java不僅僅只有一個(gè)主要的供應(yīng)商,有許多公司都生產(chǎn)、支持Java產(chǎn)品。</p><p>  (3)用戶的廣泛支持</p><p>  Java語言具有良好的用戶基礎(chǔ),它們并不局限于某一個(gè)特定的公司。在Internet上,有許多資源以及Java示例代碼。另外,Java程序員還可以使用許多免費(fèi)軟件或共享軟件和許多應(yīng)用程序代碼。</p><p>

18、<b>  (4)平臺(tái)獨(dú)立性</b></p><p>  Java源代碼和運(yùn)行時(shí)的文件與操作系統(tǒng)無關(guān),可以支持多個(gè)操作系統(tǒng)。因此,在Windows環(huán)境中創(chuàng)建并編譯Java類文件,無需任何修改就可以將其部署到Linux環(huán)境中。Java的這種特性,也稱為可移植性,這一點(diǎn)使得Java開發(fā)更加方便,對(duì)于那些需要一個(gè)特定操作系統(tǒng)、又需要支持其他操作系統(tǒng)的企業(yè)來說是非常重要。</p>&l

19、t;p>  2.1.2 Eclipse簡(jiǎn)介</p><p>  Eclipse 是一個(gè)基于 Java 的可擴(kuò)展開發(fā)平臺(tái)。它本身只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。 Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE

20、),該組件主要是針對(duì)希望擴(kuò)展 Eclipse 的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。</p><p>  Eclipse這樣功能完整且成熟的開發(fā)環(huán)境,大部分的開發(fā)掌握在IBM手中,但是有一部份是由eclipse.org的軟件聯(lián)盟主導(dǎo)。</p><p>  Eclipse使用開放原始碼許可書,即用公共公眾許可書Common Public License(C

21、PL)作為授權(quán)方式,設(shè)計(jì)上是可以容許商業(yè)利益的。CPL可以容許Eclipse和其它開放原始碼軟件合組時(shí),能夠用更加嚴(yán)謹(jǐn)?shù)脑S可書散布軟件,可以用于商業(yè)途徑。CPL經(jīng)過Open Software Initiative(OSI)認(rèn)證,其內(nèi)容符合開放原始碼授權(quán)的需求。</p><p><b>  2.2 經(jīng)濟(jì)可行性</b></p><p>  經(jīng)濟(jì)可行性分析是指進(jìn)行成本與效益

22、的核算分析,從經(jīng)濟(jì)角度判斷開發(fā)該系統(tǒng)的預(yù)期經(jīng)濟(jì)效益能否超過它的開發(fā)成本。當(dāng)系統(tǒng)開發(fā)人員接受開發(fā)任務(wù)時(shí),首要研究開發(fā)任務(wù),判斷是否具有簡(jiǎn)單明確合理可行的解決辦法。其實(shí),有許多不可能在預(yù)期的規(guī)模內(nèi)解決的問題,如果某些問題無法很好的解決,那么花費(fèi)在該項(xiàng)工程上的任何時(shí)間、資源和經(jīng)費(fèi)都是浪費(fèi)的。因此可行性分析必不可少。</p><p>  該系統(tǒng)的開發(fā)運(yùn)用Java開發(fā)環(huán)境Eclipse來完成,參考圖書及網(wǎng)上相關(guān)資料,由自己

23、獨(dú)立開發(fā)完成,在經(jīng)濟(jì)方面成本可自己承擔(dān),具有一定的經(jīng)濟(jì)可行性。</p><p><b>  2.3 社會(huì)可行性</b></p><p>  隨著計(jì)算機(jī)科技的發(fā)展,個(gè)人計(jì)算機(jī)的普及,越來越多的人們接觸并使用計(jì)算機(jī),現(xiàn)今普通人也能熟練地使用計(jì)算機(jī),并習(xí)慣使用計(jì)算機(jī)通過網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)工作和娛樂活動(dòng),這樣更有利于人力資源的有效利用。而且該程序的簡(jiǎn)單易用,使得人們能夠使用該程序進(jìn)

24、行對(duì)弈。</p><p>  3 需求分析及總體設(shè)計(jì)</p><p><b>  3.1 需求分析</b></p><p>  該程序需要實(shí)現(xiàn)象棋游戲的以下幾個(gè)基本功能:</p><p>  (1)開始游戲/重新開始:開始一局新的象棋對(duì)弈;</p><p> ?。?)計(jì)時(shí):設(shè)置走棋時(shí)間限制和棋局的

25、時(shí)間限制;</p><p>  (3)悔棋:將棋子返回到之前所處的位置;</p><p> ?。?)求和和認(rèn)輸:將雙方協(xié)商棋局為和棋,或一方認(rèn)輸結(jié)束棋局;</p><p> ?。?)退出:退出本程序;</p><p> ?。?)提示:顯示出象棋的走棋、贏棋規(guī)則。</p><p><b>  3.2 總體設(shè)計(jì)&

26、lt;/b></p><p>  3.2.1 總體結(jié)構(gòu)設(shè)計(jì)</p><p>  中國象棋軟件的總體結(jié)構(gòu)層次方框圖如圖3-1所示。</p><p>  圖3-1 層次方框圖</p><p>  3.2.2 棋盤棋子的設(shè)計(jì)</p><p>  打開程序后顯示棋盤界面如圖3-2所示。</p><p&

27、gt;  圖3-2 棋盤界面</p><p>  棋盤是棋子的活動(dòng)位置棋子活動(dòng)的場(chǎng)所。在長(zhǎng)方形的平面上,由九豎線和十條橫線相交組成,共有九十個(gè)交叉點(diǎn),棋子擺在交叉點(diǎn)上。</p><p>  中間部分,即棋盤的第五和第六兩橫線之間末畫豎線的空白地帶稱為“楚河漢界”,也稱“河界”。兩端的中間,以斜交叉線構(gòu)成“米”字方格的地方,叫作“九宮”(它共有九個(gè)交叉點(diǎn))。開始游戲后調(diào)入棋子后界面如圖3-

28、3。</p><p>  圖3-3 棋子調(diào)入界面</p><p>  棋子共有三十二個(gè),分為紅、黑兩組,各有十六個(gè),由對(duì)弈的雙方各執(zhí)一組。兵種是一樣的,分為七種:將(帥)、仕、象(相)、車、馬、炮、卒(兵)。</p><p>  紅方持有棋子:一個(gè)帥,仕、相、車、馬、炮各有兩個(gè),五個(gè)兵。</p><p>  黑方持有棋子:一個(gè)將,士、象、車

29、、馬、炮各有兩個(gè),五個(gè)卒。</p><p>  其中帥與將;仕與士;相與象;兵與卒的作用完全相同,僅僅是區(qū)別紅棋和黑棋。 </p><p><b>  3.3 類圖說明</b></p><p>  該程序的所包含的類如圖3-4所示,層次結(jié)構(gòu)如圖3-5所示。</p><p><b>  圖3-4 類圖</

30、b></p><p>  圖3-5 層次結(jié)構(gòu)圖</p><p>  在圖3-4中,zgxq包內(nèi)的XQJFrame.java與ZGXQ.java是本程序的源代碼文件;image中的棋子圖片,及Rule.txt象棋規(guī)則說明文件是程序中所調(diào)用的。</p><p>  圖3-5所示的是本項(xiàng)目的層次結(jié)構(gòu)圖,顯示了本項(xiàng)目中的類及其所用方法的層次結(jié)構(gòu)。</p>

31、<p>  層次結(jié)構(gòu)圖表示的是程序系統(tǒng)中運(yùn)用的方法、函數(shù)的層次結(jié)構(gòu),顯示了它們的層次關(guān)系。</p><p>  XQJFrame.java中的方法大綱如圖3-6所示,圖3-6中(a)的最后與(b)的最前面相聯(lián)。</p><p>  圖3-6(a)方法大綱圖3-6(b)方法大綱</p><p>  圖3-6中(a)和(b)所示的是本項(xiàng)目的大綱,“導(dǎo)

32、入聲明”是本程序中調(diào)用的Java自帶的方法;“XQJFrame”是本程序中運(yùn)用的參數(shù),及方法的屬性和順序。</p><p><b>  4 詳細(xì)設(shè)計(jì)</b></p><p>  4.1 程序流程設(shè)計(jì)</p><p>  程序的主體流程圖如圖4-1所示。</p><p>  該流程圖是在不悔棋、求和、認(rèn)輸?shù)那闆r下的流程,若

33、進(jìn)行悔棋、求和等操作,則執(zhí)行悔棋、求和的方法。</p><p>  圖4-1 程序流程圖</p><p>  4.2 開始游戲設(shè)計(jì)</p><p>  打開程序后,點(diǎn)擊開始,彈出詢問對(duì)話框(如圖4-2),確定后,彈出局時(shí)和步時(shí)的設(shè)置界面(如圖4-3,圖4-4),設(shè)置好后開始游戲(如圖3-3)。</p><p>  圖 4-2 對(duì)話框<

34、;/p><p>  圖4-3 局時(shí)設(shè)置</p><p>  圖4-4 步時(shí)設(shè)置</p><p>  局時(shí)是限制一盤棋的時(shí)間,時(shí)間到時(shí)就會(huì)結(jié)束該局;步時(shí)是限制走一步棋所用的時(shí)間,當(dāng)一方走棋超時(shí)時(shí),則認(rèn)定該方放棄走棋,該方認(rèn)輸,對(duì)方獲勝。</p><p><b>  代碼如下:</b></p><p>

35、;  if (e.getSource() == anew) { // 新游戲(N)</p><p>  int temp = JOptionPane.showConfirmDialog(this, "是否開始新游戲?", "新游戲",</p><p>  JOptionPane.YES_NO_OPTION);</p><p&g

36、t;  if (temp == JOptionPane.YES_OPTION) {</p><p>  // 或者temp==0,表示點(diǎn)擊"是(Y)";temp==1,表示點(diǎn)擊"否(N)"</p><p>  int count = 0;// 記錄點(diǎn)擊了幾次取消或者幾次沒有輸入值</p><p>  String inpu

37、t1 = (String) JOptionPane.showInputDialog(this,</p><p>  "設(shè)定局時(shí)為(單位:分鐘,如果輸入0,則表示沒有局時(shí)限制):", "局時(shí)設(shè)置",</p><p>  JOptionPane.PLAIN_MESSAGE, null, null, "0");</p>&

38、lt;p><b>  // 輸入局時(shí)</b></p><p>  String ssJtime;</p><p>  if (Jtime == 0)// 輸入數(shù)值為0</p><p>  ssJtime = "無限制";</p><p><b>  else</b>&l

39、t;/p><p>  ssJtime = Jtime / 3600 + "小時(shí)"</p><p>  + (Jtime / 60 - Jtime / 3600 * 60) + "分"</p><p>  + (Jtime - Jtime / 60 * 60) + "秒";</p><p>

40、;  if (input1 == null || input1.equals("")) {// 未輸入數(shù)值</p><p>  JOptionPane.showConfirmDialog(this, "沒有設(shè)置局時(shí),局時(shí)為" + ssJtime,</p><p>  "游戲信息", JOptionPane.DEFAULT_OP

41、TION,</p><p>  JOptionPane.WARNING_MESSAGE);</p><p><b>  count++;</b></p><p>  } else if (Integer.parseInt(input1) < 0) {// 輸入數(shù)值為負(fù)數(shù)</p><p>  JOptionPan

42、e.showConfirmDialog(this, "不能輸入負(fù)值,局時(shí)為" + ssJtime,</p><p>  "游戲信息", JOptionPane.DEFAULT_OPTION,</p><p>  JOptionPane.WARNING_MESSAGE);</p><p><b>  count++;&

43、lt;/b></p><p><b>  } else</b></p><p>  Jtime = Integer.parseInt(input1) * 60;</p><p>  String input2 = (String) JOptionPane.showInputDialog(this,</p><p>

44、  "設(shè)定步時(shí)為(單位:秒鐘,如果輸入0,則表示沒有步時(shí)限制):", "步時(shí)設(shè)置",</p><p>  JOptionPane.PLAIN_MESSAGE, null, null, "0");</p><p>  String ssBtime;</p><p>  if (Btime == 0)//

45、 輸入數(shù)值為0</p><p>  ssBtime = "無限制";</p><p><b>  else</b></p><p>  ssBtime = Btime / 3600 + "小時(shí)"</p><p>  + (Btime / 60 - Btime / 3600 * 60

46、) + "分"</p><p>  + (Btime - Btime / 60 * 60) + "秒";</p><p>  if (input2 == null || input2.equals("")) {// 未輸入數(shù)值</p><p>  JOptionPane.showConfirmDialo

47、g(this, "沒有設(shè)置步時(shí),步時(shí)為" + ssBtime,</p><p>  "游戲信息", JOptionPane.DEFAULT_OPTION,</p><p>  JOptionPane.WARNING_MESSAGE);</p><p><b>  count++;</b></p>

48、;<p>  } else if (Integer.parseInt(input2) < 0) {// 輸入的數(shù)值為負(fù)值</p><p>  JOptionPane.showConfirmDialog(this, "不能輸入負(fù)值,步時(shí)為" + ssBtime,</p><p>  "游戲信息", JOptionPane.DEF

49、AULT_OPTION,</p><p>  JOptionPane.WARNING_MESSAGE);</p><p><b>  count++;</b></p><p><b>  } else</b></p><p>  Btime = Integer.parseInt(input2);&l

50、t;/p><p>  Game_begin();</p><p><b>  }</b></p><p><b>  4.3 功能設(shè)計(jì)</b></p><p>  4.3.1 計(jì)時(shí)功能</p><p>  打開游戲,再開始游戲前,進(jìn)行局時(shí)和步時(shí)的設(shè)置(如圖4-3,圖4-4),局時(shí)

51、是限制一盤棋的時(shí)間,時(shí)間到時(shí)就會(huì)結(jié)束該局;步時(shí)是限制走一步棋所用的時(shí)間,當(dāng)一方走棋超時(shí)時(shí),則認(rèn)定該方放棄走棋,該方認(rèn)輸,對(duì)方獲勝。</p><p>  局時(shí)和步時(shí)設(shè)置時(shí),需要輸入自然數(shù),局時(shí)是分鐘數(shù),步時(shí)是秒數(shù);當(dāng)數(shù)值設(shè)置為0時(shí),默認(rèn)為沒有時(shí)間限制。</p><p>  運(yùn)用Thread方法定義局時(shí)、步時(shí)倒計(jì)時(shí)線程,“int Jtime = 0, Btime = 0;”定義局時(shí)、步時(shí)限制。

52、“int jtime;int Rbtime, Bbtime;”顯示雙方的局時(shí)、步時(shí)的剩余時(shí)間。用setBounds()設(shè)置雙方局時(shí)、步時(shí)在界面上的顯示位置。</p><p>  開始游戲后,設(shè)置局時(shí)、步時(shí),啟動(dòng)局時(shí)、步時(shí)倒計(jì)時(shí)線程。當(dāng)局時(shí)或步時(shí)完畢時(shí),結(jié)束進(jìn)程,并結(jié)束游戲。</p><p>  4.3.2 悔棋功能</p><p>  悔棋,是在誤操作和失誤的情

53、況下,兩方協(xié)商同意后返回到之前的狀態(tài)。</p><p>  定義Vector Var,保存棋子的動(dòng)作;定義悔棋方法“huiqi(int n)”。開始游戲后,當(dāng)某方點(diǎn)擊悔棋按鈕時(shí),該哪方走棋則認(rèn)為是那方要求悔棋;由另一方同意悔棋后,執(zhí)行“huiqi(int n)”方法,返回到該方前一步走棋狀態(tài),繼續(xù)由該方走棋,并刪除Var中相應(yīng)的記錄。</p><p>  4.3.3 求和和認(rèn)輸<

54、/p><p>  求和,是在一方認(rèn)為都無法戰(zhàn)勝對(duì)手時(shí),提出求和,另一方同意后,判定為該局為和棋,游戲結(jié)束。</p><p>  認(rèn)輸,是一方在走投無路,或自認(rèn)為自己一定會(huì)輸時(shí),主動(dòng)認(rèn)輸,則判定對(duì)方獲勝,游戲結(jié)束。</p><p><b>  代碼如下:</b></p><p>  if (e.getSource() == q

55、iuhe) { // 求和(P)</p><p>  String s1 = null, s2 = null; // s1表示當(dāng)前走棋的玩家,s2表示另一方</p><p>  if (player == 1) {// 紅方走棋,紅方點(diǎn)的求和</p><p>  s1 = "紅方";</p><p>  s

56、2 = "黑方";</p><p>  } else {// player==2,黑方走棋,黑方點(diǎn)的求和</p><p>  s1 = "黑方";</p><p>  s2 = "紅方";</p><p><b>  }</b></p>

57、<p>  int temp1 = JOptionPane.showConfirmDialog(this, s1 + "確認(rèn)求和?", "求和",</p><p>  JOptionPane.YES_NO_OPTION);</p><p>  if (temp1 == JOptionPane.YES_OPTION) {</p>

58、<p>  int temp2 = JOptionPane.showConfirmDialog(this, s1 + "求和," + s2</p><p>  + "是否同意和棋?", "和棋", JOptionPane.YES_NO_OPTION);</p><p>  if (temp2 == JOptionPan

59、e.YES_OPTION) {</p><p>  // 一方求和,另一方同意,雙方和棋,游戲結(jié)束。</p><p>  Game_over();</p><p>  message.setText(null);</p><p>  message.setForeground(g);</p><p>  message

60、.setText("雙方和棋!");</p><p><b>  }</b></p><p><b>  }</b></p><p>  } else if (e.getSource() == renshu) { // 認(rèn)輸(L)</p><p>  String s1 = nu

61、ll, s2 = null; // s1表示當(dāng)前走棋的玩家,s2表示另一方</p><p>  if (player == 1) { // 紅方走棋,紅方點(diǎn)的認(rèn)輸</p><p>  s1 = "紅方";</p><p>  s2 = "黑方";</p><p>  message.setTex

62、t(null);</p><p>  message.setForeground(b);</p><p>  } else { // player==2,黑方走棋,黑方點(diǎn)的認(rèn)輸</p><p>  s1 = "黑方";</p><p>  s2 = "紅方";</p><p

63、>  message.setText(null);</p><p>  message.setForeground(r);}</p><p>  Game_over();</p><p>  JOptionPane.showConfirmDialog(this, s1 + "認(rèn)輸," + s2 + "獲勝!",</

64、p><p>  "獲勝", JOptionPane.DEFAULT_OPTION,</p><p>  JOptionPane.WARNING_MESSAGE);</p><p>  message.setText(s2 + "獲勝!");</p><p><b>  }</b><

65、;/p><p>  4.3.4 信息幫助</p><p>  信息幫助,是介紹中國象棋的基本走棋、吃棋和規(guī)則說明。</p><p><b>  4.4 界面設(shè)計(jì)</b></p><p>  該程序界面包括:菜單欄,信息提示,棋盤界面,計(jì)時(shí)器界面和棋子。</p><p>  菜單欄包括:開始、悔棋、求和

66、、認(rèn)輸、幫助、退出。菜單欄如圖4-5所示。</p><p>  菜單欄運(yùn)用JMenuBar、JButton方法定義,并放置界面的頂端;用ActionListener方法設(shè)置按鍵監(jiān)聽。</p><p><b>  圖4-5 菜單欄</b></p><p>  信息提示:是用JLabel方法顯示玩家走棋、悔棋、贏棋等信息;置于菜單欄下面,并設(shè)置字

67、體的類型、顏色和大小。</p><p>  棋盤界面:在菜單欄下面添加棋盤圖片,設(shè)置棋盤位置(如圖3-2),并添加鼠標(biāo)監(jiān)聽。棋盤由九豎十橫的直線交叉組成,直線的交叉點(diǎn)稱為棋點(diǎn)。棋盤上共有九十個(gè)棋點(diǎn),象棋子擺在和活動(dòng)在這些棋點(diǎn)上。棋盤中間沒有線的空白地方,叫做“楚河漢界”;劃有斜交叉線的地方,叫做“九宮”。</p><p>  計(jì)時(shí)器界面:在棋盤的右側(cè),顯示出開始游戲設(shè)置的局時(shí)和步時(shí),并設(shè)置

68、字體的類型、顏色和大小。</p><p>  棋子:開始游戲,通過調(diào)用棋子圖片,顯示在棋盤上(如圖3-3);定義數(shù)組qx[],qy[]保存棋子在棋盤上的坐標(biāo)。棋子共有三十二個(gè),分為紅棋、黑棋兩組,每組各有七種,十六個(gè),其名稱和數(shù)目如下:紅棋子:“帥”一個(gè),“車、馬、炮、相、仕”各兩個(gè),“兵”五個(gè)。 黑棋子:“將”一個(gè),“車、馬、炮、象、士”各兩個(gè),“卒”五個(gè)。</p><p>  4.5

69、走棋和吃棋規(guī)則設(shè)計(jì)</p><p>  對(duì)局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一步,直至分出勝、負(fù)、和,對(duì)局即結(jié)束。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)移動(dòng)到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子占領(lǐng)其棋點(diǎn),算走了一步。雙方各走一步,稱為一個(gè)回合。</p><p>  走棋:帥(將)每一步只許走一格,前進(jìn)、后退、橫走都可以,但不能走出“九宮”。將和帥不允許在同一豎線上直接對(duì)面。</p

70、><p>  士每一步只許沿“九宮”斜線走一格,可進(jìn)可退。</p><p>  相(象)不能越過“河界”,每一步斜走兩格,可進(jìn)可退,即俗稱“相(象)走田”。若田字中心有棋子,則不許走過去。</p><p>  馬每一步走日字的對(duì)角點(diǎn),可進(jìn)可退,即俗稱“馬走日”。如果在要去的方向有棋子擋住,俗稱“蹩馬腿”,不允許走過去。</p><p>  車每一

71、步沿著橫線或豎線直走,不限格數(shù)。</p><p>  炮在不吃棋子的時(shí)候,走法同車一樣。</p><p>  兵(卒)在沒有過“河界”前,每步只許向前直走一格;過“河界”后,每步可向前直走或橫走一格,但不能后退。</p><p>  走棋和吃棋的流程圖如圖4-6所示。</p><p>  圖4-6 走棋和吃棋流程圖</p>&l

72、t;p>  注:圖4-6是走棋和吃棋流程圖,圖中①連接總體流程。</p><p>  吃棋:走一步棋時(shí),除炮以外,如果己方棋子可以走到的位置上有對(duì)方棋子存在,就可以把對(duì)方棋子吃掉而占領(lǐng)那個(gè)位置。炮吃子時(shí)必須隔一個(gè)棋子跳吃,即俗稱“炮隔山打”。吃子的一方,把被吃掉的棋子移走。</p><p>  在鼠標(biāo)點(diǎn)擊監(jiān)聽“mouseClicked(MouseEvent e)”方法中,先單擊己方棋

73、子,并保存棋子下標(biāo)Man及坐標(biāo)(Manx,Many),再單擊可移動(dòng)位置,走棋或吃子,并保存記錄。</p><p>  定義“boolean Move(Ex,Ey)”方法,設(shè)置棋子移動(dòng)吃子規(guī)則;另外定義“boolean paoEat(ix,iy)”方法定義炮吃子規(guī)則。</p><p><b>  5 系統(tǒng)測(cè)試與總結(jié)</b></p><p><

74、;b>  5.1 系統(tǒng)測(cè)試</b></p><p>  系統(tǒng)測(cè)試是軟件開發(fā)過程中非常重要的一個(gè)環(huán)節(jié),它是衡量我們所開發(fā)系統(tǒng)的準(zhǔn)則。通過各種形式的測(cè)試以及相應(yīng)的調(diào)試,使軟件系統(tǒng)達(dá)到預(yù)定的要求。通過對(duì)軟件測(cè)試結(jié)果的分析可以預(yù)測(cè)軟件的可靠性;反之,也可以根據(jù)對(duì)軟件可靠性的要求,來決定測(cè)試和調(diào)試過程什么時(shí)候可以結(jié)束。在軟件生命周期中的每個(gè)階段都無法避免的會(huì)出現(xiàn)差錯(cuò),只有做好軟件的測(cè)試工作,才能保證軟件的

75、安全可靠性。</p><p>  象棋游戲系統(tǒng)最好的測(cè)試方式是通過進(jìn)行象棋對(duì)弈,和各個(gè)功能的執(zhí)行來測(cè)試。</p><p>  5.1.1 系統(tǒng)功能測(cè)試</p><p>  在進(jìn)行悔棋、認(rèn)輸、求和等操作時(shí),系統(tǒng)運(yùn)行正常。</p><p>  黑方點(diǎn)擊“悔棋”時(shí),彈出圖5-4界面,由紅方同意或拒絕黑方悔棋,同意則棋盤界面回到一回合前狀態(tài),悔棋功能

76、正常。</p><p>  圖5-4 悔棋對(duì)話框</p><p>  黑方點(diǎn)擊“求和”時(shí),彈出圖5-5界面,由紅方同意或拒絕黑方求和,同意則棋局結(jié)束,本局為和棋,求和功能正常。</p><p>  圖5-5 求和對(duì)話框</p><p>  紅方點(diǎn)擊“認(rèn)輸”時(shí),彈出圖5-6界面,結(jié)束棋局,黑方獲勝,認(rèn)輸功能正常。</p><

77、p><b>  圖5-6 紅方認(rèn)輸</b></p><p>  5.1.2 運(yùn)行效果測(cè)試</p><p>  開始程序后,進(jìn)行對(duì)弈操作,運(yùn)行正常。</p><p>  程序開始運(yùn)行后的效果如下圖。</p><p>  圖5-7是開始游戲時(shí)詢問對(duì)話框。</p><p>  圖5-8是游戲退出時(shí)

78、的詢問窗口。</p><p>  圖5-9是象棋游戲?qū)倪^程中的界面。</p><p>  圖 5-7 開始對(duì)話框</p><p>  圖5-8 退出對(duì)話框</p><p>  圖 5-9 對(duì)弈界面</p><p>  由上述圖所示,象棋對(duì)弈系統(tǒng)可以正常運(yùn)行使用,各個(gè)功能已經(jīng)實(shí)現(xiàn),沒有發(fā)生錯(cuò)誤。</p>

79、<p><b>  5.2 總結(jié)與展望</b></p><p>  本次課程設(shè)計(jì)充分利用自己學(xué)的Java知識(shí),熟練掌握有關(guān)Java語言的語法基礎(chǔ),面向?qū)ο?,Applet的運(yùn)用,還有圖形的設(shè)計(jì),有關(guān)線程的知識(shí)。對(duì)于中國象棋對(duì)弈系統(tǒng),把Java知識(shí)靈活的結(jié)合了起來,讓人們對(duì)Java有了一個(gè)嶄新的認(rèn)識(shí)。該程序?qū)崿F(xiàn)了中國象棋雙人對(duì)弈,并實(shí)現(xiàn)了悔棋、求和、認(rèn)輸?shù)裙δ堋?lt;/p>

80、<p>  現(xiàn)在網(wǎng)絡(luò)上也有一些網(wǎng)絡(luò)象棋對(duì)弈軟件和人機(jī)對(duì)戰(zhàn)軟件,但網(wǎng)絡(luò)上的人機(jī)對(duì)戰(zhàn)軟件只是機(jī)器運(yùn)用簡(jiǎn)單的人工智能分析所有符合規(guī)則的走法,選擇某種進(jìn)行走棋;隨著人工智能的發(fā)展,使機(jī)器擁有學(xué)習(xí)分析的能力,若把人工智能與中國象棋相結(jié)合,使得機(jī)器通過一些某人的對(duì)弈棋譜形成該人的對(duì)弈風(fēng)格,并在選擇人機(jī)對(duì)戰(zhàn)時(shí)選擇某一種風(fēng)格,使得我們感覺如同跟真人對(duì)戰(zhàn)一樣;而且,可以選擇兩種風(fēng)格進(jìn)行機(jī)器與機(jī)器對(duì)戰(zhàn)。如若實(shí)現(xiàn),我們可以體驗(yàn)與古代人、世界冠軍等我

81、們無法無法接觸到的人對(duì)戰(zhàn),而且還可以使他們的風(fēng)格對(duì)戰(zhàn),我們從中學(xué)習(xí)提高。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 殷兆麟等. Java語言程序設(shè)計(jì)(第2版)[M]. 北京:高等教育出版社,2002.</p><p>  [2] 張海藩. 軟件工程導(dǎo)論(第5版)[M]. 北京:清華大學(xué)出版社,2008.</

82、p><p>  [3] 張湘輝等. 軟件開發(fā)的過程與管理[M]. 北京:清華大學(xué)出版社,2005.</p><p>  [4] 宛延闿等. 實(shí)用Java程序設(shè)計(jì)教程[M]. 北京:機(jī)械工業(yè)出版社,2006.</p><p>  [5] 謝國. 中國象棋機(jī)器博弈數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)與搜索算法研究[D]. 陜西:西安理工大學(xué),2008.</p><p>  

83、[6] 徐白雁. JAVA編程語言及其應(yīng)用[J]. 電腦與信息技術(shù).1996,(04):33-35.</p><p>  [7] 田翠華,宋興亮,朱順痣,孔麗新. 中國象棋計(jì)算機(jī)博弈算法研究[J]. 信息技術(shù).2011,(12):5-9.</p><p>  [8] [美]豪頓等. JAVA2編程指南[M]. 電子工業(yè)出版社,2002.</p><p>  [9]

84、James Goodwill. Pure Java Server Pages[M]. Indianapolis Ind: Sams, 2000.</p><p>  [10] Braude E J. Software Engineering—An Object_Oriented Perspective[M]. New York:John Wiley & Sons,2001.</p><

85、;p>  Chinese Chess Game Design Based on Java </p><p>  Abstract:With the development of society, science and technology continue to improve people's recreational activities continue to increase, Chine

86、se chess, as the traditional Chinese culture and are very popular, not only in domestic but also spread abroad. Through the development of Chinese chess game software, and promote our traditional chess tradition. Through

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論