版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 摘要1</b></p><p><b> 關(guān)鍵字1</b></p><p><b> 正文2</b></p><p> 1、程序設計說明2</p><
2、;p> 1.1 程序的設計及實現(xiàn)2</p><p> 1.1.1搜索引擎的實現(xiàn)(engine包)2</p><p> 1.1.2信息傳輸機制(message包)3</p><p> 1.1.3棋子(pieces包)3</p><p> 1.2 主控模塊(main包)3</p><p><
3、b> 2、運行結(jié)果5</b></p><p><b> 3、設計體會6</b></p><p><b> 附件7</b></p><p><b> 程序代碼7</b></p><p> 參 考 文 獻 資 料41</p>&l
4、t;p> Java語言程序設計實驗報告</p><p> 實驗項目名稱:中國象棋對弈系統(tǒng)</p><p> 作者姓名與單位:李非 計算機101</p><p><b> 摘要:</b></p><p> 本文主要是運用java實現(xiàn)具有一定功能的中國象棋對弈系統(tǒng)軟件,主要功能如下:</p>
5、<p> 象棋對弈:紅方先走,然后黑方再走,紅黑交替,直到一方獲勝。</p><p> 新游戲:任何時候可以重新開始一盤新的對弈。</p><p> 悔棋:當走錯棋的時候可以悔棋。</p><p> 信息提示:提示當前信息狀態(tài)。</p><p> 簡單的幫助文檔:象棋規(guī)則介紹、軟件的簡單介紹和編制說明</p>
6、<p> 關(guān)鍵詞:java、中國象棋對弈系統(tǒng) </p><p><b> 正文:</b></p><p><b> 一 程序設計說明</b></p><p> 1.1程序的設計及實現(xiàn)</p><p> 本系統(tǒng)主要有以下4個模塊,每個模塊對應一個程序包:</p>&
7、lt;p> 1、engine:搜索引擎包,系統(tǒng)的核心部分。</p><p> 2、message:網(wǎng)絡對戰(zhàn)過程中各種消息及其傳遞機制的類實現(xiàn)包。</p><p> 3、main:主界面實現(xiàn)包。</p><p> 4、pieces:棋子及其相關(guān)類實現(xiàn)包。</p><p> 現(xiàn)就各個包中的要點給與說明。</p>&l
8、t;p> 1.1.1 搜索引擎的實現(xiàn)(engine包)</p><p> (1) BitBoard.java:位棋盤的實現(xiàn),見2.4節(jié)。</p><p> (2) CCEvalue.java:評價函數(shù)知識類。</p><p> 本程序使用開源軟件“夢入神蛋”的快速評價函數(shù)。該函數(shù)包含子力價值和棋子所在位置的獎勵值。子力價值分別是:帥-0, 仕- 40,
9、 象-40, 馬-88, 車-200, 炮-96, 兵-9。帥是無價的,用0表示。以馬為例,位置的獎勵值如下:</p><p> 0, -3, 5, 4, 2, 2, 5, 4, 2, 2,</p><p> -3, 2, 4, 6,10,12,20,10, 8, 2,</p><p> 2, 4, 6,10,13,11,12,11,15, 2,</p
10、><p> 0, 5, 7, 7,14,15,19,15, 9, 8,</p><p> 2,-10, 4,10,15,16,12,11, 6, 2,</p><p> 0, 5, 7, 7,14,15,19,15, 9, 8,</p><p> 2, 4, 6,10,13,11,12,11,15, 2,</p>&l
11、t;p> -3, 2, 4, 6,10,12,20,10, 8, 2,</p><p> 0, -3, 5, 4, 2, 2, 5, 4, 2, 2 </p><p> 上面的每行代表棋盤的一條縱線。其中,-10所在的位置是“窩心馬”,所以要罰10分。</p><p> (3) ChessPosition.java:動態(tài)局面類</p>
12、<p> 包含對局過程中的動態(tài)信息,主要實現(xiàn)的是2.4節(jié)的各類位棋盤和移子函數(shù)。</p><p> (4) MoveStruct.java:著法表示類。</p><p> (5) PreMove.java:偽合法著法生成模塊,見4.1。</p><p> (6) MoveSortStruct.java:合法著法的生成及其排序算法,見4.2。<
13、/p><p> (7) SearchMove.java:搜索算法,實現(xiàn)如下功能:</p><p> 1)主置換表及開局庫</p><p> 2)Alpha-Beta搜索算法</p><p> 3)針對吃子著法的靜態(tài)搜索算法</p><p> 4)適應性空著裁剪算法:見5.5.2,根據(jù)不同情況來調(diào)整R值的做法,稱為
14、“適應性空著裁剪”(Adaptive Null-Move Pruning),它首先由Ernst Heinz發(fā)表在1999年的ICCA雜志上。其內(nèi)容可以概括為:</p><p> a. 深度小于或等于6時,用R = 2的空著裁剪進行搜索</p><p> b. 深度大于8時,用R = 3; </p><p> c. 深度是6或7時,如果每方棋子都大于或等于3個,
15、則用 R = 3,否則用 R = 2。</p><p> 5)帶時間控制的迭代加深搜索算法:每次加深搜索都判斷時間是否夠用。</p><p> 6)“將軍”擴展(加深)搜索算法:當搜索到己方被“將”時,增加搜索的深度。</p><p> 7)主要變例搜索算法</p><p> 1.1.2 信息傳輸機制(message包)</p&
16、gt;<p> 在對弈過程中(主要是網(wǎng)絡對弈)需要在對弈雙方之間傳輸各類信息,抽象為各類消息。如時間規(guī)則的協(xié)定、各方的走子信息等。每方都有消息接收、消息處理和消息發(fā)送程序(OuterMsgReceiver、LocalMsgReceiver,QzMessageHandler,MessageSender)。己方的MessageSender與對方的OuterMsgReceiver通過接口SrConnection連接。所有接收的
17、消息放入消息隊列QzMsgQueue中,等待消息處理進程QzMessageHandler來處理。所有的消息都封裝在QzMessage類對象中,消息的類型通過消息的Header類型(以靜態(tài)常量存放在MsgHeader類中)來區(qū)分。</p><p> 1.1.3 棋子(pieces包)</p><p> Qizi.java包含棋子的信息,如棋子的(在棋盤上的)位置、圖片、名稱、類型、狀態(tài)等
18、。PiecesFactory.java以“工廠”模式提供根據(jù)棋子類型或其他信息生成相關(guān)Qizi對象的方法。</p><p> 1.2主控模塊(main包)</p><p> 實現(xiàn)了程序界面與消息傳遞、搜索引擎的集成。</p><p> (1) NewBoard.java:棋盤坐標系統(tǒng)及其界面的實現(xiàn)。</p><p> (2) CChe
19、ssApp.java:主界面類,以內(nèi)部類實現(xiàn)了QzMessageHandler接口、計時規(guī)則TimeRule接口以及事件的處理程序,根據(jù)需要生成其他的并發(fā)線程如消息接收、處理和發(fā)送,機器思考(啟動搜索引擎),計時顯示等。</p><p> (3) SetRuleDialog.java:設置規(guī)則的對話框。</p><p> (4) SetSysInfoDialog.java:設置系統(tǒng)的一
20、些屬性如對戰(zhàn)模式、連接端口等。</p><p> (5) Translation.java:提供了一系列實用方法主要有:</p><p> 1)FEN串與局面ChessPosition對象之間的轉(zhuǎn)換</p><p> 2)不同著法表示(見第一章)之間的轉(zhuǎn)換。如“炮二平五”與“Ch2-e2”及“62.5或C2.5“(C和6代表炮)這幾種表示法之間的轉(zhuǎn)換</
21、p><p> 3)棋譜文件的讀入和存儲。</p><p> 4)開局庫的生成:將近年實戰(zhàn)的棋譜文件(可能有幾種格式)整理生成開局庫。</p><p><b> 運行結(jié)果:</b></p><p><b> 設計體會:</b></p><p> 本次課程設計主要是運用本學
22、期所學到的Java基礎(chǔ)知識來設計一個符合要求的中國象棋對弈系統(tǒng),這期間我遇到了很多的困難,發(fā)現(xiàn)了很多的問題,正是在解決問題的期間我才慢慢地熟悉了Java的基礎(chǔ)知識,才慢慢學會了如何去按照給定的要求設計出合適的java系統(tǒng)。</p><p> 通過本次課程設計,我明白了一個道理:無論做什么事情,都必需養(yǎng)成嚴謹,認真,善思的工作作風遇到問題最好的辦法就是請教別人,因為每個人掌握的情況都不一樣,一個人不可能做到處處都
23、懂,必須發(fā)揮群眾的力量,復雜的事情才能夠簡單化。這一點我深有體會,在很多時候,我遇到的困難或許別人之前就遇到過,向他們請教遠比自己在那邊摸索來得簡單,來得快。</p><p><b> 附件</b></p><p><b> 程序代碼:</b></p><p> import java.awt.*;</p>
24、;<p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p> import java.util.*;</p><p> import java.io.*;</p><p> public class Chess{</p>&l
25、t;p> public static void main(String args[]){</p><p> new ChessMainFrame("中國象棋:觀棋不語真君子,棋死無悔大丈夫");</p><p><b> }</b></p><p><b> }</b></p>
26、<p> class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{</p><p><b> //玩家</b></p><p> JLabel play[] = new JLabel[32];</p><p>&
27、lt;b> //棋盤</b></p><p> JLabel image;</p><p><b> //窗格</b></p><p> Container con;</p><p><b> //工具欄</b></p><p> JToolB
28、ar jmain;</p><p><b> //重新開始</b></p><p> JButton anew;</p><p><b> //悔棋</b></p><p> JButton repent;</p><p><b> //退出</b
29、></p><p> JButton exit;</p><p><b> //當前信息</b></p><p> JLabel text;</p><p><b> //保存當前操作</b></p><p> Vector Var;</p>&
30、lt;p> //規(guī)則類對象(使于調(diào)用方法)</p><p> ChessRule rule;</p><p><b> /**</b></p><p><b> ** 單擊棋子</b></p><p> ** chessManClick = true 閃爍棋子 并給線程響應</
31、p><p> ** chessManClick = false 吃棋子 停止閃爍 并給線程響應</p><p><b> */</b></p><p> boolean chessManClick;</p><p><b> /**</b></p><p><b&
32、gt; ** 控制玩家走棋</b></p><p> ** chessPlayClick=1 黑棋走棋</p><p> ** chessPlayClick=2 紅棋走棋 默認紅棋</p><p> ** chessPlayClick=3 雙方都不能走棋</p><p><b> */</b><
33、;/p><p> int chessPlayClick=2;</p><p> //控制棋子閃爍的線程</p><p> Thread tmain;</p><p> //把第一次的單擊棋子給線程響應</p><p> static int Man,i;</p><p> ChessMa
34、inFrame(){</p><p> new ChessMainFrame("中國象棋");</p><p><b> }</b></p><p><b> /**</b></p><p><b> ** 構(gòu)造函數(shù)</b></p>&
35、lt;p> ** 初始化圖形用戶界面</p><p><b> */</b></p><p> ChessMainFrame(String Title){</p><p><b> //獲行客格引用</b></p><p> con = this.getContentPane();&
36、lt;/p><p> con.setLayout(null);</p><p><b> //實例化規(guī)則類</b></p><p> rule = new ChessRule();</p><p> Var = new Vector();</p><p><b> //創(chuàng)建工具欄&
37、lt;/b></p><p> jmain = new JToolBar();</p><p> text = new JLabel("歡迎使用象棋對弈系統(tǒng)");</p><p> //當鼠標放上顯示信息</p><p> text.setToolTipText("信息提示");</
38、p><p> anew = new JButton(" 新 游 戲 ");</p><p> anew.setToolTipText("重新開始新的一局");</p><p> exit = new JButton(" 退 出 ");</p><p> exit.setTool
39、TipText("退出象棋程序程序");</p><p> repent = new JButton(" 悔 棋 ");</p><p> repent.setToolTipText("返回到上次走棋的位置");</p><p> //把組件添加到工具欄</p><p>
40、jmain.setLayout(new GridLayout(0,4));</p><p> jmain.add(anew);</p><p> jmain.add(repent);</p><p> jmain.add(exit);</p><p> jmain.add(text);</p><p> jm
41、ain.setBounds(0,0,558,30);</p><p> con.add(jmain);</p><p><b> //添加棋子標簽</b></p><p> drawChessMan();</p><p><b> //注冊按扭監(jiān)聽</b></p><p&
42、gt; anew.addActionListener(this);</p><p> repent.addActionListener(this);</p><p> exit.addActionListener(this);</p><p> //注冊棋子移動監(jiān)聽</p><p> for (int i=0;i<32;i
43、++){</p><p> con.add(play[i]);</p><p> play[i].addMouseListener(this);</p><p><b> }</b></p><p><b> //添加棋盤標簽</b></p><p> con.ad
44、d(image = new JLabel(new ImageIcon("image\\Main.GIF")));</p><p> image.setBounds(0,30,558,620);</p><p> image.addMouseListener(this);</p><p> //注冊窗體關(guān)閉監(jiān)聽</p><
45、p> this.addWindowListener(</p><p> new WindowAdapter() {</p><p> public void windowClosing(WindowEvent we){</p><p> System.exit(0);</p><p><b> }</b>
46、</p><p><b> }</b></p><p><b> );</b></p><p><b> //窗體居中</b></p><p> Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSi
47、ze();</p><p> Dimension frameSize = this.getSize();</p><p> if (frameSize.height > screenSize.height){</p><p> frameSize.height = screenSize.height;</p><p><b&
48、gt; }</b></p><p> if (frameSize.width > screenSize.width){</p><p> frameSize.width = screenSize.width;</p><p><b> }</b></p><p> this.setLocati
49、on((screenSize.width - frameSize.width) / 2 - 280 ,(screenSize.height - frameSize.height ) / 2 - 350);</p><p><b> //設置</b></p><p> this.setIconImage(new ImageIcon("image\\紅將.G
50、IF").getImage());</p><p> this.setResizable(false);</p><p> this.setTitle(Title);</p><p> this.setSize(558,670);</p><p> this.show();</p><p><b
51、> }</b></p><p><b> /**</b></p><p><b> ** 添加棋子方法</b></p><p><b> */</b></p><p> public void drawChessMan(){</p>&
52、lt;p><b> //流程控制</b></p><p><b> int i,k;</b></p><p><b> //圖標</b></p><p><b> Icon in;</b></p><p><b> //黑色棋子&
53、lt;/b></p><p><b> //車</b></p><p> in = new ImageIcon("image\\黑車.GIF");</p><p> for (i=0,k=24;i<2;i++,k+=456){</p><p> play[i] = new JL
54、abel(in);</p><p> play[i].setBounds(k,56,55,55);</p><p> play[i].setName("車1");</p><p><b> }</b></p><p><b> //馬</b></p>
55、<p> in = new ImageIcon("image\\黑馬.GIF");</p><p> for (i=4,k=81;i<6;i++,k+=342){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,56,55,55);<
56、;/p><p> play[i].setName("馬1");</p><p><b> }</b></p><p><b> //相</b></p><p> in = new ImageIcon("image\\黑象.GIF");</p>
57、<p> for (i=8,k=138;i<10;i++,k+=228){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,56,55,55);</p><p> play[i].setName("象1");</p><
58、p><b> }</b></p><p><b> //士</b></p><p> in = new ImageIcon("image\\黑士.GIF");</p><p> for (i=12,k=195;i<14;i++,k+=114){</p><p>
59、; play[i] = new JLabel(in);</p><p> play[i].setBounds(k,56,55,55);</p><p> play[i].setName("士1");</p><p><b> }</b></p><p><b> //卒</b
60、></p><p> in = new ImageIcon("image\\黑卒.GIF");</p><p> for (i=16,k=24;i<21;i++,k+=114){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(
61、k,227,55,55);</p><p> play[i].setName("卒1" + i);</p><p><b> }</b></p><p><b> //炮</b></p><p> in = new ImageIcon("image\\黑炮.GI
62、F");</p><p> for (i=26,k=81;i<28;i++,k+=342){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,170,55,55);</p><p> play[i].setName("炮1&
63、quot; + i);</p><p><b> }</b></p><p><b> //將</b></p><p> in = new ImageIcon("image\\黑將.GIF");</p><p> play[30] = new JLabel(in);<
64、;/p><p> play[30].setBounds(252,56,55,55);</p><p> play[30].setName("將1");</p><p><b> //紅色棋子</b></p><p><b> //車</b></p><p&
65、gt; in = new ImageIcon("image\\紅車.GIF");</p><p> for (i=2,k=24;i<4;i++,k+=456){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,569,55,55);</p>
66、<p> play[i].setName("車2");</p><p><b> }</b></p><p><b> //馬</b></p><p> in = new ImageIcon("image\\紅馬.GIF");</p><p&g
67、t; for (i=6,k=81;i<8;i++,k+=342){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,569,55,55);</p><p> play[i].setName("馬2");</p><p><b
68、> }</b></p><p><b> //相</b></p><p> in = new ImageIcon("image\\紅象.GIF");</p><p> for (i=10,k=138;i<12;i++,k+=228){</p><p> play
69、[i] = new JLabel(in);</p><p> play[i].setBounds(k,569,55,55);</p><p> play[i].setName("象2");</p><p><b> }</b></p><p><b> //士</b>&l
70、t;/p><p> in = new ImageIcon("image\\紅士.GIF");</p><p> for (i=14,k=195;i<16;i++,k+=114){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,569
71、,55,55);</p><p> play[i].setName("士2");</p><p><b> }</b></p><p><b> //兵</b></p><p> in = new ImageIcon("image\\紅卒.GIF");
72、</p><p> for (i=21,k=24;i<26;i++,k+=114){</p><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,398,55,55);</p><p> play[i].setName("卒2" + i);&
73、lt;/p><p><b> }</b></p><p><b> //炮</b></p><p> in = new ImageIcon("image\\紅炮.GIF");</p><p> for (i=28,k=81;i<30;i++,k+=342){</p
74、><p> play[i] = new JLabel(in);</p><p> play[i].setBounds(k,455,55,55);</p><p> play[i].setName("炮2" + i);</p><p><b> }</b></p><p>&
75、lt;b> //帥</b></p><p> in = new ImageIcon("image\\紅將.GIF");</p><p> play[31] = new JLabel(in);</p><p> play[31].setBounds(252,569,55,55);</p><p
76、> play[31].setName("帥2");</p><p><b> }</b></p><p><b> /**</b></p><p> ** 線程方法控制棋子閃爍</p><p><b> */</b></p>&
77、lt;p> public void run(){</p><p> while (true){</p><p> //單擊棋子第一下開始閃爍</p><p> if (chessManClick){</p><p> play[Man].setVisible(false);</p><p><b&
78、gt; //時間控制</b></p><p><b> try{</b></p><p> tmain.sleep(200);</p><p><b> }</b></p><p> catch(Exception e){</p><p><b&g
79、t; }</b></p><p> play[Man].setVisible(true);</p><p><b> }</b></p><p> //閃爍當前提示信息 以免用戶看不見</p><p> else {text.setVisible(false);//時間控制</p>&
80、lt;p> try{tmain.sleep(250);</p><p><b> }</b></p><p> catch(Exception e){</p><p><b> }</b></p><p> text.setVisible(true);</p><
81、p><b> }</b></p><p> try{tmain.sleep(350);</p><p><b> }</b></p><p> catch (Exception e){</p><p><b> }</b></p><p>
82、;<b> }</b></p><p><b> }</b></p><p><b> /**</b></p><p> ** 單擊棋子方法*/</p><p> public void mouseClicked(MouseEvent me){</p>
83、<p> System.out.println("Mouse");//當前坐標</p><p> int Ex=0,Ey=0; //啟動線程</p><p> if (tmain == null){</p><p> tmain = new Thread(this);</p><p> tmain.s
84、tart();</p><p> } //單擊棋盤(移動棋子)</p><p> if (me.getSource().equals(image)){//該紅棋走棋的時候</p><p> if (chessPlayClick == 2 && play[Man].getName().charAt(1) == '2'){
85、</p><p> Ex = play[Man].getX();</p><p> Ey = play[Man].getY();//移動卒、兵</p><p> if (Man > 15 && Man < 26){</p><p> rule.armsRule(Man,play[Man],me);</
86、p><p><b> }//移動炮</b></p><p> else if (Man > 25 && Man < 30){</p><p> rule.cannonRule(play[Man],play,me);</p><p><b> }//移動車</b&
87、gt;</p><p> else if (Man >=0 && Man < 4){</p><p> rule.cannonRule(play[Man],play,me);</p><p><b> }//移動馬</b></p><p> else if (Man > 3 &a
88、mp;& Man < 8){</p><p> rule.horseRule(play[Man],play,me);</p><p><b> }//移動相、象</b></p><p> else if (Man > 7 && Man < 12){</p><p> ru
89、le.elephantRule(Man,play[Man],play,me);</p><p><b> }//移動仕、士</b></p><p> else if (Man > 11 && Man < 16){</p><p> rule.chapRule(Man,play[Man],play,me);<
90、;/p><p><b> }//移動將、帥</b></p><p> else if (Man == 30 || Man == 31){</p><p> rule.willRule(Man,play[Man],play,me);</p><p> }//是否走棋錯誤(是否在原地沒有動)</p>
91、<p> if (Ex == play[Man].getX() && Ey == play[Man].getY()){</p><p> text.setText(" 紅棋走棋");</p><p> chessPlayClick=2;</p><p><b> }<
92、/b></p><p> else {text.setText(" 黑棋走棋");</p><p> chessPlayClick=1;</p><p><b> }</b></p><p> }//if//該黑棋走棋的時候</p><p&
93、gt; else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){</p><p> Ex = play[Man].getX();</p><p> Ey = play[Man].getY();//移動卒、兵</p><p> if (Man &
94、gt; 15 && Man < 26){</p><p> rule.armsRule(Man,play[Man],me);</p><p><b> }//移動炮</b></p><p> else if (Man > 25 && Man < 30){</p><p&
95、gt; rule.cannonRule(play[Man],play,me);</p><p><b> }//移動車</b></p><p> else if (Man >=0 && Man < 4){</p><p> rule.cannonRule(play[Man],play,me);</p&g
96、t;<p><b> }//移動馬</b></p><p> else if (Man > 3 && Man < 8){</p><p> rule.horseRule(play[Man],play,me);</p><p><b> }//移動相、象</b></p&
97、gt;<p> else if (Man > 7 && Man < 12){</p><p> rule.elephantRule(Man,play[Man],play,me);</p><p><b> }//移動仕、士</b></p><p> else if (Man > 11 &a
98、mp;& Man < 16){</p><p> rule.chapRule(Man,play[Man],play,me);</p><p><b> }//移動將、帥</b></p><p> else if (Man == 30 || Man == 31){</p><p> rule.will
99、Rule(Man,play[Man],play,me);</p><p> }//是否走棋錯誤(是否在原地沒有動)</p><p> if (Ex == play[Man].getX() && Ey == play[Man].getY()){</p><p> text.setText(" 黑棋走棋&quo
100、t;);</p><p> chessPlayClick=1;</p><p><b> }</b></p><p> else {text.setText(" 紅棋走棋");</p><p> chessPlayClick=2;</p><p
101、> }}//else if//當前沒有操作(停止閃爍)</p><p> chessManClick=false;</p><p> }//if//單擊棋子</p><p> else{//第一次單擊棋子(閃爍棋子)</p><p> if (!chessManClick){</p><p> f
102、or (int i=0;i<32;i++){</p><p><b> //被單擊的棋子</b></p><p> if (me.getSource().equals(play[i])){</p><p> //告訴線程讓該棋子閃爍</p><p><b> Man=i;</b><
103、;/p><p><b> //開始閃爍</b></p><p> chessManClick=true;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }//for<
104、/b></p><p><b> }//if</b></p><p> //第二次單擊棋子(吃棋子)</p><p> else if (chessManClick){//當前沒有操作(停止閃爍)</p><p> chessManClick=false;</p><p> for
105、 (i=0;i<32;i++){</p><p><b> //找到被吃的棋子</b></p><p> if (me.getSource().equals(play[i])){</p><p> //該紅棋吃棋的時候</p><p> if (chessPlayClick == 2 &&
106、play[Man].getName().charAt(1) == '2'){</p><p> Ex = play[Man].getX();</p><p> Ey = play[Man].getY();</p><p><b> //卒、兵吃規(guī)則</b></p><p> if (Man >
107、; 15 && Man < 26){</p><p> rule.armsRule(play[Man],play[i]);</p><p><b> }</b></p><p><b> //炮吃規(guī)則</b></p><p> else if (Man > 25
108、&& Man < 30){</p><p> rule.cannonRule(0,play[Man],play[i],play,me);</p><p><b> }</b></p><p><b> //車吃規(guī)則</b></p><p> else if (Man &
109、gt;=0 && Man < 4){</p><p> rule.cannonRule(1,play[Man],play[i],play,me);</p><p><b> }</b></p><p><b> //馬吃規(guī)則</b></p><p> else if (
110、Man > 3 && Man < 8){</p><p> rule.horseRule(play[Man],play[i],play,me);</p><p><b> }</b></p><p><b> //相、象吃規(guī)則</b></p><p> else
111、 if (Man > 7 && Man < 12){</p><p> rule.elephantRule(play[Man],play[i],play);</p><p><b> }</b></p><p><b> //士、仕吃棋規(guī)則</b></p><p>
112、 else if (Man > 11 && Man < 16){</p><p> rule.chapRule(Man,play[Man],play[i],play);</p><p><b> }</b></p><p><b> //將、帥吃棋規(guī)則</b></p>&l
113、t;p> else if (Man == 30 || Man == 31){</p><p> rule.willRule(Man,play[Man],play[i],play);</p><p> play[Man].setVisible(true);</p><p><b> }</b></p><p&g
114、t; //是否走棋錯誤(是否在原地沒有動)</p><p> if (Ex == play[Man].getX() && Ey == play[Man].getY()){</p><p> text.setText(" 紅棋走棋");</p><p> chessPlayClick=2;<
115、/p><p><b> break;</b></p><p><b> }</b></p><p> else{text.setText(" 黑棋走棋");</p><p> chessPlayClick=1;break;</p>&
116、lt;p><b> }</b></p><p><b> }//if</b></p><p> //該黑棋吃棋的時候</p><p> else if (chessPlayClick == 1 && play[Man].getName().charAt(1) == '1'){
117、</p><p> Ex = play[Man].getX();</p><p> Ey = play[Man].getY();</p><p><b> //卒吃規(guī)則</b></p><p> if (Man > 15 && Man < 26){</p><p&g
118、t; rule.armsRule(play[Man],play[i]);</p><p><b> }</b></p><p><b> //炮吃規(guī)則</b></p><p> else if (Man > 25 && Man < 30){</p><p> r
119、ule.cannonRule(0,play[Man],play[i],play,me);</p><p><b> }//車吃規(guī)則</b></p><p> else if (Man >=0 && Man < 4){</p><p> rule.cannonRule(1,play[Man],play[i],pl
120、ay,me);</p><p><b> }//馬吃規(guī)則</b></p><p> else if (Man > 3 && Man < 8){</p><p> rule.horseRule(play[Man],play[i],play,me);</p><p><b>
121、}</b></p><p><b> //相、象吃規(guī)則</b></p><p> else if (Man > 7 && Man < 12){</p><p> rule.elephantRule(play[Man],play[i],play);</p><p><b&
122、gt; }</b></p><p><b> //士、仕吃棋規(guī)則</b></p><p> else if (Man > 11 && Man < 16){</p><p> rule.chapRule(Man,play[Man],play[i],play);</p><p>
123、;<b> }</b></p><p><b> //將、帥吃棋規(guī)則</b></p><p> else if (Man == 30 || Man == 31){</p><p> rule.willRule(Man,play[Man],play[i],play);</p><p> pl
124、ay[Man].setVisible(true);</p><p><b> }</b></p><p> //是否走棋錯誤(是否在原地沒有動)</p><p> if (Ex == play[Man].getX() && Ey == play[Man].getY()){text.setText("
125、 黑棋走棋");</p><p> chessPlayClick=1;break;</p><p><b> }</b></p><p><b> else {</b></p><p> text.setText(" 紅棋走
126、棋");</p><p> chessPlayClick=2;</p><p><b> break;</b></p><p><b> }</b></p><p> }//else if </p><p><b> }//if</b&g
127、t;</p><p><b> }//for</b></p><p><b> //是否勝利</b></p><p> if (!play[31].isVisible()){</p><p> JOptionPane.showConfirmDialog(</p><p&g
128、t; this,"黑棋勝利","玩家一勝利",</p><p> JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);</p><p> //雙方都不可以在走棋了</p><p> chessPlayClick=3;</p><p>
129、 text.setText(" 黑棋勝利");</p><p> }//if else if (!play[30].isVisible()){</p><p> JOptionPane.showConfirmDialog(</p><p> this,"紅棋勝利","玩家二勝利",</p>
130、;<p> JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);</p><p> chessPlayClick=3;</p><p> text.setText(" 紅棋勝利");</p><p> }//else if</p><p>
131、;<b> }//else</b></p><p><b> }//else</b></p><p><b> }</b></p><p> public void mousePressed(MouseEvent me){}</p><p> public void
132、mouseReleased(MouseEvent me){}</p><p> public void mouseEntered(MouseEvent me){}</p><p> public void mouseExited(MouseEvent me){}</p><p><b> /**</b></p><p&
133、gt; ** 定義按鈕的事件響應</p><p><b> */</b></p><p> public void actionPerformed(ActionEvent ae) {//重新開始按鈕</p><p> if (ae.getSource().equals(anew)){int i,k;</p><p&g
134、t; //重新排列每個棋子的位置</p><p><b> //黑色棋子</b></p><p><b> //車</b></p><p> for (i=0,k=24;i<2;i++,k+=456){play[i].setBounds(k,56,55,55);}</p><p>
135、<b> //馬</b></p><p> for (i=4,k=81;i<6;i++,k+=342){play[i].setBounds(k,56,55,55);</p><p><b> }//相</b></p><p> for (i=8,k=138;i<10;i++,k+=228){play[
136、i].setBounds(k,56,55,55);</p><p><b> }//士</b></p><p> for (i=12,k=195;i<14;i++,k+=114){</p><p> play[i].setBounds(k,56,55,55);</p><p><b> }//卒&
137、lt;/b></p><p> for (i=16,k=24;i<21;i++,k+=114){</p><p> play[i].setBounds(k,227,55,55);}</p><p><b> //炮</b></p><p> for (i=26,k=81;i<28;i++,k+=
138、342){</p><p> play[i].setBounds(k,170,55,55);}</p><p><b> //將</b></p><p> play[30].setBounds(252,56,55,55);</p><p><b> //紅色棋子</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設計---中國象棋對弈系統(tǒng)程序
- 基于java的中國象棋對弈系統(tǒng)
- 基于java的中國象棋對弈系統(tǒng)
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- 中國象棋棋譜設計java課程設計
- 基于Java的中國象棋對弈系統(tǒng)論文.doc
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng)
- 畢業(yè)設計(論文)中國象棋對弈系統(tǒng)
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng)
- 畢業(yè)設計---中國象棋網(wǎng)上對弈系統(tǒng).doc
- 中國象棋對弈系統(tǒng)配置說明.doc
- c語言課程設計-中國象棋 (2)
- 基于java的中國象棋
- java課程設計--圍棋對弈
- 中國象棋游戲的設計與實現(xiàn)課程設計
- 中國象棋人機對弈程序在Android系統(tǒng)上的設計與實現(xiàn).pdf
- 中國象棋對弈機器人控制系統(tǒng)研究.pdf
- 中國象棋(設計)
評論
0/150
提交評論