中國象棋對弈系統(tǒng)--Java課程設(shè)計(jì)_第1頁
中國象棋對弈系統(tǒng)--Java課程設(shè)計(jì)_第2頁
中國象棋對弈系統(tǒng)--Java課程設(shè)計(jì)_第3頁
中國象棋對弈系統(tǒng)--Java課程設(shè)計(jì)_第4頁
中國象棋對弈系統(tǒng)--Java課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)報(bào)告題 目: 中國象棋對弈軟件設(shè)計(jì)與實(shí)現(xiàn) 院 (系): 信息科學(xué)與工程學(xué)院 專業(yè)班級: 計(jì)算機(jī)科學(xué)與技術(shù)1201班 學(xué)生姓名: 程偉 學(xué) 號: 20121183011 指導(dǎo)教師: 吳奕 20 14 年 12 月 29 日至20 15 年 1 月 9日華中科技大學(xué)武昌分校制 面向?qū)ο蟪绦蛟O(shè)計(jì) 課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目中國象棋對弈軟件設(shè)計(jì)與實(shí)現(xiàn)二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容內(nèi)容:利用Java實(shí)現(xiàn)一個(gè)中國象棋對弈的軟件,實(shí)現(xiàn)中國象棋的規(guī)則。中國象棋的棋盤是方形的,棋盤的中間有一條“界河”,把對壘的雙方隔在兩邊。兩邊畫有交叉線的交叉點(diǎn)共有90個(gè),棋子就

2、擺在這些交叉點(diǎn)上。中國象棋共有32枚棋子,分為黑紅兩組,下棋的雙方各用一組,每組各有一帥(將)兩士兩相兩馬兩車兩炮五兵。兩人對局時(shí),按照規(guī)定的位置將各自的棋子擺好,紅方先走,然后輪流下子。各種棋子走法不同,最后把對方將死為勝,不分勝負(fù)則為和棋。系統(tǒng)使用Eclipse與JDK1.6工具,操作系統(tǒng)為WINDOWS,采用面向?qū)ο蠓椒ㄍ瓿?,包括總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼實(shí)現(xiàn)、測試。 基本功能與要求:1象棋對弈。首先紅方走棋,然后黑方走棋,直到一方獲勝。2.象棋規(guī)則。依據(jù)中國象棋的規(guī)則。3新游戲。任何時(shí)候都可以重新開始一盤新的對弈。4悔棋。當(dāng)走錯(cuò)棋的時(shí)候可以悔棋。5 .信息提示。提示當(dāng)前信息狀態(tài)。三、原始

3、資料1.面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)指導(dǎo)書2. 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,2009四、要求的設(shè)計(jì)(調(diào)查/論文)成果1.課程設(shè)計(jì)報(bào)告2.課程設(shè)計(jì)軟件五、進(jìn)程安排布置任務(wù),查找資料、需求分析1天總體設(shè)計(jì)1天詳細(xì)設(shè)計(jì)1.5天編制源程序?qū)崿F(xiàn)3.5天測試與修改1天撰寫課設(shè)報(bào)告2天六、主要參考資料1 張廣彬. Java課程設(shè)計(jì)案例精編(第二版).北京:清華大學(xué)出版社, 2011. 2 耿祥義. Java課程設(shè)計(jì)(第二版).北京:清華大學(xué)出版社, 2008.3 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,20094 鄒林達(dá)陳國君 Java2程序設(shè)計(jì)基礎(chǔ)北京:清華大學(xué)出版社,20105

4、鄒林達(dá)Java2程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)北京:清華大學(xué),2010指導(dǎo)教師(簽名): 20 年 月 日目 錄1需求與總體設(shè)計(jì)11.1需求分析11.2總體設(shè)計(jì)22詳細(xì)設(shè)計(jì)32.1詳細(xì)設(shè)計(jì)思路33編碼實(shí)現(xiàn)83.1 源程序代碼84系統(tǒng)運(yùn)行與測試61總 結(jié)651需求與總體設(shè)計(jì)各種中國象棋軟件的開發(fā)與應(yīng)用,尤其是在網(wǎng)絡(luò)方面的推廣,使得中國象棋得到了很好的宣傳,全面展示了中國象棋的風(fēng)采、優(yōu)點(diǎn)與特色,同時(shí)也讓外國人認(rèn)識到中國象棋這一我國的“國粹”。中國象棋打譜系統(tǒng)正是為這一可行性而開發(fā)設(shè)計(jì)的,玩家可以通過它很好的研究棋譜,學(xué)習(xí)中國象棋技術(shù),提高水平。1.1需求分析實(shí)現(xiàn)一個(gè)中國象棋對弈的軟件,實(shí)現(xiàn)中國象棋的規(guī)則:棋

5、子共有三十二個(gè),分為紅、黑兩組,每組十六個(gè),各分七種,其名稱和數(shù)目如下所述。(1) 紅棋子:帥一人,車、馬、炮、相、士各兩個(gè),兵五個(gè)。(2)黑棋子:將一個(gè),車、馬、炮、象、士各兩個(gè),卒五個(gè)。(3)在對局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一著,直至分出勝負(fù)或走成和棋為止。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)到另一個(gè)空著的交叉點(diǎn),或者吃掉對方的棋子而占領(lǐng)叉點(diǎn),都算走了一著。雙方各走了一著,稱為一個(gè)回合。(4)帥(將)每一著只許走一步,前進(jìn)、后退、橫走都可以,但不能走出“九宮”。帥和將不準(zhǔn)在同一直線上直接對面,如一方已先占據(jù),另一方必須回避。(5)士每一著只許沿“九宮”斜線走一步,可進(jìn)可退。相(

6、象)不能越過“河界”,每一著斜走兩步,可進(jìn)可退,即俗稱相(象)走田字。當(dāng)田字中心有別的棋子時(shí),俗稱塞相(象)眼,則不行走過去。 (6)馬每著走一直(或一橫)一斜,可進(jìn)可退,即俗稱“馬走日字”。如果在要去方向緊靠一直(或一橫)的地方,有別的棋子擋住,俗稱“蹩馬腿”,就不能走過去。(7)車每一著可以直進(jìn)、直退、橫走,不限步數(shù)。 (8)炮在不吃子的時(shí)候,走法同車一樣。 (9)兵(卒)在沒有過“河界”前,每著只許向前直走一步;過“河界”后,每著可以向前走一步,也可以橫走一步,但不能后退。走一著棋時(shí),如果己方棋子能夠走到的位置有對方棋子存在,就可把對棋子吃掉而占領(lǐng)那個(gè)位置。

7、只有炮吃了必須隔一個(gè)棋子(無論是哪一方的)跳吃,即俗稱“炮打隔子”。除 帥(將)外,其它棋子都可以聽任對方吃,或主動(dòng)送吃。一方的棋子攻擊對方的帥(將),并在下一著要把它吃掉,稱為“將軍”,或簡稱“將”。被“將軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的著法去化解被“將”的狀態(tài)。如果被“將軍”而無法“應(yīng)將”,就算被“將死”。輪到走棋的一方,帥(將)雖沒被對方“將軍”,卻被禁在一個(gè)位置上無路可走,同時(shí)己方其它棋子也都不能走動(dòng),就算被“困斃”。1.2總體設(shè)計(jì)本系統(tǒng)實(shí)現(xiàn)了三個(gè)功能,即新游戲:開始一局新的對弈;悔棋:將棋子返回剛才所處位置;退出:退出本程序;信息提示:提示當(dāng)前信息狀態(tài)。功能圖如圖1-1所示。圖

8、1-1 功能圖簡單類圖如圖1-2所示。圖1-2 簡單類圖2詳細(xì)設(shè)計(jì) 本文結(jié)合在中國象棋機(jī)器博弈方面的實(shí)踐經(jīng)驗(yàn),在分析了中國象棋游戲需求基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了中國象棋系統(tǒng)。該系統(tǒng)為人人對戰(zhàn)。人人對戰(zhàn)規(guī)則明確,包含了中國象棋所有的招法。方便了不同水平人群的不同選擇,其它些小功能也增加了本象棋游戲增加了樂趣。本系統(tǒng)的實(shí)現(xiàn)滿足了人們對中國象棋的基本需求,解決了傳統(tǒng)象棋游戲?qū)W習(xí)性差、不易演示等問題。2.1詳細(xì)設(shè)計(jì)思路由上述類圖進(jìn)行分析。中國象棋對弈系統(tǒng)的程序由文件Chess.java實(shí)現(xiàn)。Chess.java主要包括兩個(gè)類:一個(gè)是被定義為public類型的類,名為Chess,主要負(fù)責(zé)中國象棋對弈程序的執(zhí)行

9、;另一個(gè)類名為ChessMainFrame,是程序的主框架類。程序中Chess類通過生成ChessMainFrame類的對象來執(zhí)行程序。ChessMainFrame類主要包含四個(gè)模塊:生成圖形用戶界面模塊,完成按鈕的操作模塊,棋子操作模塊和棋子的移動(dòng)規(guī)則模塊。其中其中棋子的移動(dòng)規(guī)則被定義為內(nèi)部類,名為ChessRule。ChessRule類中的方法用于定義各個(gè)棋子的移動(dòng)規(guī)則和吃子規(guī)則??傮w設(shè)計(jì)流程圖如圖2-1所示。圖2-1 總體設(shè)計(jì)流程 (1)圖形用戶界面模塊 圖形用戶界面是ChessMainFrame類中的基本模塊,它的主要作用是定義該類中所使用的變量和實(shí)例對象,通過構(gòu)造函數(shù)初始化圖形用戶界

10、面,添加組件和棋子,注冊事件組件。(2)按鈕的操作模塊 程序中有三個(gè)按鈕,分別為“新游戲”按鈕,“悔棋”按鈕和“退出”按鈕。單擊“新游戲”按鈕時(shí),程序重新布置棋子,并將保存當(dāng)前操作Vector(向量)清空;單擊“悔棋”按鈕時(shí),調(diào)用Vector中的數(shù)據(jù)進(jìn)行悔棋操作;單擊“退出”向量按鈕時(shí),程序會(huì)詢問是否退出,選“是”則退出對弈。流程圖如圖2-2所示。圖2-2 按鈕模塊流程圖(3)棋子的操作模塊棋子的操作模塊定義了線程,單擊棋子的時(shí)候,可以使棋子閃爍以實(shí)現(xiàn)棋子已經(jīng)被選取的效果,單擊棋子或移動(dòng)時(shí),根據(jù)棋子的編號來判斷使用規(guī)則進(jìn)行移動(dòng)或吃子。需要注意的是,移動(dòng)和吃子是調(diào)用規(guī)則類模塊完成的。流程圖如圖2

11、-3所示:圖2-3 棋子操作模塊流程圖(4)棋子的移動(dòng)規(guī)則類模塊移動(dòng)規(guī)則類ChessRule分別定義中國象棋32個(gè)棋子的移動(dòng)規(guī)則。32個(gè)棋子可分為6類棋子。每一類棋子各有兩個(gè)方法,定義這類棋子的移動(dòng)規(guī)則和吃子規(guī)則。棋子的移動(dòng)規(guī)則如下所述。 帥(將)每次只許走一步,前進(jìn)、后退、橫走都可以,但不能走出“九宮”。將和帥不準(zhǔn)在同一直線上面對面,如一方已占據(jù),另一方就必須回避。 士每次只許沿“九宮”斜線走一步,可進(jìn)可退。 相(相)不能越過“河界”,每一次斜走兩步,可進(jìn)可退,即俗稱“相(象)走田”。當(dāng)田字中心有別的棋子時(shí),俗稱“塞相(象)眼”,則不許走過去。 馬每次走一直(或一橫)一斜,可進(jìn)可退,即俗稱“

12、馬走日”。如果在要去的方向有別的棋子擋住。俗稱“蹩馬腿”,則不許走過去。 車每次可以直進(jìn)、直退、橫走,不限步數(shù)。炮在不吃子的時(shí)候,走法同車一樣。兵(卒)在沒有過“河界”前,每次只許向前直走一步;過“ 河界”后,每次可向前直走或橫走一步,但不能后退。吃子規(guī)則:在走棋時(shí),如果棋子能夠走到的位置有對方棋子存在,就可以把對方棋子吃掉而占領(lǐng)那個(gè)位置。只有炮在吃子時(shí)必須隔一個(gè)棋子跳吃,即俗稱“炮打隔子”。 帥(將)外其他棋子都可以聽任對方吃。吃子的一方必須立即把被吃掉的子從棋盤上拿掉。3編碼實(shí)現(xiàn)源代碼/* *中國象棋Java版 *作者:程偉 *源文件:Chess.java *添加功能:實(shí)現(xiàn)了當(dāng)前棋局的保存

13、 */import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/主類public class Chesspublic static void main(String args)new ChessMainFrame("中國象棋:觀棋不語真君子,棋死無悔大丈夫");/主框架類class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable/玩家JLabel play =

14、 new JLabel32;/棋盤JLabel image;/窗格Container con;/工具欄JToolBar jmain;/重新開始JButton anew;/悔棋JButton repent;/退出JButton exit;/當(dāng)前信息JLabel text;/保存當(dāng)前操作Vector Var;/規(guī)則類對象(使于調(diào)用方法)ChessRule rule;/* 單擊棋子* chessManClick = true 閃爍棋子 并給線程響應(yīng)* chessManClick = false 吃棋子 停止閃爍 并給線程響應(yīng)*/boolean chessManClick;/* 控制玩家走棋* che

15、ssPlayClick=1 黑棋走棋* chessPlayClick=2 紅棋走棋 默認(rèn)紅棋* chessPlayClick=3 雙方都不能走棋*/int chessPlayClick=2;/控制棋子閃爍的線程Thread tmain;/把第一次的單擊棋子給線程響應(yīng)static int Man,i;ChessMainFrame()new ChessMainFrame("中國象棋");/* 構(gòu)造函數(shù)* 初始化圖形用戶界面*/ChessMainFrame(String Title)/獲行客格引用con = this.getContentPane();con.setLayout(

16、null);/實(shí)例化規(guī)則類rule = new ChessRule();Var = new Vector();/創(chuàng)建工具欄jmain = new JToolBar();text = new JLabel("歡迎使用象棋對弈系統(tǒng)");/當(dāng)鼠標(biāo)放上顯示信息text.setToolTipText("信息提示");anew = new JButton(" 新 游 戲 ");anew.setToolTipText("重新開始新的一局");exit = new JButton(" 退 出 ");exit.s

17、etToolTipText("退出象棋程序程序");repent = new JButton(" 悔 棋 ");repent.setToolTipText("返回到上次走棋的位置");/把組件添加到工具欄jmain.setLayout(new GridLayout(0,4);jmain.add(anew);jmain.add(repent);jmain.add(exit);jmain.add(text);jmain.setBounds(0,0,558,30);con.add(jmain);/添加棋子標(biāo)簽drawChessMan();/

18、注冊按扭監(jiān)聽anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);/注冊棋子移動(dòng)監(jiān)聽for (int i=0;i<32;i+)con.add(playi);playi.addMouseListener(this);/添加棋盤標(biāo)簽con.add(image = new JLabel(new ImageIcon("imageMain.GIF");image.setBounds(0,30,558,620);image.addMouseListener(

19、this);/注冊窗體關(guān)閉監(jiān)聽this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent we)System.exit(0););/窗體居中Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();Dimension frameSize = this.getSize();if (frameSize.height > screenSize.height)frameSize.height = screenSize.h

20、eight;if (frameSize.width > screenSize.width)frameSize.width = screenSize.width;this.setLocation(screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350);/設(shè)置this.setIconImage(new ImageIcon("image紅將.GIF").getImage();this.setResizable(false);this.s

21、etTitle(Title);this.setSize(558,670);this.show();/* 添加棋子方法*/public void drawChessMan()/流程控制int i,k;/圖標(biāo)Icon in;/黑色棋子/車in = new ImageIcon("image黑車.GIF");for (i=0,k=24;i<2;i+,k+=456)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName("車1");/馬in = new ImageIcon("

22、image黑馬.GIF");for (i=4,k=81;i<6;i+,k+=342)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName("馬1");/相in = new ImageIcon("image黑象.GIF");for (i=8,k=138;i<10;i+,k+=228)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName("象1");/士in = ne

23、w ImageIcon("image黑士.GIF");for (i=12,k=195;i<14;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,56,55,55);playi.setName("士1");/卒in = new ImageIcon("image黑卒.GIF");for (i=16,k=24;i<21;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,227,55,55);playi.setName(&qu

24、ot;卒1" + i);/炮in = new ImageIcon("image黑炮.GIF");for (i=26,k=81;i<28;i+,k+=342)playi = new JLabel(in);playi.setBounds(k,170,55,55);playi.setName("炮1" + i);/將in = new ImageIcon("image黑將.GIF");play30 = new JLabel(in);play30.setBounds(252,56,55,55);play30.setName(&q

25、uot;將1");/紅色棋子/車in = new ImageIcon("image紅車.GIF");for (i=2,k=24;i<4;i+,k+=456)playi = new JLabel(in);playi.setBounds(k,569,55,55);playi.setName("車2");/馬in = new ImageIcon("image紅馬.GIF");for (i=6,k=81;i<8;i+,k+=342)playi = new JLabel(in);playi.setBounds(k,569,

26、55,55);playi.setName("馬2");/相in = new ImageIcon("image紅象.GIF");for (i=10,k=138;i<12;i+,k+=228)playi = new JLabel(in);playi.setBounds(k,569,55,55);playi.setName("象2");/士in = new ImageIcon("image紅士.GIF");for (i=14,k=195;i<16;i+,k+=114)playi = new JLabel(in

27、);playi.setBounds(k,569,55,55);playi.setName("士2");/兵in = new ImageIcon("image紅卒.GIF");for (i=21,k=24;i<26;i+,k+=114)playi = new JLabel(in);playi.setBounds(k,398,55,55);playi.setName("卒2" + i);/炮in = new ImageIcon("image紅炮.GIF");for (i=28,k=81;i<30;i+,k+

28、=342)playi = new JLabel(in);playi.setBounds(k,455,55,55);playi.setName("炮2" + i);/帥in = new ImageIcon("image紅將.GIF");play31 = new JLabel(in);play31.setBounds(252,569,55,55);play31.setName("帥2");/* 線程方法控制棋子閃爍*/public void run()while (true)/單擊棋子第一下開始閃爍if (chessManClick)pl

29、ayMan.setVisible(false);/時(shí)間控制trytmain.sleep(200);catch(Exception e)playMan.setVisible(true);/閃爍當(dāng)前提示信息 以免用戶看不見else text.setVisible(false);/時(shí)間控制trytmain.sleep(250);catch(Exception e)text.setVisible(true);trytmain.sleep(350);catch (Exception e)/* 單擊棋子方法*/public void mouseClicked(MouseEvent me)System.ou

30、t.println("Mouse");/當(dāng)前坐標(biāo)int Ex=0,Ey=0;/啟動(dòng)線程if (tmain = null)tmain = new Thread(this);tmain.start();/單擊棋盤(移動(dòng)棋子)if (me.getSource().equals(image)/該紅棋走棋的時(shí)候if (chessPlayClick = 2 && playMan.getName().charAt(1) = '2')Ex = playMan.getX();Ey = playMan.getY();/移動(dòng)卒、兵if (Man > 15 &

31、amp;& Man < 26)rule.armsRule(Man,playMan,me);/移動(dòng)炮else if (Man > 25 && Man < 30)rule.cannonRule(playMan,play,me);/移動(dòng)車else if (Man >=0 && Man < 4)rule.cannonRule(playMan,play,me);/移動(dòng)馬else if (Man > 3 && Man < 8)rule.horseRule(playMan,play,me);/移動(dòng)相、象else

32、 if (Man > 7 && Man < 12)rule.elephantRule(Man,playMan,play,me);/移動(dòng)仕、士else if (Man > 11 && Man < 16)rule.chapRule(Man,playMan,play,me);/移動(dòng)將、帥else if (Man = 30 | Man = 31)rule.willRule(Man,playMan,play,me);/是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if (Ex = playMan.getX() && Ey = playMan.ge

33、tY()text.setText(" 紅棋走棋");chessPlayClick=2;else text.setText(" 黑棋走棋");chessPlayClick=1;/if/該黑棋走棋的時(shí)候else if (chessPlayClick = 1 && playMan.getName().charAt(1) = '1')Ex = playMan.getX();Ey = playMan.getY();/移動(dòng)卒、兵if (Man > 15 && Man < 26)rule.armsRule(M

34、an,playMan,me);/移動(dòng)炮else if (Man > 25 && Man < 30)rule.cannonRule(playMan,play,me);/移動(dòng)車else if (Man >=0 && Man < 4)rule.cannonRule(playMan,play,me);/移動(dòng)馬else if (Man > 3 && Man < 8)rule.horseRule(playMan,play,me);/移動(dòng)相、象else if (Man > 7 && Man < 1

35、2)rule.elephantRule(Man,playMan,play,me);/移動(dòng)仕、士else if (Man > 11 && Man < 16)rule.chapRule(Man,playMan,play,me);/移動(dòng)將、帥else if (Man = 30 | Man = 31)rule.willRule(Man,playMan,play,me);/是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if (Ex = playMan.getX() && Ey = playMan.getY()text.setText(" 黑棋走棋");c

36、hessPlayClick=1;else text.setText(" 紅棋走棋");chessPlayClick=2;/else if/當(dāng)前沒有操作(停止閃爍)chessManClick=false;/if/單擊棋子else/第一次單擊棋子(閃爍棋子)if (!chessManClick)for (int i=0;i<32;i+)/被單擊的棋子if (me.getSource().equals(playi)/告訴線程讓該棋子閃爍Man=i;/開始閃爍chessManClick=true;break;/for/if/第二次單擊棋子(吃棋子)else if (chess

37、ManClick)/當(dāng)前沒有操作(停止閃爍)chessManClick=false;for (i=0;i<32;i+)/找到被吃的棋子if (me.getSource().equals(playi)/該紅棋吃棋的時(shí)候if (chessPlayClick = 2 && playMan.getName().charAt(1) = '2')Ex = playMan.getX();Ey = playMan.getY();/卒、兵吃規(guī)則if (Man > 15 && Man < 26)rule.armsRule(playMan,playi

38、);/炮吃規(guī)則else if (Man > 25 && Man < 30)rule.cannonRule(0,playMan,playi,play,me);/車吃規(guī)則else if (Man >=0 && Man < 4)rule.cannonRule(1,playMan,playi,play,me);/馬吃規(guī)則else if (Man > 3 && Man < 8)rule.horseRule(playMan,playi,play,me);/相、象吃規(guī)則else if (Man > 7 &&am

39、p; Man < 12)rule.elephantRule(playMan,playi,play);/士、仕吃棋規(guī)則else if (Man > 11 && Man < 16)rule.chapRule(Man,playMan,playi,play);/將、帥吃棋規(guī)則else if (Man = 30 | Man = 31)rule.willRule(Man,playMan,playi,play);playMan.setVisible(true);/是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if (Ex = playMan.getX() && Ey =

40、playMan.getY()text.setText(" 紅棋走棋");chessPlayClick=2;break;elsetext.setText(" 黑棋走棋");chessPlayClick=1;break;/if/該黑棋吃棋的時(shí)候else if (chessPlayClick = 1 && playMan.getName().charAt(1) = '1')Ex = playMan.getX();Ey = playMan.getY();/卒吃規(guī)則if (Man > 15 && Man <

41、; 26)rule.armsRule(playMan,playi);/炮吃規(guī)則else if (Man > 25 && Man < 30)rule.cannonRule(0,playMan,playi,play,me);/車吃規(guī)則else if (Man >=0 && Man < 4)rule.cannonRule(1,playMan,playi,play,me);/馬吃規(guī)則else if (Man > 3 && Man < 8)rule.horseRule(playMan,playi,play,me);/相、

42、象吃規(guī)則else if (Man > 7 && Man < 12)rule.elephantRule(playMan,playi,play);/士、仕吃棋規(guī)則else if (Man > 11 && Man < 16)rule.chapRule(Man,playMan,playi,play);/將、帥吃棋規(guī)則else if (Man = 30 | Man = 31)rule.willRule(Man,playMan,playi,play);playMan.setVisible(true);/是否走棋錯(cuò)誤(是否在原地沒有動(dòng))if (Ex =

43、 playMan.getX() && Ey = playMan.getY()text.setText(" 黑棋走棋");chessPlayClick=1;break;else text.setText(" 紅棋走棋");chessPlayClick=2;break;/else if /if/for/是否勝利if (!play31.isVisible()JOptionPane.showConfirmDialog(this,"黑棋勝利","玩家一勝利",JOptionPane.DEFAULT_OPTIO

44、N,JOptionPane.WARNING_MESSAGE);/雙方都不可以在走棋了chessPlayClick=3;text.setText(" 黑棋勝利");/if else if (!play30.isVisible()JOptionPane.showConfirmDialog(this,"紅棋勝利","玩家二勝利",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);chessPlayClick=3;text.setText(" 紅棋勝利");/e

45、lse if/else/elsepublic void mousePressed(MouseEvent me)public void mouseReleased(MouseEvent me)public void mouseEntered(MouseEvent me)public void mouseExited(MouseEvent me)/* 定義按鈕的事件響應(yīng)*/public void actionPerformed(ActionEvent ae) /重新開始按鈕if (ae.getSource().equals(anew)int i,k;/重新排列每個(gè)棋子的位置/黑色棋子/車for (

46、i=0,k=24;i<2;i+,k+=456)playi.setBounds(k,56,55,55);/馬for (i=4,k=81;i<6;i+,k+=342)playi.setBounds(k,56,55,55);/相for (i=8,k=138;i<10;i+,k+=228)playi.setBounds(k,56,55,55);/士for (i=12,k=195;i<14;i+,k+=114)playi.setBounds(k,56,55,55);/卒for (i=16,k=24;i<21;i+,k+=114)playi.setBounds(k,227,55,55);/炮for (i=26,k=81;i<28;i+,k+=342)playi.setBounds(k,170,55,55);/將play30.setBounds(252,56,55,55);/紅色棋子/車for (i=2,k=24;i<4;i+,k+=456)playi.setBounds(k,569,55,55);/馬for (i=6,k=81;i<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論