《java語言程序設(shè)計(jì)》課程設(shè)計(jì)中國象棋對(duì)弈系統(tǒng)(源碼)
《《java語言程序設(shè)計(jì)》課程設(shè)計(jì)中國象棋對(duì)弈系統(tǒng)(源碼)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《java語言程序設(shè)計(jì)》課程設(shè)計(jì)中國象棋對(duì)弈系統(tǒng)(源碼)(42頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、數(shù)學(xué)與應(yīng)用數(shù)學(xué)專業(yè)Java課程設(shè)計(jì)報(bào)告 java語言程序設(shè)計(jì)課程設(shè)計(jì)姓 名: 王 * 學(xué) 號(hào): 指導(dǎo)教師: 班 級(jí): 所在院系: Java語言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)項(xiàng)目名稱:中國象棋對(duì)弈系統(tǒng)作者姓名與單位:王浩 數(shù)學(xué)與應(yīng)用數(shù)學(xué)專業(yè) 數(shù)學(xué)081班摘要:本文主要是運(yùn)用java實(shí)現(xiàn)具有一定功能的中國象棋對(duì)弈系統(tǒng)軟件,主要功能如下:a、 象棋對(duì)弈:紅方先走,然后黑方再走,紅黑交替,直到一方獲勝。b、 新游戲:任何時(shí)候可以重新開始一盤新的對(duì)弈。c、 悔棋:當(dāng)走錯(cuò)棋的時(shí)候可以悔棋。d、 信息提示:提示當(dāng)前信息狀態(tài)。e、 簡(jiǎn)單的幫助文檔:象棋規(guī)則介紹、軟件的簡(jiǎn)單介紹和編制說明關(guān)鍵詞:java、中國象棋對(duì)弈系統(tǒng)
2、 正文:一 程序設(shè)計(jì)說明1.1程序的設(shè)計(jì)及實(shí)現(xiàn)本系統(tǒng)主要有以下4個(gè)模塊,每個(gè)模塊對(duì)應(yīng)一個(gè)程序包:1、engine:搜索引擎包,系統(tǒng)的核心部分。2、message:網(wǎng)絡(luò)對(duì)戰(zhàn)過程中各種消息及其傳遞機(jī)制的類實(shí)現(xiàn)包。3、main:主界面實(shí)現(xiàn)包。4、pieces:棋子及其相關(guān)類實(shí)現(xiàn)包。現(xiàn)就各個(gè)包中的要點(diǎn)給與說明。1.1.1 搜索引擎的實(shí)現(xiàn)(engine包)(1) BitBoard.java:位棋盤的實(shí)現(xiàn),見2.4節(jié)。(2) CCEvalue.java:評(píng)價(jià)函數(shù)知識(shí)類。本程序使用開源軟件“夢(mèng)入神蛋”的快速評(píng)價(jià)函數(shù)。該函數(shù)包含子力價(jià)值和棋子所在位置的獎(jiǎng)勵(lì)值。子力價(jià)值分別是:帥-0, 仕- 40, 象-40,
3、 馬-88, 車-200, 炮-96, 兵-9。帥是無價(jià)的,用0表示。以馬為例,位置的獎(jiǎng)勵(lì)值如下:0, -3, 5, 4, 2, 2, 5, 4, 2, 2,-3, 2, 4, 6,10,12,20,10, 8, 2,2, 4, 6,10,13,11,12,11,15, 2,0, 5, 7, 7,14,15,19,15, 9, 8,2,-10, 4,10,15,16,12,11, 6, 2,0, 5, 7, 7,14,15,19,15, 9, 8,2, 4, 6,10,13,11,12,11,15, 2,-3, 2, 4, 6,10,12,20,10, 8, 2,0, -3, 5, 4, 2,
4、 2, 5, 4, 2, 2 上面的每行代表棋盤的一條縱線。其中,-10所在的位置是“窩心馬”,所以要罰10分。(3) ChessPosition.java:動(dòng)態(tài)局面類包含對(duì)局過程中的動(dòng)態(tài)信息,主要實(shí)現(xiàn)的是2.4節(jié)的各類位棋盤和移子函數(shù)。(4) MoveStruct.java:著法表示類。(5) PreMove.java:偽合法著法生成模塊,見4.1。(6) MoveSortStruct.java:合法著法的生成及其排序算法,見4.2。(7) SearchMove.java:搜索算法,實(shí)現(xiàn)如下功能:1)主置換表及開局庫2)Alpha-Beta搜索算法3)針對(duì)吃子著法的靜態(tài)搜索算法4)適應(yīng)性空著
5、裁剪算法:見5.5.2,根據(jù)不同情況來調(diào)整R值的做法,稱為“適應(yīng)性空著裁剪”(Adaptive Null-Move Pruning),它首先由Ernst Heinz發(fā)表在1999年的ICCA雜志上。其內(nèi)容可以概括為:a. 深度小于或等于6時(shí),用R = 2的空著裁剪進(jìn)行搜索b. 深度大于8時(shí),用R = 3; c. 深度是6或7時(shí),如果每方棋子都大于或等于3個(gè),則用 R = 3,否則用 R = 2。5)帶時(shí)間控制的迭代加深搜索算法:每次加深搜索都判斷時(shí)間是否夠用。6)“將軍”擴(kuò)展(加深)搜索算法:當(dāng)搜索到己方被“將”時(shí),增加搜索的深度。7)主要變例搜索算法1.1.2 信息傳輸機(jī)制(message包
6、)在對(duì)弈過程中(主要是網(wǎng)絡(luò)對(duì)弈)需要在對(duì)弈雙方之間傳輸各類信息,抽象為各類消息。如時(shí)間規(guī)則的協(xié)定、各方的走子信息等。每方都有消息接收、消息處理和消息發(fā)送程序(OuterMsgReceiver、LocalMsgReceiver,QzMessageHandler,MessageSender)。己方的MessageSender與對(duì)方的OuterMsgReceiver通過接口SrConnection連接。所有接收的消息放入消息隊(duì)列QzMsgQueue中,等待消息處理進(jìn)程QzMessageHandler來處理。所有的消息都封裝在QzMessage類對(duì)象中,消息的類型通過消息的Header類型(以靜態(tài)常量
7、存放在MsgHeader類中)來區(qū)分。1.1.3 棋子(pieces包)Qizi.java包含棋子的信息,如棋子的(在棋盤上的)位置、圖片、名稱、類型、狀態(tài)等。PiecesFactory.java以“工廠”模式提供根據(jù)棋子類型或其他信息生成相關(guān)Qizi對(duì)象的方法。1.2主控模塊(main包)實(shí)現(xiàn)了程序界面與消息傳遞、搜索引擎的集成。(1) NewBoard.java:棋盤坐標(biāo)系統(tǒng)及其界面的實(shí)現(xiàn)。(2) CChessApp.java:主界面類,以內(nèi)部類實(shí)現(xiàn)了QzMessageHandler接口、計(jì)時(shí)規(guī)則TimeRule接口以及事件的處理程序,根據(jù)需要生成其他的并發(fā)線程如消息接收、處理和發(fā)送,機(jī)器
8、思考(啟動(dòng)搜索引擎),計(jì)時(shí)顯示等。(3) SetRuleDialog.java:設(shè)置規(guī)則的對(duì)話框。(4) SetSysInfoDialog.java:設(shè)置系統(tǒng)的一些屬性如對(duì)戰(zhàn)模式、連接端口等。(5) Translation.java:提供了一系列實(shí)用方法主要有:1)FEN串與局面ChessPosition對(duì)象之間的轉(zhuǎn)換2)不同著法表示(見第一章)之間的轉(zhuǎn)換。如“炮二平五”與“Ch2-e2”及“62.5或C2.5“(C和6代表炮)這幾種表示法之間的轉(zhuǎn)換3)棋譜文件的讀入和存儲(chǔ)。4)開局庫的生成:將近年實(shí)戰(zhàn)的棋譜文件(可能有幾種格式)整理生成開局庫。2、 運(yùn)行結(jié)果:3、 設(shè)計(jì)體會(huì):本次課程設(shè)計(jì)主要
9、是運(yùn)用本學(xué)期所學(xué)到的Java基礎(chǔ)知識(shí)來設(shè)計(jì)一個(gè)符合要求的中國象棋對(duì)弈系統(tǒng),這期間我遇到了很多的困難,發(fā)現(xiàn)了很多的問題,正是在解決問題的期間我才慢慢地熟悉了Java的基礎(chǔ)知識(shí),才慢慢學(xué)會(huì)了如何去按照給定的要求設(shè)計(jì)出合適的java系統(tǒng)。通過本次課程設(shè)計(jì),我明白了一個(gè)道理:無論做什么事情,都必需養(yǎng)成嚴(yán)謹(jǐn),認(rèn)真,善思的工作作風(fēng)遇到問題最好的辦法就是請(qǐng)教別人,因?yàn)槊總€(gè)人掌握的情況都不一樣,一個(gè)人不可能做到處處都懂,必須發(fā)揮群眾的力量,復(fù)雜的事情才能夠簡(jiǎn)單化。這一點(diǎn)我深有體會(huì),在很多時(shí)候,我遇到的困難或許別人之前就遇到過,向他們請(qǐng)教遠(yuǎn)比自己在那邊摸索來得簡(jiǎn)單,來得快。附件程序代碼:import java.
10、awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;public class Chesspublic static void main(String args)new ChessMainFrame("中國象棋:觀棋不語真君子,棋死無悔大丈夫");class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable/玩家JLabel play = new J
11、Label32;/棋盤JLabel image;/窗格Container con;/工具欄JToolBar jmain;/重新開始JButton anew;/悔棋JButton repent;/退出JButton exit;/當(dāng)前信息JLabel text;/保存當(dāng)前操作Vector Var;/規(guī)則類對(duì)象(使于調(diào)用方法)ChessRule rule;/* 單擊棋子* chessManClick = true 閃爍棋子 并給線程響應(yīng)* chessManClick = false 吃棋子 停止閃爍 并給線程響應(yīng)*/boolean chessManClick;/* 控制玩家走棋* chessPlay
12、Click=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(null);
13、/實(shí)例化規(guī)則類rule = new ChessRule();Var = new Vector();/創(chuàng)建工具欄jmain = new JToolBar();text = new JLabel("歡迎使用象棋對(duì)弈系統(tǒng)");/當(dāng)鼠標(biāo)放上顯示信息text.setToolTipText("信息提示");anew = new JButton(" 新 游 戲 ");anew.setToolTipText("重新開始新的一局");exit = new JButton(" 退 出 ");exit.setTool
14、TipText("退出象棋程序程序");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();/注冊(cè)按扭監(jiān)聽
15、anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);/注冊(cè)棋子移動(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(this);
16、/注冊(cè)窗體關(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.height;
17、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.setTit
18、le(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("image
19、黑馬.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 = new Ima
20、geIcon("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("卒1
21、" + 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("將
22、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,55,55
23、);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);pla
24、yi.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+=342)
25、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)playMan
26、.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.out.pri
27、ntln("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 &
28、;& 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 if
29、 (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.getY(
30、)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(Man,
31、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 < 12)r
32、ule.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(" 黑棋走棋");ches
33、sPlayClick=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 (chessMan
34、Click)/當(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);
35、/炮吃規(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 &&
36、 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 = pl
37、ayMan.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 <
38、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);/相、象吃
39、規(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 = p
40、layMan.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_OPTION,
41、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(" 紅棋勝利");/els
42、e 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 (i
43、=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
44、,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<8;i+,k+=342)playi.setBounds(k,569,55,55);/相for (i=10,k=138;i<12;i+,k+=228)playi.setBounds(k,569,55,55);/士fo
45、r (i=14,k=195;i<16;i+,k+=114)playi.setBounds(k,569,55,55);/兵for (i=21,k=24;i<26;i+,k+=114)playi.setBounds(k,398,55,55);/炮for (i=28,k=81;i<30;i+,k+=342)playi.setBounds(k,455,55,55);/帥play31.setBounds(252,569,55,55);chessPlayClick = 2;text.setText(" 紅棋走棋");for (i=0;i<32;i+)playi.
46、setVisible(true);/清除Vector中的內(nèi)容Var.clear();/悔棋按鈕else if (ae.getSource().equals(repent)try/獲得setVisible屬性值String S = (String)Var.get(Var.size()-4);/獲得X坐標(biāo)int x = Integer.parseInt(String)Var.get(Var.size()-3);/獲得Y坐標(biāo)int y = Integer.parseInt(String)Var.get(Var.size()-2);/獲得索引int M = Integer.parseInt(Strin
47、g)Var.get(Var.size()-1);/賦給棋子playM.setVisible(true);playM.setBounds(x,y,55,55);if (playM.getName().charAt(1) = '1')text.setText(" 黑棋走棋");chessPlayClick = 1; elsetext.setText(" 紅棋走棋");chessPlayClick = 2;/刪除用過的坐標(biāo)Var.remove(Var.size()-4);Var.remove(Var.size()-3);Var.remove(V
48、ar.size()-2);Var.remove(Var.size()-1);/停止旗子閃爍chessManClick=false;catch(Exception e)/退出else if (ae.getSource().equals(exit)int j=JOptionPane.showConfirmDialog(this,"真的要退出嗎?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = JOptionPane.YES_OPTION)System.exit(0);/*定
49、義中國象棋規(guī)則的類*/class ChessRule /*卒子的移動(dòng)規(guī)則*/public void armsRule(int Man,JLabel play,MouseEvent me)/黑卒向下if (Man < 21)/向下移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)if (me.getY()-play.getY() > 27 && (me.getY()-play.getY() < 86 && (me.getX()-play.getX() < 55 && (me.getX()-play.getX() > 0)/當(dāng)前記錄添
50、加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible();Var.add(String.valueOf(play.getX();Var.add(String.valueOf(play.getY();Var.add(String.valueOf(Man);play.setBounds(play.getX(),play.getY()+57,55,55);/向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河else if (play.getY() > 284 && (me.getX() - play.getX() >= 57 &a
51、mp;& (me.getX() - play.getX() <= 112)play.setBounds(play.getX()+57,play.getY(),55,55);/向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河else if (play.getY() > 284 && (play.getX() - me.getX() >= 2 && (play.getX() - me.getX() <=58)/模糊坐標(biāo)play.setBounds(play.getX()-57,play.getY(),55,55);/紅卒向上else
52、/當(dāng)前記錄添加到集合(用于悔棋)Var.add(String.valueOf(play.isVisible();Var.add(String.valueOf(play.getX();Var.add(String.valueOf(play.getY();Var.add(String.valueOf(Man);/向上移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)if (me.getX()-play.getX() >= 0 && (me.getX()-play.getX() <= 55 && (play.getY()-me.getY() >27 &&a
53、mp; play.getY()-me.getY() < 86)play.setBounds(play.getX(),play.getY()-57,55,55);/向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河else if (play.getY() <= 341 && (me.getX() - play.getX() >= 57 && (me.getX() - play.getX() <= 112)play.setBounds(play.getX()+57,play.getY(),55,55);/向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐
54、標(biāo)、必須過河else if (play.getY() <= 341 && (play.getX() - me.getX() >= 3 && (play.getX() - me.getX() <=58)play.setBounds(play.getX()-57,play.getY(),55,55);/卒移動(dòng)結(jié)束/*卒吃棋規(guī)則*/public void armsRule(JLabel play1,JLabel play2)/向右走if (play2.getX() - play1.getX() <= 112 && (play2.
55、getX() - play1.getX() >= 57 && (play1.getY() - play2.getY() < 22 && (play1.getY() - play2.getY() > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)/黑棋要過河才能右吃棋if (play1.getName().charAt(1) = '1' && play1.getY() &
56、gt; 284 && play1.getName().charAt(1) != play2.getName().charAt(1)play2.setVisible(false);/把對(duì)方的位置給自己play1.setBounds(play2.getX(),play2.getY(),55,55);/紅棋要過河才左能吃棋e(cuò)lse if (play1.getName().charAt(1) = '2' && play1.getY() < 341 &&play1.getName().charAt(1) != play2.getName().charAt(1)play
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)四年級(jí)英語國旗和國名
- 小學(xué)快速記憶訓(xùn)練示范課ppt課件
- 組織行為學(xué)6
- 資產(chǎn)試講(初稿)
- 培訓(xùn)行業(yè)通用模板
- 某汽車店與易車網(wǎng)合作策略
- 護(hù)理文書書寫存在的問題原因分析及整改措施
- 少年有夢(mèng) (2)
- 用畫筆觸摸細(xì)節(jié)2(精品)
- 8這條小魚在乎(教育精品)
- 58“整理與復(fù)習(xí)”課件(教育精品)
- 幽徑悲劇(教育精品)
- (精品)展示臺(tái) (2)
- 品管圈活動(dòng)中期匯報(bào)
- 某科技架構(gòu)以用戶為中心的互聯(lián)網(wǎng)運(yùn)營體系介紹