中國象棋java源碼

上傳人:仙*** 文檔編號:35024209 上傳時間:2021-10-25 格式:DOC 頁數(shù):59 大?。?84KB
收藏 版權申訴 舉報 下載
中國象棋java源碼_第1頁
第1頁 / 共59頁
中國象棋java源碼_第2頁
第2頁 / 共59頁
中國象棋java源碼_第3頁
第3頁 / 共59頁

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《中國象棋java源碼》由會員分享,可在線閱讀,更多相關《中國象棋java源碼(59頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 東北大學秦?皇島分校 信息與計算?科學系 Java程?序設計實驗?報告 專業(yè)名稱 信息與計算?科學 班級學號 70802?06 學生姓名 彭 軍 指導教師 王薇 完成時間 2011.04.15 一、設計題目 中國象棋。 2、 設計說明 2.1 引言 象棋水平的?發(fā)展是需要?靠信息技術?來推動的,國際象棋有?兩個很好的?范例,一個是象棋?棋譜編輯和?對弈程序的?公共平臺——WinBo?ard平臺?,另一個是商?業(yè)的國際象?棋數(shù)據(jù)庫和?對弈軟件——Chess?Base,他們?yōu)閲H?象棋愛好者?和研究者

2、提?供了極大的?便利。國際象棋軟?件有著成功?的商業(yè)運作?,已發(fā)展成一?種產業(yè)。然而,電腦在中國?象棋上的運?用還剛剛起?步,盡管國內涌?現(xiàn)出一大批?中國象棋的?專業(yè)網(wǎng)站和?專業(yè)軟件,但是由于缺?乏必要的基?礎工作,電腦技術在?中國象棋上?的應用優(yōu)勢?還無法體現(xiàn)?出來。 在設計中國?象棋軟件過?程中,國際象棋軟?件有很多值?得借鑒的成?功經(jīng)驗和優(yōu)?秀的思想。例如B. Morel?and,微軟(Micro?soft)的程序設計?師,業(yè)余從事國?際象棋引擎?Ferre?t的開發(fā),他的一系列?關于國際象?棋程序設計?的文章非常?值得其他棋?類程序設計?人員借鑒。然而,中國象棋與?國際象棋存?在著很

3、大的?差異,因此國際象?棋的某些成?熟技術,無法直接應?用于中國象?棋,需要對其加?以改進和創(chuàng)?新。 本文針對中?國象棋程序?設計的一系?列問題,總結出一些?搜索引擎的?設計方法,并給出ja?va語言的?實現(xiàn) 2.2程序的設?計及實現(xiàn) 本系統(tǒng)主要?有以下4個?模塊,每個模塊對?應一個程序?包: 1、engin?e:搜索引擎包?,系統(tǒng)的核心?部分。 2、messa?ge:網(wǎng)絡對戰(zhàn)過?程中各種消?息及其傳遞?機制的類實?現(xiàn)包。 3、main:主界面實現(xiàn)?包。 4、piece?s:棋子及其相?關類實現(xiàn)包?。 現(xiàn)就各個包?中的要點給?與說明。 2.2.1 搜索引擎的?實現(xiàn)(engin

4、?e包) (1) BitBo?ard.java:位棋盤的實?現(xiàn),見2.4節(jié)。 (2) CCEva?lue.java:評價函數(shù)知?識類。 本程序使用?開源軟件“夢入神蛋”的快速評價?函數(shù)。該函數(shù)包含?子力價值和?棋子所在位?置的獎勵值?。子力價值分?別是:帥-0, 仕- 40, 象-40, 馬-88, 車-200, 炮-96, 兵-9。帥是無價的?,用0表示。以馬為例,位置的獎勵?值如下: 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、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, 2, 5, 4, 2, 2 上面的每行?代表棋盤的?一條縱線。其中,-10所在的?位置是“窩心馬”,所以要罰1?0分。 (3) Chess?Posit?ion.java:動態(tài)局面類? 包含對局過?程中的動態(tài)?信息,主要實現(xiàn)的?是2.4節(jié)的各類?位

6、棋盤和移?子函數(shù)。 (4) MoveS?truct?.java:著法表示類?。 (5) PreMo?ve.java:偽合法著法?生成模塊,見4.1。 (6) MoveS?ortSt?ruct.java:合法著法的?生成及其排?序算法,見4.2。 (7) Searc?hMove?.java:搜索算法,實現(xiàn)如下功?能: 1)主置換表及?開局庫 2)Alpha?-Beta搜?索算法 3)針對吃子著?法的靜態(tài)搜?索算法 4)適應性空著?裁剪算法:見5.5.2,根據(jù)不同情?況來調整R?值的做法,稱為“適應性空著?裁剪”(Adapt?ive Null-Move Pruni?ng),它首先由

7、E?rnst Heinz?發(fā)表在19?99年的I?CCA雜志?上。其內容可以?概括為: a. 深度小于或?等于6時,用R = 2的空著裁?剪進行搜索? b. 深度大于8?時,用R = 3; c. 深度是6或?7時,如果每方棋?子都大于或?等于3個,則用 R = 3,否則用 R = 2。 5)帶時間控制?的迭代加深?搜索算法:每次加深搜?索都判斷時?間是否夠用?。 6)“將軍”擴展(加深)搜索算法:當搜索到己?方被“將”時,增加搜索的?深度。 7)主要變例搜?索算法 2.2.2 信息傳輸機?制(messa?ge包) 在對弈過程?中(主要是網(wǎng)絡?對弈)需要在對弈?雙方之間傳?輸各

8、類信息?,抽象為各類?消息。如時間規(guī)則?的協(xié)定、各方的走子?信息等。每方都有消?息接收、消息處理和?消息發(fā)送程?序(Outer?MsgRe?ceive?r、Local?MsgRe?ceive?r,QzMes?sageH?andle?r,Messa?geSen?der)。己方的Me?ssage?Sende?r與對方的?Outer?MsgRe?ceive?r通過接口?SrCon?necti?on連接。所有接收的?消息放入消?息隊列Qz?MsgQu?eue中,等待消息處?理進程Qz?Messa?geHan?dler來?處理。所有的消息?都封裝在Q?zMess?age類對?象中,消息的類型?通過消息的

9、?Heade?r類型(以靜態(tài)常量?存放在Ms?gHead?er類中)來區(qū)分。 2.2.3 棋子(piece?s包) Qizi.java包?含棋子的信?息,如棋子的(在棋盤上的?)位置、圖片、名稱、類型、狀態(tài)等。Piece?sFact?ory.java以?“工廠”模式提供根?據(jù)棋子類型?或其他信息?生成相關Q?izi對象?的方法。 2.2.4 主控模塊(main包?) 實現(xiàn)了程序?界面與消息?傳遞、搜索引擎的?集成。 (1) NewBo?ard.java:棋盤坐標系?統(tǒng)及其界面?的實現(xiàn)。 (2) CChes?sApp.java:主界面類,以內部類實?現(xiàn)了QzM?essag?eHand

10、?ler接口?、計時規(guī)則T?imeRu?le接口以?及事件的處?理程序,根據(jù)需要生?成其他的并?發(fā)線程如消?息接收、處理和發(fā)送?,機器思考(啟動搜索引?擎),計時顯示等?。 (3) SetRu?leDia?log.java:設置規(guī)則的?對話框。 (4) SetSy?sInfo?Dialo?g.java:設置系統(tǒng)的?一些屬性如?對戰(zhàn)模式、連接端口等?。 (5) Trans?latio?n.java:提供了一系?列實用方法?主要有: 1)FEN串與?局面Che?ssPos?ition?對象之間的?轉換 2)不同著法表?示(見第一章)之間的轉換?。如“炮二平五”與“Ch2-e2”及“62.

11、5或C2.5“(C和6代表?炮)這幾種表示?法之間的轉?換 3)棋譜文件的?讀入和存儲?。 4)開局庫的生?成:將近年實戰(zhàn)?的棋譜文件?(可能有幾種?格式)整理生成開?局庫。 3、 程序代碼: impor?t java.awt.*; impor?t java.awt.event?.*; impor?t javax?.swing?.*; impor?t java.util.*; impor?t java.io.*; publi?c class? Chess?{ publi?c stati?c void main(Strin?g args[]){ new Che

12、ss?MainF?rame("中國象棋:觀棋不語真?君子,棋死無悔大?丈夫"); } } class? Chess?MainF?rame exten?ds JFram?e imple?ments? Actio?nList?ener,Mouse?Liste?ner,Runna?ble{ //玩家 JLabe?l play[] = new JLabe?l[32]; //棋盤 JLabe?l image?; //窗格 Conta?iner con; //工具欄 JTool?Bar jmain?; //重新開始 JButt?on anew;

13、//悔棋 JButt?on repen?t; //退出 JButt?on exit; //當前信息 JLabe?l text; //保存當前操?作 Vecto?r Var; //規(guī)則類對象?(使于調用方?法) Chess?Rule rule; /** ** 單擊棋子 ** chess?ManCl?ick = true 閃爍棋子 并給線程響?應 ** chess?ManCl?ick = false? 吃棋子 停止閃爍 并給線程響?應 */ boole?an chess?ManCl?ick; /** **

14、 控制玩家走?棋 ** chess?PlayC?lick=1 黑棋走棋 ** chess?PlayC?lick=2 紅棋走棋 默認紅棋 ** chess?PlayC?lick=3 雙方都不能?走棋 */ int chess?PlayC?lick=2; //控制棋子閃?爍的線程 Threa?d tmain?; //把第一次的?單擊棋子給?線程響應 stati?c int Man,i; Chess?MainF?rame(){ new Chess?MainF?rame("中國象棋"); } /** ** 構造函數(shù) **

15、初始化圖形?用戶界面 */ Chess?MainF?rame(Strin?g Title?){ //獲行客格引?用 con = this.getCo?ntent?Pane(); con.setLa?yout(null); //實例化規(guī)則?類 rule = new Chess?Rule(); Var = new Vecto?r(); //創(chuàng)建工具欄? jmain? = new JTool?Bar(); text = new JLabe?l("歡迎使用象?棋對弈系統(tǒng)?"); //當鼠標放上?顯示信息 text.set

16、To?olTip?Text("信息提示"); anew = new JButt?on(" 新 游 戲 "); anew.setTo?olTip?Text("重新開始新?的一局"); exit = new JButt?on(" 退 出 "); exit.setTo?olTip?Text("退出象棋程?序程序"); repen?t = new JButt?on(" 悔 棋 "); repen?t.setTo?olTip?Text("返回到上次?走棋的位置?"); //把組件添加?到工具欄 jmain?.setLa?yout(new GridL

17、?ayout?(0,4)); jmain?.add(anew); jmain?.add(repen?t); jmain?.add(exit); jmain?.add(text); jmain?.setBo?unds(0,0,558,30); con.add(jmain?); //添加棋子標?簽 drawC?hessM?an(); //注冊按扭監(jiān)?聽 anew.addAc?tionL?isten?er(this); repen?t.addAc?tionL?isten?er(this); exit.addAc?ti

18、onL?isten?er(this); //注冊棋子移?動監(jiān)聽 for (int i=0;i<32;i++){ con.add(play[i]); play[i].addMo?useLi?stene?r(this); } //添加棋盤標?簽 con.add(image? = new JLabe?l(new Image?Icon("image?\\Main.GIF"))); image?.setBo?unds(0,30,558,620); image?.addMo?useLi?stene?r(this);

19、 //注冊窗體關?閉監(jiān)聽 this.addWi?ndowL?isten?er( new Windo?wAdap?ter() { publi?c void windo?wClos?ing(Windo?wEven?t we){ Syste?m.exit(0); } } ); //窗體居中 Dimen?sion scree?nSize? = Toolk?it.getDe?fault?Toolk?it().getSc?reenS?ize(); Dimen?sion frame?Size = this.getSi?

20、ze(); if (frame?Size.heigh?t > scree?nSize?.heigh?t){ frame?Size.heigh?t = scree?nSize?.heigh?t; } if (frame?Size.width? > scree?nSize?.width?){ frame?Size.width? = scree?nSize?.width?; } this.setLo?catio?n((scree?nSize?.width? - frame?Size.width?) / 2 - 280 ,(scree?nS

21、ize?.heigh?t - frame?Size.heigh?t ) / 2 - 350); //設置 this.setIc?onIma?ge(new Image?Icon("image?\\紅將.GIF").getIm?age()); this.setRe?sizab?le(false?); this.setTi?tle(Title?); this.setSi?ze(558,670); this.show(); } /** ** 添加棋子方?法 */ publi?c void drawC?hessM?an(){ //

22、流程控制 int i,k; //圖標 Icon in; //黑色棋子 //車 in = new Image?Icon("image?\\黑車.GIF"); for (i=0,k=24;i<2;i++,k+=456){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,56,55,55); play[i].setNa?me("車1"); } //馬 in = new Image?Icon("image?\\黑馬.GIF");

23、 for (i=4,k=81;i<6;i++,k+=342){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,56,55,55); play[i].setNa?me("馬1"); } //相 in = new Image?Icon("image?\\黑象.GIF"); for (i=8,k=138;i<10;i++,k+=228){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,56,55,55); play

24、[i].setNa?me("象1"); } //士 in = new Image?Icon("image?\\黑士.GIF"); for (i=12,k=195;i<14;i++,k+=114){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,56,55,55); play[i].setNa?me("士1"); } //卒 in = new Image?Icon("image?\\黑卒.GIF"); for (i=16,k=24;i<21;i++,k+=11

25、4){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,227,55,55); play[i].setNa?me("卒1" + i); } //炮 in = new Image?Icon("image?\\黑炮.GIF"); for (i=26,k=81;i<28;i++,k+=342){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,170,55,55); play[i].setNa?me("炮1" + i);

26、 } //將 in = new Image?Icon("image?\\黑將.GIF"); play[30] = new JLabe?l(in); play[30].setBo?unds(252,56,55,55); play[30].setNa?me("將1"); //紅色棋子 //車 in = new Image?Icon("image?\\紅車.GIF"); for (i=2,k=24;i<4;i++,k+=456){ play[i] = new JLabe?l(in); play[i].setBo?

27、unds(k,569,55,55); play[i].setNa?me("車2"); } //馬 in = new Image?Icon("image?\\紅馬.GIF"); for (i=6,k=81;i<8;i++,k+=342){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,569,55,55); play[i].setNa?me("馬2"); } //相 in = new Image?Icon("image?\\紅象.GIF"); f

28、or (i=10,k=138;i<12;i++,k+=228){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,569,55,55); play[i].setNa?me("象2"); } //士 in = new Image?Icon("image?\\紅士.GIF"); for (i=14,k=195;i<16;i++,k+=114){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,569,55,55); play

29、[i].setNa?me("士2"); } //兵 in = new Image?Icon("image?\\紅卒.GIF"); for (i=21,k=24;i<26;i++,k+=114){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,398,55,55); play[i].setNa?me("卒2" + i); } //炮 in = new Image?Icon("image?\\紅炮.GIF"); for (i=28,k=81;i<30;i++,k

30、+=342){ play[i] = new JLabe?l(in); play[i].setBo?unds(k,455,55,55); play[i].setNa?me("炮2" + i); } //帥 in = new Image?Icon("image?\\紅將.GIF"); play[31] = new JLabe?l(in); play[31].setBo?unds(252,569,55,55); play[31].setNa?me("帥2"); } /** ** 線程方法控?制棋子閃爍?

31、 */ publi?c void run(){ while? (true){ //單擊棋子第?一下開始閃?爍 if (chess?ManCl?ick){ play[Man].setVi?sible?(false?); //時間控制 try{ tmain?.sleep?(200); } catch?(Excep?tion e){ } play[Man].setVi?sible?(true); } //閃爍當前提?示信息 以免用戶看?不見

32、else { text.setVi?sible?(false?); //時間控制 try{ tmain?.sleep?(250); } catch?(Excep?tion e){ } text.setVi?sible?(true); } try{ tmain?.sleep?(350); } catch? (Excep?tion e){ } } } /** ** 單擊棋子方?法 */ publi?c

33、void mouse?Click?ed(Mouse?Event? me){ Syste?m.out.print?ln("Mouse?"); //當前坐標 int Ex=0,Ey=0; //啟動線程 if (tmain? == null){ tmain? = new Threa?d(this); tmain?.start?(); } //單擊棋盤(移動棋子) if (me.getSo?urce().equal?s(image?)){ //該紅棋走棋?的時候 if (chess?PlayC?li

34、ck == 2 && play[Man].getNa?me().charA?t(1) == 2){ Ex = play[Man].getX(); Ey = play[Man].getY(); //移動卒、兵 if (Man > 15 && Man < 26){ rule.armsR?ule(Man,play[Man],me); } //移動炮 else if (Man > 25 && Man < 30){ rule.canno?nRule?(play[Man],play,me

35、); } //移動車 else if (Man >=0 && Man < 4){ rule.canno?nRule?(play[Man],play,me); } //移動馬 else if (Man > 3 && Man < 8){ rule.horse?Rule(play[Man],play,me); } //移動相、象 else if (Man > 7 && Man < 12){ rule.eleph?antRu?le(Man,p

36、lay[Man],play,me); } //移動仕、士 else if (Man > 11 && Man < 16){ rule.chapR?ule(Man,play[Man],play,me); } //移動將、帥 else if (Man == 30 || Man == 31){ rule.willR?ule(Man,play[Man],play,me); } //是否走棋錯?誤(是否在原地?沒有動) if (Ex == play[

37、Man].getX() && Ey == play[Man].getY()){ text.setTe?xt(" 紅棋走棋"); chess?PlayC?lick=2; } else { text.setTe?xt(" 黑棋走棋"); chess?PlayC?lick=1; } }//if //該黑棋走棋?的時候 else if (chess?PlayC?lick == 1 && play[Man].get

38、Na?me().charA?t(1) == 1){ Ex = play[Man].getX(); Ey = play[Man].getY(); //移動卒、兵 if (Man > 15 && Man < 26){ rule.armsR?ule(Man,play[Man],me); } //移動炮 else if (Man > 25 && Man < 30){ rule.canno?nRule?(play[Man],play,me); } //移動車

39、 else if (Man >=0 && Man < 4){ rule.canno?nRule?(play[Man],play,me); } //移動馬 else if (Man > 3 && Man < 8){ rule.horse?Rule(play[Man],play,me); } //移動相、象 else if (Man > 7 && Man < 12){ rule.eleph?antRu?le(Man,play[Man],play,me); }

40、 //移動仕、士 else if (Man > 11 && Man < 16){ rule.chapR?ule(Man,play[Man],play,me); } //移動將、帥 else if (Man == 30 || Man == 31){ rule.willR?ule(Man,play[Man],play,me); } //是否走棋錯?誤(是否在原地?沒有動) if (Ex == play[Man].getX() && Ey == play[Man].ge

41、tY()){ text.setTe?xt(" 黑棋走棋"); chess?PlayC?lick=1; } else { text.setTe?xt(" 紅棋走棋"); chess?PlayC?lick=2; } }//else if //當前沒有操?作(停止閃爍) chess?ManCl?ick=false?; }//if //單擊棋子 else{

42、 //第一次單擊?棋子(閃爍棋子) if (!chess?ManCl?ick){ for (int i=0;i<32;i++){ //被單擊的棋?子 if (me.getSo?urce().equal?s(play[i])){ //告訴線程讓?該棋子閃爍? Man=i; //開始閃爍 chess?ManCl?ick=true; break?; } }//for }//if //第二次單擊?棋子(吃棋子) else if (ch

43、ess?ManCl?ick){ //當前沒有操?作(停止閃爍) chess?ManCl?ick=false?; for (i=0;i<32;i++){ //找到被吃的?棋子 if (me.getSo?urce().equal?s(play[i])){ //該紅棋吃棋?的時候 if (chess?PlayC?lick == 2 && play[Man].getNa?me().charA?t(1) == 2){ Ex = play[Man].getX(); Ey = pla

44、y[Man].getY(); //卒、兵吃規(guī)則 if (Man > 15 && Man < 26){ rule.armsR?ule(play[Man],play[i]); } //炮吃規(guī)則 else if (Man > 25 && Man < 30){ rule.canno?nRule?(0,play[Man],play[i],play,me); } //車吃規(guī)則 else if

45、 (Man >=0 && Man < 4){ rule.canno?nRule?(1,play[Man],play[i],play,me); } //馬吃規(guī)則 else if (Man > 3 && Man < 8){ rule.horse?Rule(play[Man],play[i],play,me); } //相、象吃規(guī)則 else if (Man > 7 && Man < 12){ rule.eleph

46、?antRu?le(play[Man],play[i],play); } //士、仕吃棋規(guī)則? else if (Man > 11 && Man < 16){ rule.chapR?ule(Man,play[Man],play[i],play); } //將、帥吃棋規(guī)則? else if (Man == 30 || Man == 31){ rule.willR?ule(Man,play[Man],play[i],play);

47、 play[Man].setVi?sible?(true); } //是否走棋錯?誤(是否在原地?沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setTe?xt(" 紅棋走棋"); chess?PlayC?lick=2; break?; } else{ text.set

48、Te?xt(" 黑棋走棋"); chess?PlayC?lick=1; break?; } }//if //該黑棋吃棋?的時候 else if (chess?PlayC?lick == 1 && play[Man].getNa?me().charA?t(1) == 1){ Ex = play[Man].getX(); Ey = play[Man].getY();

49、 //卒吃規(guī)則 if (Man > 15 && Man < 26){ rule.armsR?ule(play[Man],play[i]); } //炮吃規(guī)則 else if (Man > 25 && Man < 30){ rule.canno?nRule?(0,play[Man],play[i],play,me); } //車吃規(guī)則 else if (Man >=0 && Man < 4){ r

50、ule.canno?nRule?(1,play[Man],play[i],play,me); } //馬吃規(guī)則 else if (Man > 3 && Man < 8){ rule.horse?Rule(play[Man],play[i],play,me); } //相、象吃規(guī)則 else if (Man > 7 && Man < 12){ rule.eleph?antRu?le(play[Man],play[i],play)

51、; } //士、仕吃棋規(guī)則? else if (Man > 11 && Man < 16){ rule.chapR?ule(Man,play[Man],play[i],play); } //將、帥吃棋規(guī)則? else if (Man == 30 || Man == 31){ rule.willR?ule(Man,play[Man],play[i],play); play[Man].setVi?sible?(tr

52、ue); } //是否走棋錯?誤(是否在原地?沒有動) if (Ex == play[Man].getX() && Ey == play[Man].getY()){ text.setTe?xt(" 黑棋走棋"); chess?PlayC?lick=1; break?; } else { text.setTe?xt(" 紅棋走棋"); c

53、hess?PlayC?lick=2; break?; } }//else if }//if }//for //是否勝利 if (!play[31].isVis?ible()){ JOpti?onPan?e.showC?onfir?mDial?og( this,"黑棋勝利","玩家一勝利?", JOpti?onPan?e.DEFAU?LT_OP?TION,JOpti?onPan?

54、e.WARNI?NG_ME?SSAGE?); //雙方都不可?以在走棋了? chess?PlayC?lick=3; text.setTe?xt(" 黑棋勝利"); }//if else if (!play[30].isVis?ible()){ JOpti?onPan?e.showC?onfir?mDial?og( this,"紅棋勝利","玩家二勝利?", JOpti?onPan?e.DEFAU?LT_OP?TION,JOpti?onPan?e.WARNI?NG_ME?SSAG

55、E?); chess?PlayC?lick=3; text.setTe?xt(" 紅棋勝利"); }//else if }//else }//else } publi?c void mouse?Press?ed(Mouse?Event? me){ } publi?c void mouse?Relea?sed(Mouse?Event? me){ } publi?c void mouse?Enter?ed(Mouse?Event? me){ } publi?c void mous

56、e?Exite?d(Mouse?Event? me){ } /** ** 定義按鈕的?事件響應 */ publi?c void actio?nPerf?ormed?(Actio?nEven?t ae) { //重新開始按?鈕 if (ae.getSo?urce().equal?s(anew)){ int i,k; //重新排列每?個棋子的位?置 //黑色棋子 //車 for (i=0,k=24;i<2;i++,k+=456){ play[i].setBo?unds(k,56,55,55);

57、 } //馬 for (i=4,k=81;i<6;i++,k+=342){ play[i].setBo?unds(k,56,55,55); } //相 for (i=8,k=138;i<10;i++,k+=228){ play[i].setBo?unds(k,56,55,55); } //士 for (i=12,k=195;i<14;i++,k+=114){ play[i].setBo?unds(k,56,55,55); } //卒

58、 for (i=16,k=24;i<21;i++,k+=114){ play[i].setBo?unds(k,227,55,55); } //炮 for (i=26,k=81;i<28;i++,k+=342){ play[i].setBo?unds(k,170,55,55); } //將 play[30].setBo?unds(252,56,55,55); //紅色棋子 //車 for (i=2,k=24;i<4;i++,k+=456){ play[i].setBo

59、?unds(k,569,55,55); } //馬 for (i=6,k=81;i<8;i++,k+=342){ play[i].setBo?unds(k,569,55,55); } //相 for (i=10,k=138;i<12;i++,k+=228){ play[i].setBo?unds(k,569,55,55); } //士 for (i=14,k=195;i<16;i++,k+=114){ play[i].setBo?unds(k,569,55,55)

60、; } //兵 for (i=21,k=24;i<26;i++,k+=114){ play[i].setBo?unds(k,398,55,55); } //炮 for (i=28,k=81;i<30;i++,k+=342){ play[i].setBo?unds(k,455,55,55); } //帥 play[31].setBo?unds(252,569,55,55); chess?PlayC?lick = 2; text.setTe?xt("

61、 紅棋走棋"); for (i=0;i<32;i++){ play[i].setVi?sible?(true); } //清除Vec?tor中的?內容 Var.clear?(); } //悔棋按鈕 else if (ae.getSo?urce().equal?s(repen?t)){ try{ //獲得set?Visib?le屬性值? Strin?g S = (Strin?g)Var.get(Var.size()-4); //獲得X坐標?

62、 int x = Integ?er.parse?Int((Strin?g)Var.get(Var.size()-3)); //獲得Y坐標? int y = Integ?er.parse?Int((Strin?g)Var.get(Var.size()-2)); //獲得索引 int M = Integ?er.parse?Int((Strin?g)Var.get(Var.size()-1)); //賦給棋子 play[M].setVi?sible?(true); play[M].setBo?unds(x

63、,y,55,55); if (play[M].getNa?me().charA?t(1) == 1){ text.setTe?xt(" 黑棋走棋"); chess?PlayC?lick = 1; } else{ text.setTe?xt(" 紅棋走棋"); chess?PlayC?lick = 2; } //刪除用過的?坐標 Var.remov?e(Var.size()-4); Var.remo

64、v?e(Var.size()-3); Var.remov?e(Var.size()-2); Var.remov?e(Var.size()-1); //停止旗子閃?爍 chess?ManCl?ick=false?; } catch?(Excep?tion e){ } } //退出 else if (ae.getSo?urce().equal?s(exit)){ int j=JOpti?onPan?e.showC?onfir?mDial?og( this,"真的要退出?嗎

65、?","退出", JOpti?onPan?e.YES_O?PTION?,JOpti?onPan?e.QUEST?ION_M?ESSAG?E); if (j == JOpti?onPan?e.YES_O?PTION?){ Syste?m.exit(0); } } } /*定義中國象?棋規(guī)則的類?*/ class? Chess?Rule { /**卒子的移動?規(guī)則*/ publi?c void armsR?ule(int Man,JLabe?l play,Mouse?Event? me){ //黑卒向下

66、 if (Man < 21){ //向下移動、得到終點的?坐標模糊成?合法的坐標? if ((me.getY()-play.getY()) > 27 && (me.getY()-play.getY()) < 86 && (me.getX()-play.getX()) < 55 && (me.getX()-play.getX()) > 0){ //當前記錄添?加到集合(用于悔棋) Var.add(Strin?g.value?Of(play.isVis?ible())); Var.add(Strin?g.value?Of(play.getX())); Var.add(Strin?g.value?Of(play.getY())); Var.add(Strin?g.value?Of(Man)); play.setBo?unds(play.getX(),play.getY()+57,55,55); } //向右移動、得到終點的

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!