版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計(論文)</b></p><p><b> XXXXX教務處制</b></p><p><b> 目 錄</b></p><p> 中國象棋對弈系統(tǒng)- 1 -</p><p> Chinese chese playing s
2、ystem- 2 -</p><p> 第一章引言(概述)- 4 -</p><p> 第二章 系統(tǒng)可行性分析- 5 -</p><p> 2.1 總體分析- 5 -</p><p> 2.2 開發(fā)環(huán)境介紹- 5 -</p><p> 2.2.1 硬件開發(fā)環(huán)境- 5 -</p>&
3、lt;p> 2.2.2 軟件開發(fā)環(huán)境- 5 -</p><p> 第三章 系統(tǒng)需求設計- 6 -</p><p> 第四章 詳細設計- 7 -</p><p> 4.1 功能設計- 7 -</p><p> 4.1.1 功能說明- 7 -</p><p> 4.1.2 對弈規(guī)則- 7 -
4、</p><p> 4.1.3 相關類圖- 7 -</p><p> 4.1.4 相關類的類圖- 8 -</p><p> 4.2功能的實現(xiàn)- 8 -</p><p> 4.2.1 圖形界面的實現(xiàn)- 8 -</p><p> 4.2.2 棋譜的實現(xiàn)- 11 -</p><p>
5、; 4.2.3 棋子的添加- 11 -</p><p> 4.2.4 背景音樂- 13 -</p><p> 4.2.5 版本信息- 13 -</p><p> 4.2.6 新游戲- 14 -</p><p> 4.2.7 保存與打開- 14 -</p><p> 4.2.8 悔棋- 16 -&
6、lt;/p><p> 4.3棋子移動和吃棋規(guī)則- 17 -</p><p> 4.3.1 本節(jié)說明- 17 -</p><p> 4.3.2詳細規(guī)則介紹- 18 -</p><p> 4.3.2.1卒的移動及吃棋規(guī)則- 18 -</p><p> 4.3.2.2炮和車的移動及吃棋規(guī)則- 18 -<
7、;/p><p> 4.3.2.3馬的移動和吃棋規(guī)則- 18 -</p><p> 4.3.2.4相(象)的移動和吃棋規(guī)則- 18 -</p><p> 4.3.2.5士(仕)的移動和吃棋規(guī)則- 19 -</p><p> 4.3.2.6將(帥)的移動和吃棋規(guī)則- 20 -</p><p> 4.4 測試說
8、明- 20 -</p><p> 4.5 測試結果- 21 -</p><p> 4.5.1 運行結果- 21 -</p><p> 4.5.2 新游戲實現(xiàn)- 23 -</p><p> 4.5.3 棋譜的打開與保存- 25 -</p><p> 結 束 語- 27 -</p>
9、<p> 謝 詞- 28 -</p><p> 參 考 文 獻- 29 -</p><p><b> 中國象棋對弈系統(tǒng)</b></p><p><b> 摘 要:</b></p><p><b> 1、任務 </b></p>&
10、lt;p> 據(jù)統(tǒng)計,中國有2億人會下中國象棋,這相當于平均6至7個人中就有1人會下,可見它有著廣泛的群眾基礎。中國象棋對弈系統(tǒng)正是為這一可行性而開發(fā)設計的,玩家可以通過它很好的研究棋譜,學習中國象棋技術,提高水平。簡單的棋規(guī),便捷的載體,使得他成為雅俗共賞的競技項目。該程序是一個圖形界面的java中國象棋對弈系統(tǒng),本系統(tǒng)主要實現(xiàn)如下目標:</p><p> ?。?)系統(tǒng)實現(xiàn):下棋界面,走棋與吃棋,勝負判斷
11、;</p><p> ?。?)設計象棋菜單:新游戲,保存,打開,退出,悔棋,信息提示。</p><p><b> 2、著重培養(yǎng)的能力</b></p><p> 本課題旨在對大學期間所學基礎和專業(yè)知識的全面檢驗與總結;提高綜合運用所學專業(yè)知識分析、解決實際問題的能力;通過本課程設計使學生加深理解、鞏固課堂理論知識和實驗知識,使學生初步具備綜合
12、運用所學Java語言基礎知識,面向對象程序設計的基本思想、方法與技術,數(shù)據(jù)結構技術等開發(fā)簡單應用系統(tǒng)的基本能力,初步掌握軟件開發(fā)中系統(tǒng)分析、系統(tǒng)設計、系統(tǒng)實現(xiàn)和系統(tǒng)測試等階段的基本方法與技術,培養(yǎng)學生的創(chuàng)新意識,提高實踐應用能力,為培養(yǎng)應用型人才服務;進行撰寫技術報告、學術論文等方面的基本訓練。</p><p><b> 3、成果形式</b></p><p><
13、;b> 軟件系統(tǒng)和設計論文</b></p><p> 關鍵詞: JAVA;象棋;對弈;游戲;大學;專業(yè);能力;論文</p><p> Chinese chese playing system</p><p> Abstract:1, task </p><p> According to statistics, C
14、hina has 200 million people can play Chinese chess, it is equivalent to an average of six to one in 7 people in people, it has a broad mass base. China chess system is designed for the feasibility and development, the pl
15、ayer can move through it very good research, learning Chinese chess technology, improve the level. Simple chess rule, convenient carrier, make him fit athletic project. The program is a graphical interface Java Chinese c
16、hess game system, this system main</p><p> (1) system implementation: chess interface, playing chess and chess, the outcome, </p><p> (2) design chess menu: a new game, save, open, quit, HuiQi
17、, information prompt. </p><p> 2, focus on training the ability </p><p> This topic aims to the foundation and professional knowledge during the period of university comprehensive inspection a
18、nd summary; To improve the integrated use of professional knowledge to analysis, the solution actual problem ability; Through this course design to make the students deepen understanding, consolidate the classroom theore
19、tical knowledge and experimental knowledge, make students have integrated use of learned basic knowledge of Java language, the object-oriented program design bas</p><p> 3, production forms </p><
20、p> Software system and the design paper </p><p> Keywords:JAVA;chese game;game;university;magor;ability;dissertation</p><p><b> 引言(概述)</b></p><p> 隨著科學技術的不斷提高,計算機
21、科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發(fā)揮著越來越重要的作用。中國象棋發(fā)展至今已有二千三、四百年的歷史了,早在戰(zhàn)國時期就有正式記載,堪稱中國的國粹。想必在未來的幾年隨著中國象棋在各個領域的推廣,必定會帶來巨大的影響和經(jīng)濟效益。</p><p> 中國象棋對弈在中國有著悠久的歷史,是二人對抗性游戲中的一種。由于用具簡單,趣味性很強,很快成為流行極為廣泛的棋藝活動。也是我國正式開展
22、的78個體育項目之一,為促進該游戲在世界范圍內的推廣和普及,在中國歷史上,象棋被列為士大夫們的修身之藝,現(xiàn)在被視為怡神益智的一種有益的游戲。在棋藝對戰(zhàn)中,玩家們可以從攻與防、虛與實、整體與局部等復雜關系的變化中悟出某種各種哲理。象棋博弈是由兩個玩家輪流走子,以“將死”或“困斃”對方將或帥為勝的一種棋類運動,有著數(shù)以萬億計的愛好者。它不僅能豐富人們的文化生活,陶冶情操,更有助于開發(fā)個人智力,啟迪思維,鍛煉辨證分析能力和培養(yǎng)頑強的意志等等。
23、 隨著計算機的使用的深入普及,計算機應用技術的日益完善,人們已經(jīng)和計算機有著密切的關聯(lián),在計算機上玩游戲已經(jīng)大眾化,給人們帶來了無限的歡悅,本系統(tǒng)是一個小程序,只要在裝有jdk中的虛擬機的計算機上即可運行,中國象棋對弈系統(tǒng)實現(xiàn)了雙人對弈這個功能,可用于多人一起游戲。而實現(xiàn)中國象棋對弈系統(tǒng)就為象棋在網(wǎng)絡應用平臺提供多人對弈打下基礎。中國象棋對弈系統(tǒng)主要要實現(xiàn)的是棋子的走法和規(guī)則,中國象棋講究車,馬,象,仕,卒,炮,將</p&
24、gt;<p> 第二章 系統(tǒng)可行性分析</p><p><b> 2.1 總體分析</b></p><p> 此次對弈系統(tǒng)的開發(fā)研究是大學專業(yè)知識的一次綜合應用于提高,計算機主要安裝jdk運行環(huán)境和Eclipse應用程序開發(fā)工具。</p><p> 在技術方面,開發(fā)過程中會出現(xiàn)很多問題,有預想之中的,也有預想之外的,特別在
25、圖形界面的設計上遇到了很多問題,但通過進一步的學習和與指導老師的溝通,一些問題逐一被解決。運用java,gui監(jiān)聽器和標準類庫等知識,首先編寫一個主類ChineseChess,構造一個主窗口,在中國象棋-Java版上添加一塊可顯示的棋盤,再插入圖片CChess.GIF圖片作為棋譜,再在棋盤上添加32個棋子按鈕,再插入相應圖片作為棋子,然后再在主窗口下面添加一塊面板作為設計象棋菜單,用此菜單來用來對“新游戲,悔棋,保存,打開,退出棋譜,走
26、棋提示”進行操作。</p><p> 1.中國象棋對弈系統(tǒng)是:圖形界面,線程,監(jiān)聽器與文件等技術的綜合運用。</p><p> 2.圖形界面的實現(xiàn):考慮到中國象棋的特點本身程序使用GridLayout布局來實現(xiàn)由于使用鼠標操作本身程序使用Jbutton組件。</p><p> 3.對弈的實現(xiàn):利用鼠標的監(jiān)聽來實現(xiàn)對象棋走法的操作。</p><
27、;p> 2.2 開發(fā)環(huán)境介紹</p><p> 2.2.1 硬件開發(fā)環(huán)境</p><p> 本系統(tǒng)硬件環(huán)境在操作系統(tǒng)在Windows Server 2003 上完成編碼及測試,硬件要求不高,只要有臺電腦即可。</p><p> 2.2.2 軟件開發(fā)環(huán)境</p><p> 結合本系統(tǒng)的特點,只需要一個軟件開發(fā)工具和一個虛擬機即可
28、,因此需要的軟件有:</p><p> 操作系統(tǒng)在Windows Server 2003以上;</p><p> 開發(fā)工具使用Eclipse;</p><p> 在操作系統(tǒng)上安裝jdk的開發(fā)環(huán)境以及jre(虛擬機)的運行環(huán)境。</p><p> 第三章 系統(tǒng)需求設計</p><p> 中國象棋對弈系統(tǒng)要求實現(xiàn)
29、下棋界面,利用鼠標監(jiān)聽來實現(xiàn)走棋與吃棋,勝負判斷并伴有信息提示,在下棋界面下端設有象棋菜單,菜單內容包括“新游戲,保存,打開,退出,悔棋,信息提示”等相關功能。詳情如下:</p><p> 新游戲:開始一場新的游戲,并重新棋子初始化。</p><p> 打開:打開原保存的文件,并開始棋局。</p><p> 保存:實現(xiàn)棋譜的保存,并生成一個棋譜文件。</
30、p><p> 悔棋:返回到上一步棋局,并開始繼續(xù)下棋。</p><p> 退出棋譜:對話框提示,是否退出系統(tǒng)。</p><p><b> 第四章 詳細設計</b></p><p><b> 4.1 功能設計</b></p><p> 4.1.1 功能說明</p&
31、gt;<p> 這個系統(tǒng)主要實現(xiàn)人人對弈,采用鼠標監(jiān)聽的方法來實現(xiàn)對棋子的移動,雙方依次輪流走棋,在狀態(tài)顯示欄有走棋的相關提示,主要提示該輪到哪方走棋。如果一方想要認輸,在征求對方認可的情況下,點擊“新游戲”開始新的一局開始對弈,如果一方想要悔棋,也是在征求對方同意的情況下,點擊“悔棋”按鈕,可連續(xù)悔棋。如果遇到緊急情況或者疲憊的情況下,可點擊“保存”按鈕保存當前棋局,當空閑的時候可以點擊“打開”按鈕并找到上次保存的棋局
32、。為防止誤操作關閉下棋界面,在退出時設有信息提示,如果確認退出,則點擊“是”按鈕,否則點擊“否”返回下棋界面。</p><p> 4.1.2 對弈規(guī)則</p><p> 選擇紅黑棋子雙方可以自由商定選擇,但默認是紅方先手,黑方后手。打開以前殘局可按照信息提示框的提示決定哪方先手,哪方后手。</p><p> 4.1.3 相關類圖</p><
33、p> (圖)4.1.3-1 包和類</p><p> 在Eclipse應用程序開發(fā)工具新建一個項目ChineseChese項目,在項目中新建包com.Larry.frame,包內包含主類ChineseChese.java,作為該程序的main方法;圖形界面類CheseMainFrame.java,對界面進行設計操作;象棋走子規(guī)則類CheseRule.java,主要對各個棋子的走法規(guī)則進行控制;音樂類Mu
34、sicDemo.java,主要用于背景音樂的控制。</p><p> 4.1.4 相關類的類圖</p><p> 該類圖包括了各個類內的方法,詳細的展示了類中的方法。</p><p> (圖)4.1.4-1相關類的類圖</p><p><b> 4.2功能的實現(xiàn)</b></p><p>
35、 4.2.1 圖形界面的實現(xiàn)</p><p> 圖形界面的是實現(xiàn)主要在類ChineseMainFrame類中實現(xiàn),通過繼承Jframe來進行初始化操作以下是相關代碼:如(圖)4.2.1-1 圖形界面</p><p><b> //創(chuàng)建工具欄</b></p><p> jmain = new JToolBar();</p>&
36、lt;p> showAbout = new Button(" 關于");</p><p> showAbout.setToolTipText("關于");</p><p> text = new JLabel("熱烈歡迎");</p><p> text.setToolTipText(&quo
37、t;提示信息");</p><p> anew = new Button(" 新 游 戲 ");</p><p> anew.setToolTipText("重新開始新的一局");</p><p> exit = new Button(" 退 出 ");</p><p
38、> exit.setToolTipText("退出本程序");</p><p> repent = new Button(" 悔 棋 ");</p><p> repent.setToolTipText("返回到上次走棋的位置");</p><p> showOpen = new B
39、utton("打開");</p><p> showOpen.setToolTipText("打開以前棋局");</p><p> showSave = new Button("保存");</p><p> showSave.setToolTipText("保存當前棋局");&
40、lt;/p><p> //把組件添加到工具欄</p><p> jmain.setLayout(new GridLayout(0,7));</p><p> jmain.add(anew);</p><p> jmain.add(repent);</p><p> jmain.add(showOpen);&l
41、t;/p><p> jmain.add(showSave);</p><p> jmain.add(exit);</p><p> jmain.add(text);</p><p> jmain.add(showAbout);</p><p> jmain.setBounds(0,500,470,24);<
42、/p><p> con.add(jmain);</p><p><b> //注冊按扭監(jiān)聽</b></p><p> anew.addActionListener(this);</p><p> repent.addActionListener(this);</p><p> exit.ad
43、dActionListener(this);</p><p> showAbout.addActionListener(this);</p><p> showOpen.addActionListener(this);</p><p> showSave.addActionListener(this);</p><p><b>
44、; //添加棋盤標簽</b></p><p> con.add(image = new JLabel(new ImageIcon("images//CChess.GIF")));</p><p> image.setBounds(0,0,446,497);</p><p> image.addMouseListener(thi
45、s);</p><p> //注冊窗體關閉監(jiān)聽</p><p> this.addWindowListener(new WindowAdapter() </p><p><b> {</b></p><p> public void windowClosing(WindowEvent we)</p>
46、<p><b> {</b></p><p> System.exit(0);</p><p><b> }</b></p><p><b> });</b></p><p> //窗體居中讓窗體居中</p><p> Dimen
47、sion screenSize = Toolkit.getDefaultToolkit().getScreenSize();</p><p> Dimension frameSize = this.getSize();</p><p> if (frameSize.height > screenSize.height)</p><p><b>
48、 {</b></p><p> frameSize.height = screenSize.height;</p><p><b> }</b></p><p> if (frameSize.width > screenSize. Width)</p><p><b> {</b
49、></p><p> frameSize.width = screenSize. Width;</p><p><b> }</b></p><p> this.setLocation((screenSize. Width - frameSize.width) / 2 - 200 ,(screenSize.height - fram
50、eSize.height ) / 2 - 290);</p><p> this.setIconImage(new ImageIcon("images\\象.GIF").getImage());</p><p> this.setResizable(false);</p><p> this.setTitle(Title);</p&g
51、t;<p> this.setSize(450,550);</p><p> this.show();</p><p> (圖)4.2.1-1 圖形界面 </p><p> (圖)4.2.3-1 棋譜</p><p> 4.2.2 棋譜的實現(xiàn)</p><p> 在圖形界面的空白處添加棋譜圖片
52、CChese.GIF,即可顯示棋譜如(圖)4.2.2-1 棋譜。以下是相關代碼:</p><p><b> //添加棋盤標簽</b></p><p> con.add(image = new JLabel(new ImageIcon("image\\CChess.GIF")));</p><p> image.setB
53、ounds(0,0,446,497);</p><p> image.addMouseListener(this);</p><p> 4.2.3 棋子的添加</p><p> 在圖形界面中添加相關棋子圖片后如(圖)4.2.3-1</p><p><b> //添加棋子標簽</b></p><
54、p> drawChessMan();</p><p> 這是添加紅色棋子的棋子“車”,采用接口的形式實現(xiàn),其它棋子依此方法依次添加即可形成一個完美的棋譜了。</p><p><b> //車</b></p><p> in = new ImageIcon("image\\車1.GIF");</p>
55、<p> for (i=0,k=10;i<2;i++,k+=385)</p><p> {play[i] = new JLabel(in);</p><p> play[i].setBounds(k,10,40,40);</p><p> play[i].setName("車1");</p>&
56、lt;p><b> }</b></p><p> ?。▓D)4.2.3-1 添加棋子</p><p> ?。▓D)4.2.5-1 版本信息</p><p> 4.2.4 背景音樂</p><p> 在游戲過程中,時間長了往往會感覺到疲憊,來首優(yōu)雅的背景音樂既可以消除疲勞,也可以緩解壓力,從而帶來身心的愉悅,本系統(tǒng)
57、添加了一首流行音樂作為背景音樂,背景音樂能使玩家感覺到游戲中的氣氛,使玩家容易進入游戲狀態(tài),還可以給玩家留下一個好印象,襯托游戲的場景,好的游戲背景也能表現(xiàn)出游戲的水準。</p><p> 主要用以下方法實現(xiàn):</p><p><b> try </b></p><p><b> { </b></p>
58、<p> File music = new File("許佳慧 - 預謀.wav"); </p><p> AudioClip ac = Applet.newAudioClip(music.toURL()); </p><p> ac.loop(); </p><p><b> } </b></p&g
59、t;<p> catch(Exception e) </p><p><b> { </b></p><p> e.printStackTrace(); </p><p><b> } </b></p><p><b> }</b></p>
60、<p> 4.2.5 版本信息</p><p> 點擊圖形界面中的“關于”按鈕,即可顯示(圖)4.2.5-1 所示的內容,主要顯示系統(tǒng)名,版本號以及制作者,點擊“確定按鈕”結束瀏覽。主要代碼設計如下</p><p> setBounds(200,100,300,200);</p><p> setTitle("版本信息");&
61、lt;/p><p> this.setIconImage(ico.getImage());</p><p> label=new JLabel("<html><body><h1>中國象棋對弈系統(tǒng)</h1>版本號:v1.0<br>制作者:XXXX<br>導 師:XXXX</body></h
62、tml>",JLabel.LEFT);</p><p> pane=new JPanel();</p><p> ok=new JButton("確定");</p><p> ok.addActionListener(this);</p><p> pane.add(ok);</p>
63、<p> add(pane,BorderLayout.SOUTH);</p><p> add(label,BorderLayout.CENTER);</p><p> 在此,也可用此方法為象棋對弈系統(tǒng)添加,對弈規(guī)則以及說明書等介紹,為玩家提供更方便的游戲體驗。</p><p><b> 4.2.6 新游戲</b></p
64、><p> 在游戲進行過程中,往往會因某種原因會重新開始游戲,玩家不可能重新開啟游戲客戶端,為了給玩家更好的游戲體驗,設置重新開始游戲是必不可少的功能。</p><p> 重新開始游戲后,會重新排列棋子返回原位。以下是紅子“車”的排列方法,通過坐標把相應的棋子排列,其它棋子排列與此方法相似,只是坐標不同。</p><p> //重新排列每個棋子的位置</p&
65、gt;<p><b> //車</b></p><p> for (i=0,k=10;i<2;i++,k+=385)</p><p><b> {</b></p><p> play[i].setBounds(k,10,40,40);</p><p><
66、;b> }</b></p><p> 4.2.7 保存與打開</p><p> 在一個系統(tǒng)中保存與打開文件是必不可少的操作,保存一個游戲進度可以省去很多不必要的麻煩,當對弈雙方遇到得不暫停游戲的情況,雙方又不想輕易放棄此局,保存游戲進度的功能就非常人性化的解決了這個問題,以下就是保存游戲進度的相關代碼,通過文件流的方式把內存里的數(shù)據(jù)讀出來,在保存在一個新的文件中,
67、并保存所有棋子的坐標是否可見和哪方吃子。</p><p><b> try</b></p><p><b> {//保存對話框</b></p><p> JFileChooser jfcSave = new JFileChooser("保存當前棋局");</p><p>
68、 int v=jfcSave.showSaveDialog(this);</p><p> if (v != JFileChooser.CANCEL_OPTION)</p><p><b> {</b></p><p> FileVar.removeAllElements();</p><p> //保存所有棋
69、子的坐標和是否可見</p><p> for (int i=0;i<32;i++)</p><p><b> {</b></p><p> FileVar.addElement(new Integer(play[i].getX()));</p><p> FileVar.addElement(new Int
70、eger(play[i].getY()));</p><p> FileVar.addElement(new Boolean(play[i].isVisible()));</p><p><b> }</b></p><p> //保存當前該哪方吃棋</p><p> FileVar.add(text.g
71、etText());</p><p><b> //保存到文件</b></p><p> FileOutputStream fileOut = new FileOutputStream(jfcSave.getSelectedFile());</p><p> ObjectOutputStream objOut = new ObjectOu
72、tputStream(fileOut);</p><p> objOut.writeObject(FileVar);</p><p> objOut.close();</p><p> fileOut.close();</p><p><b> }</b></p><p> 打
73、開理論上和保存一樣,首先會彈出一個對話框“打開”,會刪除集合里的所有信息,刪除過后,打開文件所獲得的數(shù)據(jù)并獲得集合內所有棋子的坐標而且被吃掉的棋子不顯示,在信息提示框提示當前該那方走子。</p><p><b> try </b></p><p><b> {//打開對話框</b></p><p> JFileCho
74、oser jfcOpen = new JFileChooser("打開棋局");</p><p> int v=jfcOpen.showOpenDialog(this);</p><p> if (v != JFileChooser.CANCEL_OPTION)</p><p><b> {</b></p>
75、<p> //刪除集合所有信息</p><p> Var.removeAllElements();</p><p> FileVar.removeAllElements();</p><p> //打開文件獲得所有數(shù)據(jù)</p><p> FileInputStream fileIn = new FileInp
76、utStream(jfcOpen.getSelectedFile());</p><p> ObjectInputStream objIn = new ObjectInputStream(fileIn);</p><p> FileVar = (Vector)objIn.readObject();</p><p> fileIn.close();&l
77、t;/p><p> objIn.close();</p><p> //集合內容對應棋子坐標</p><p><b> int k=0;</b></p><p> for (int i=0;i<32;i++)</p><p><b> {</b><
78、;/p><p> play[i].setBounds(((Integer)FileVar.get(k)).intValue(),((Integer)FileVar.get(k+1)).intValue(),40,40);</p><p> //被吃掉的棋子不顯示</p><p> if (!((Boolean)FileVar.elementAt(k+2
79、)).booleanValue())</p><p><b> {</b></p><p> play[i].setVisible(false);</p><p><b> }</b></p><p><b> k+=3;</b></p><p>
80、;<b> }</b></p><p> //當前該哪方棋子走棋</p><p> if (((String)FileVar.lastElement()).toString().equals(" 紅棋走棋"))</p><p><b> {</b></p><p>
81、text.setText(((String)FileVar.lastElement()).toString());</p><p> chessPlayClick = 2;</p><p><b> }</b></p><p> else if (((String)FileVar.lastElement()).toString().equ
82、als(" 黑棋走棋"))</p><p><b> {</b></p><p> text.setText(((String)FileVar.lastElement()).toString());</p><p> chessPlayClick = 1;</p><p><b>
83、 }</b></p><p> else if (((String)FileVar.lastElement()).toString().substring(5).equals("勝利"))</p><p><b> {</b></p><p> text.setText(((String)FileVar.l
84、astElement()).toString());</p><p> chessPlayClick = 3;</p><p><b> }</b></p><p><b> }</b></p><p><b> 4.2.8 悔棋</b></p><
85、p> 在棋類游戲中走錯棋是經(jīng)常存在的,也許誤走,也許是走棋后發(fā)現(xiàn)危險想要取消上一步,甚至上幾步的走棋。為了滿足此種要求,該系統(tǒng)實現(xiàn)了悔棋功能,在取得雙方同意的情況下,可以回一步,也可以連續(xù)回幾步,知道雙方滿意為止。通過獲得setVisible屬性值獲得X和Y坐標并獲得索引賦給棋子,然后刪除用過的坐標,停止棋子閃爍。</p><p> //獲得setVisible屬性值</p><p&
86、gt; String S = (String)Var.get(Var.size()-4);</p><p><b> //獲得X坐標</b></p><p> int x = Integer.parseInt((String)Var.get(Var.size()-3));</p><p><b> //獲得Y坐標</b&
87、gt;</p><p> int y = Integer.parseInt((String)Var.get(Var.size()-2));</p><p><b> //獲得索引</b></p><p> int M = Integer.parseInt((String)Var.get(Var.size()-1));</p>
88、<p><b> //賦給棋子</b></p><p> play[M].setVisible(true);</p><p> play[M].setBounds(x,y,40,40);</p><p> if (play[M].getName().charAt(1) == '1')</p>
89、;<p><b> {</b></p><p> text.setText(" 黑棋走棋");</p><p> chessPlayClick = 1;</p><p><b> } </b></p><p><b> else</b&g
90、t;</p><p><b> {</b></p><p> text.setText(" 紅棋走棋");</p><p> chessPlayClick = 2;</p><p><b> }</b></p><p><b> //
91、刪除用過的坐標</b></p><p> Var.remove(Var.size()-4);</p><p> Var.remove(Var.size()-3);</p><p> Var.remove(Var.size()-2);</p><p> Var.remove(Var.size()-1);</p>
92、<p><b> //停止旗子閃爍</b></p><p> chessManClick=false;</p><p><b> }</b></p><p> catch(Exception e){}</p><p><b> }</b></p>
93、;<p><b> 棋子移動和吃棋規(guī)則</b></p><p> 4.3.1 本節(jié)說明</p><p> 俗話說“無規(guī)矩不成方圓”,在本系統(tǒng)中也存在各種規(guī)則,對各棋子的移動和吃子都有嚴格的限制。本系統(tǒng)的所有棋子移動和吃棋規(guī)則都在類CheseRule中。</p><p> 4.3.2詳細規(guī)則介紹</p><
94、;p> 4.3.2.1卒的移動及吃棋規(guī)則</p><p> 移動規(guī)則:根據(jù)本系統(tǒng)的詳細情況來說,黑卒向下移動,紅兵向上移動,并且不能回頭,但可以左右移動。通過相關算法得到合法坐標,執(zhí)行移動、吃棋和過河等操作。</p><p> 吃棋規(guī)則:不管是黑卒還是紅兵都可以吃掉正前方和左右方向上的任何棋子,但不能隔子吃棋。</p><p> 4.3.2.2炮和車的
95、移動及吃棋規(guī)則</p><p> 走棋規(guī)則:首先判斷起點和終點是否有棋子,炮和車只能上下和左右移動并吃棋,起初要指定所有模糊的Y(X)坐標,移動的Y(X)坐標是否有指定坐標相近的所有棋子,找出在同一條豎線(橫線)的所有棋子,并不包括自己,從起點到終點判斷中間是否有棋子,如果中間有棋子就不可以從這條豎線(橫線)過去,從起點到終點找起點和終點的棋子,起點和終點沒有旗子就可以移動了。</p><p
96、> 吃棋規(guī)則:找出起點和終點是否有棋子,找出所有棋子,找出同一條線上的棋子,不包括自己,自己是七點被吃的終點。起點和終點沒有棋子是車的吃棋方法,不能吃己方棋子,起點和終點有一個棋子是炮的吃棋方法,也不能吃己方棋子。(代碼詳見附錄1)</p><p> 4.3.2.3馬的移動和吃棋規(guī)則</p><p> 走棋規(guī)則:新建集合用來保存坐標和障礙,找到合法的X和Y坐標,判斷正前方、正后
97、方、正左方、正右方是否有別的棋子,判斷移動該棋子。來實現(xiàn)馬飛日的走法。</p><p> 吃棋規(guī)則:也要有集合存放障礙棋子,首先判斷正方是否棋子,若有則不能吃正方前方的兩個棋子,若沒有則可以移動到指定位置及吃棋,不能吃自己的棋子,吃棋后,停止閃爍,不顯示被吃棋子。</p><p> 4.3.2.4相(象)的移動和吃棋規(guī)則</p><p> 走棋規(guī)則:新建集合用
98、來保存坐標和障礙棋子,用相關算法實現(xiàn)飛田算法(詳見附錄1),并且紅(黑)棋不能過楚河漢界。</p><p> 吃棋規(guī)則:新建集合用來保存障礙棋子,吃左上方棋子的方法,首先判斷左上方是否有棋子for (int i=0;i<32;i++)</p><p><b> {</b></p><p> if (playQ[i].isVisibl
99、e() && play.getX() - playQ[i].getX() >= 10 && play.getX() - playQ[i].getX() <= 50 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)</p><
100、p><b> {</b></p><p><b> Move++;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>
101、<p> 如果有對方棋子則Chese = true;就可以實現(xiàn)吃左上方的敵方棋子。吃右上方棋子方法,也是率先判斷是否有敵方棋子如下:for (int i=0;i<32;i++)</p><p><b> {</b></p><p> if (playQ[i].isVisible() && playQ[i].getX() -
102、play.getX() >= 40 && playQ[i].getX() - play.getX() <= 90 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)</p><p><b> {</b><
103、;/p><p><b> Move++;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> 如果有則Chese= true;則
104、可以實現(xiàn)吃掉右上方的敵方棋子了。吃左下方棋子辦法,首先判斷是否有敵方棋子:for (int i=0;i<32;i++)</p><p><b> {</b></p><p> if (playQ[i].isVisible() && play.getX() - playQ[i].getX() >= 10 && play.g
105、etX() - playQ[i].getX() <= 60 && play.getY() - playQ[i].getY() <= -40 && play.getY() - playQ[i].getY() >= -60)</p><p><b> {</b></p><p><b> Move++;<
106、;/b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> 如果有則Chese = true;實現(xiàn)了吃掉左下方的敵方棋子。吃右下方敵方棋子,首先判斷右下方是否有敵方棋子:f
107、or (int i=0;i<32;i++)</p><p><b> {</b></p><p> if (playQ[i].isVisible() && playQ[i].getX() - play.getX() >= 50 && playQ[i].getX() - play.getX() <= 80 &
108、;& playQ[i].getY() - play.getY() >= 40 && playQ[i].getY() - play.getY() <= 60)</p><p><b> {</b></p><p><b> Move = 1;</b></p><p><b>
109、 break;</b></p><p><b> }</b></p><p><b> }</b></p><p> 如果有則Chese = true;實現(xiàn)了吃右下方敵方棋子。</p><p> 4.3.2.5士(仕)的移動和吃棋規(guī)則</p><p>
110、 移動規(guī)則:不管是士,還是仕,只能在田字方格內移動。士不能超越自己的界限:if (me.getX() - play.getX() >= 50 && me.getX() - play.getX() <= 80 && play.getY() - me.getY() >= 15 && play.getY() - me.getY() <= 50)</p>&l
111、t;p><b> {</b></p><p> if (Man < 14 && me.getX() > 150 && me.getX() < 300 && me.getY() < 150)</p><p><b> {</b></p><p&g
112、t; play.setBounds(play.getX()+50,play.getY()-50,40,40);}</p><p> 仕的移動坐標范圍為:else if (Man > 13 && me.getY() > 340 && me.getX() > 150 && me.getX() < 300)</p>
113、<p><b> {</b></p><p> play.setBounds(play.getX()+50,play.getY()-50,40,40);</p><p><b> }</b></p><p><b> }</b></p><p><b
114、> 下面來介紹走法:</b></p><p> 上、右:邏輯代碼:(play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 13 && play.getY() - me.getY() >= 15 && play.getY() - me.getY() <= 5
115、0)</p><p> 上、左:邏輯代碼:(play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 13 && play.getY() - me.getY() >= 15 && play.getY() - me.getY() <= 50)</p><p>
116、; 下、右:邏輯代碼:(me.getX() - play.getX() >= 50 && me.getX() - play.getX() <= 80 && me.getY() - play.getY() >= 50 && me.getY() - play.getY() <= 80)</p><p> 下、左: 邏輯代碼:else if
117、(play.getX() - me.getX() <= 50 && play.getX() - me.getX() >= 15 && me.getY() - play.getY() >= 50 && me.getY() - play.getY() <= 80)</p><p> 吃棋規(guī)則:吃棋時也是按照移動規(guī)則,進行判斷吃子,判斷被吃的棋子
118、是否與士(仕)相近,如果相近則吃掉,且不能吃掉己方棋子。</p><p> 4.3.2.6將(帥)的移動和吃棋規(guī)則</p><p> 帥和將是棋中的首腦,是雙方竭力爭奪的目標。它只能在‘九宮‘之內活動,可上可下,可左可右,每次走動只能按豎線或橫線走動一格。帥與將不能在同一直線上直接對面,否則走方判負。</p><p><b> 4.4 測試說明<
119、;/b></p><p> 在軟件開發(fā)的過程中,人們使用了很多保證軟件品質的方法分析、設計和實現(xiàn)軟件系統(tǒng),但免不了還會在工作中犯很多錯誤。為了保證軟件的質量和可靠性,應力求在分析、設計等各個開發(fā)階段結束前,對軟件的各項功能和操作進行嚴格的技術評審。軟件測試就是在軟件正式運用前,對軟件需求分析、設計規(guī)格說明和編碼的再次審查和修改使之更加完善,是軟件質量保證的關鍵所在,也可以說軟件測試是為了發(fā)現(xiàn)運行中的錯誤而
120、運行程序的過程。其目的是想以最少的時間和人力找出軟件中潛在的各種錯誤和缺陷。目前,流行的軟件測試方法有兩種,一種是黑盒測試法,另一種是白盒測試法。任何工程產(chǎn)品都可以使用這兩種方法進行測試。</p><p> 黑盒測試是已知產(chǎn)品的功能設計規(guī)格,可以進行測試證明每個實現(xiàn)了的功能是否符合要求。軟件的白盒測試是對軟件的過程性細節(jié)作細致的檢查,它是已知產(chǎn)品的內部工作過程,可以通過測試證明每種操作是否符合設計規(guī)格要求,所有
121、的內部成分是否已經(jīng)檢查。</p><p> 但是,任何軟件的開發(fā)項目都要受到期限、費用、人力和機時等條件的限制。盡管我們以為為了充分揭露程序中的所有隱藏錯誤、徹底的做法是針對所有可能的數(shù)據(jù)進行測試,但事實告訴我們,這樣做是不行的。</p><p> 在測試階段既然窮舉測試不可行,為了節(jié)省時間和資源,提高測試效率,就必須精心設計測試用例,也就是要從數(shù)量極大的可用測試用例中精心地挑選少量的
122、測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達到最佳的測試效果,或者說它們能夠高效率地把隱藏的錯誤揭露出來。</p><p> 對于本軟件的測試,我們選擇的是黑盒測試法中的邊界值測試。</p><p> 人們從長期的測試工作經(jīng)驗得知,大量的錯誤是發(fā)生在輸入或者輸出范圍的邊界值上,而不是在輸入范圍的內部。因此針對各種邊界情況設計測試用例,可以查出更多的錯誤。</p><p>
123、; 使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入等價類與輸出等價類的邊界,就是應著重測試的邊界情況。應當選取正好等于,剛剛大于,或剛剛小于邊界的值作為測試數(shù)據(jù),而不是選取等價類中的典型值或者任意值作為測試用例。</p><p> 邊界值分析方法選擇測試用例的原則:</p><p> ?。?)如果輸入條件規(guī)定了值的范圍,則應取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍
124、邊界的值作為測試輸入數(shù)據(jù)。</p><p> ?。?)如果輸入條件規(guī)定了值的個數(shù),則用最大個數(shù)、最小個數(shù)、比最大個數(shù)多1、比最小個數(shù)少1作為測試數(shù)據(jù)。</p><p> (3)如果程序的規(guī)格說明給出的輸入域或者輸出域是有序集合,則應選取集合的第一個元素和最后一個元素作為測試用例。</p><p> ?。?)如果程序中使用了一個內部數(shù)據(jù)結構,則應當選擇這個內部數(shù)據(jù)結
125、構的邊界上的值作為測試用例。</p><p> ?。?)分析規(guī)格說明,找出其他可能的邊界條件。</p><p><b> 4.5 測試結果</b></p><p> 4.5.1 運行結果</p><p> 本系統(tǒng)可以實現(xiàn)人人對弈詳情如圖所示:</p><p> 點擊棋盤任何位置開局,信息提
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- 基于java的中國象棋對弈系統(tǒng)
- 基于java的中國象棋對弈系統(tǒng)
- 基于Java的中國象棋對弈系統(tǒng)論文.doc
- java課程設計---中國象棋對弈系統(tǒng)
- 畢業(yè)設計(論文)中國象棋對弈系統(tǒng)
- java課程設計---中國象棋對弈系統(tǒng)程序
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng)
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng)
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng).doc
- 畢業(yè)論文---基于java的中國象棋游戲設計
- 中國象棋對弈系統(tǒng)配置說明.doc
- 基于java的中國象棋
- 基于qt的中國象棋-畢業(yè)論文
- 畢業(yè)論文-- 基于java的手機游戲《中國象棋》的設計與實現(xiàn)
- 中國象棋對弈機器人控制系統(tǒng)研究.pdf
- 機電系畢業(yè)論文--中國象棋“車”的銑削加工
- java中國象棋代碼(單機版)
- 中國象棋博弈系統(tǒng)畢業(yè)設計
評論
0/150
提交評論