版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
JAVA目:五子棋游戲一.簡要的介紹五子棋1.五子棋的起源子、五子連、串珠、五目、五目碰、五格、五石、五法、五聯(lián)、京棋”。五子棋相傳起源于四千多年前的堯帝時比圍棋的歷史還要悠久,可能早在“堯造圍棋”之前,民間就已子棋游戲。有關早期五子棋的文史資料與圍棋有相似之處,因為五子棋的棋具與圍棋是完全相同的。2.五子棋標準棋盤(如圖所示)3.棋的棋子棋采用兩種顏色棋子,黑色棋子和白色棋子,和圍棋相同,4.棋規(guī)則就是黑棋下第2手棋,盤面第3著棋之后,白方在應白2之前,如感覺二.序流程三.碼設計與分析并啟動屏幕顯示顯示該實例對象。publicclassFiveChessAppletDemo{publicstaticvoidmain(Stringargs[]){ChessFramecf=newChessFrame();ow();importjava.awt.event.*;importjava.applet.*;importjava.io.PrintStream;importjavax.swing.JComponent;classChessFrameextendsJFrameimplementsActionListener{privateString[]strsize={"標準棋盤","改進棋盤","擴大棋盤"};privateString[]strmode={"人機對戰(zhàn)","人人對戰(zhàn)"};publicstaticbooleaniscomputer=true,checkcomputer=true;privateintwidth,height;privateChessModelcm;privateMainPanelmp;構造五子棋游戲的主窗體publicChessFrame(){"cm=newChessModel(1);mpnewcm);this.setResizable(thisnewChessWindowEvent());(14,14);JMenuBarmbar=new
ar();mbar);JMenugameMenu=newJMenu("游戲");mbar.add(makeMenu(gameMenu,newObject[]{"開局",null,"棋盤",null,"模式",null,"退出"thisJMenulookMenu=newJMenu("外觀");mbar.add(makeMenu(lookMenu,newObject[]{"",,"JMenuhelpMenu=newJMenu("版本");mbar.add(makeMenu(helpMenu,newObject[]{this構造五子棋游戲的主菜單publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){JMenum=null;if(parentinstanceofJMenu)m=(JMenu)parent;elseif(parentinstanceofString)m=newJMenu((String)parent);nullfor(inti=0;i<items.length;i++)if(items[i]==null));elseif(items[i]=="棋盤"){JMenujm=newJMenu("棋盤");rmenu;for(intj=0;j<strsize.length;j++){enu););(jm);}elseif(items[i]=="模式"){JMenujm=newJMenu("模式");rmenu;for(inth=0;h<strmode.length;h++){=0)enu););(jm);target));構造五子棋游戲的菜單項publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){JMenuItemr=null;if(iteminstanceofString)r=newJMenuItem((String)item);elseif(iteminstanceofJMenuItem)r=(JMenuItem)item;nullif(targetinstanceofActionListener))target);構造五子棋游戲的單選按鈕式菜單項publicJRadioButtonMenuItemmakeRadioButtonMenuItem(Objectitem,Objecttarget){JRadioButtonMenuItemr=null;if(iteminstanceofString)r=newJRadioButtonMenuItem((String)item);elseif(iteminstanceofJRadioButtonMenuItem)r=(JRadioButtonMenuItem)item;nullif(targetinstanceofActionListener))target);publicvoidMapSize(intw,inth){setSize(w*24,h*27);ifthischeckcomputerthisiscomputertrueiscomputer;mp.setModel(cm););publicbooleangetiscomputer(){returniscomputerpublicvoidrestart(){intmodeChess=cm.getModeChess();if(modeChess<=3&&modeChess>=0){cm=newChessModel(modeChess);publicvoidactionPerformed(ActionEvente){if"類型三"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"elseif(arg.equals("類型二"))"com.sun.java.swing.plaf.motif.MotifLookAndFeel"lse"this.width4;this.height4;=("this.width8;this.height8;="this.width2;this.height2;=if(arg.equals("thischeckcomputertruethisiscomputertruecm=newChessModel(cm.getModeChess());if(arg.equals(.=falsethisiscomputerfalsecm=newChessModel(cm.getModeChess());if(arg.equals(開局rt();if(arg.equals(關于"PLAIN_MESSAGE);if(arg.equals(退出importjava.awt.event.*;importjava.applet.*;importjava.io.PrintStream;importjavax.swing.JComponent;importjavax.swing.JPanel;classChessModel{規(guī)定棋盤的寬度、高度、棋盤的模式privateintwidth,height,modeChess;規(guī)定棋盤方格的橫向、縱向坐標privateintx=0,y=0;棋盤方格的橫向、縱向坐標所對應的棋子顏色,arrMapShow3個值:,23-1其中1代表該棋盤方格上下的棋子為黑子,2代表該棋盤方格上下的棋子為白子,3代表為該棋盤方格上沒有棋子,-1代表該棋盤方格不能夠下棋子privateint[][]arrMapShow;交換棋手的標識,棋盤方格上是否有棋子的標識符privatebooleanisOdd,isExist;publicChessModel(){}該構造方法根據(jù)不同的棋盤模式(modeChess)來構建對應大小的棋盤publicChessModel(intmodeChess){thisisOdd=trueif(modeChess==1){PanelInit(14,14,modeChess);if(modeChess==2){PanelInit(18,18,modeChess);if(modeChess==3){PanelInit(22,22,modeChess);按照棋盤模式構建棋盤大小privatevoidPanelInit(intwidth,intheight,intmodeChess){this.width=width;this.height=height;this.modeChess=modeChess;arrMapShow=newint[width+1][height+1];for(inti=0;i<=width;i++){for(intj=0;j<=height;j++){arrMapShow[i][j]=-1;獲取是否交換棋手的標識符publicbooleangetisOdd(){thisisOdd設置交換棋手的標識符publicvoidsetisOdd(booleanisodd){odd)thisisOddtruethisisOddfalse獲取某棋盤方格是否有棋子的標識值publicbooleangetisExist(){this.;獲取棋盤寬度publicintgetWidth(){thiswidth獲取棋盤高度publicintgetHeight(){this.;獲取棋盤模式publicintgetModeChess(){return;獲取棋盤方格上棋子的信息publicint[][]getarrMapShow(){arrMapShow判斷下子的橫向、縱向坐標是否越界privatebooleanbadxy(intx,inty){if(x>=width+20||x<0)truereturny>=height+20||y<0;計算棋盤上某一方格上八個方向棋子的最大值,這八個方向分別是:左、右、上、下、左上、左下、右上、右下publicbooleanchessExist(inti,intj){if(this.arrMapShow[i][j]==1||this.arrMapShow[i][j]==2)truefalse判斷該坐標位置是否可下棋子publicvoidreadyplay(intx,inty){))returnreturnthisarrMapShow3;在該坐標位置下棋子publicvoidplay(intx,inty){))returnthisisExist=truereturnthisisExistfalse)){][y]=1;thisarrMapShow2;計算機走棋說明:用窮舉法判斷每一個坐標點的四個方向的的最大棋子數(shù),最后得出棋子數(shù)最大值的坐標,下子publicvoidcomputerDo(intwidth,intheight){intmax_black,max_white,max_temp,max=0;"for(inti=0;i<=width;i++){for(intj=0;j<=height;j++){算法判斷是否下子j)){判斷白子的最大值,2);判斷黑子的最大值,1);x){this.xthis}thisarrMapShowthisx][thisy2;記錄電腦下子后的橫向坐標publicvoidsetX(intx){this記錄電腦下子后的縱向坐標publicvoidsetY(inty){this獲取電腦下子的橫向坐標publicintgetX(){this.;獲取電腦下子的縱向坐標publicintgetY(){this.;計算棋盤上某一方格上八個方向棋子的最大值,這八個方向分別是:左、右、上、下、左上、左下、右上、右下publicintcheckMax(intx,inty,intblack_or_white){intnum=0,max_num,max_temp=0;判斷右邊(1+=1;if(x_temp1>.widthbreak(.]==black_or_white)break判斷左邊=x_temp;(1-=1;0)break(.]==black_or_white)breakm<5)mp=num;判斷上面(1-=1;0)break(.]==black_or_white)break判斷下面=y_temp;(1+=1;if(y_temp1>.heightbreak(.]==black_or_white)breakum<5)mp=num;判斷左上方(1-=1;1-=1;if(y_temp1<0||x_temp1<0)break(.]==black_or_white)break判斷右下方=x_temp;=y_temp;for(inti=1;i<5;i++){+=1;1+=1;if(y_temp1>this.height||x_temp1>this.width)break(.]==black_or_white)breakum<5)mp=num;判斷右上方for(inti=1;i<5;i++){+=1;1-=1;if(y_temp1<0||x_temp1>this.width)break(.]==black_or_white)break判斷左下方=x_temp;=y_temp;for(inti=1;i<5;i++){-=1;1+=1;if(y_temp1>this.height||x_temp1<0)break(.]==black_or_white)breakum<5)mp=num;p;判斷勝負
judgeSuccess(intx,inty,booleanisodd){intx_temp=x,y_temp=y;odd)ue=2;ue=1;判斷右邊勝負(1+=1;if(x_temp1>.widthbreak(thistemp1]==arrvalue)break判斷左邊勝負=x_temp;(1-=1;0)break(thistemp1]==arrvalue)break==5)true判斷上方勝負(1-=1;0)break(thistemp1]==arrvalue)break判斷下方勝負=y_temp;(1+=1;if(y_temp1>.heightbreak(thistemp1]==arrvalue)break==5)true判斷左上勝負(1-=1;1-=1;if(y_temp1<0||x_temp1<0)break(thistemp1]==arrvalue)break判斷右下勝負=x_temp;=y_temp;for(inti=1;i<6;i++){+=1;1+=1;if(y_temp1>this.height||x_temp1>this.width)break;(rvalue)break==5)true判斷右上勝負for(inti=1;i<6;i++){+=1;1-=1;if(y_temp1<0||x_temp1>this.width)break(thistemp1]==arrvalue)break判斷左下勝負=x_temp;=y_temp;for(inti=1;i<6;i++){-=1;1+=1;if(y_temp1>this.height||x_temp1<0)break(thistemp1]==arrvalue)break==5)truefalse贏棋后的提示publicvoidshowSuccess(JPaneljp){輸棋后的提示publicvoidshowDefeat(JPaneljp){1、構建一個面板,在該面板上畫上棋盤;2、處理在該棋盤上的鼠標事件(如鼠標左鍵點擊、鼠標右鍵點擊、鼠標拖動等)importjava.awt.event.*;importjava.applet.*;importjavax.swing.*;classMainPanelextendsJPanel設定棋盤的寬度和高度privateintwidth,height;privateChessModelcm;根據(jù)棋盤模式設定面板的大小MainPanel(ChessModelmm){cmm;widthcmdth();=cmht();根據(jù)棋盤模式設定棋盤的寬度和高度publicvoidsetModel(ChessModelmm){cm=mm;width=cm.getWidth();height=cm.getHeight();根據(jù)坐標計算出棋盤方格棋子的信息(如白子還是黑子),然后調(diào)用draw方法在棋盤上畫出相應的棋子publicvoidpaintComponent(Graphicsg){mponent(g);for(intj=0;j<=height;j++){for(inti=0;i<=width;i++){intv=cm.getarrMapShow()[i][j];draw(g,i,j,v);根據(jù)提供的棋子信息(顏色、坐標)畫棋子publicvoiddraw(Graphicsg,inti,intj,intv){intx=20*i+20;inty=20*j+20;畫棋盤if(i!=width&&j!=height){0);畫黑色棋子if(v==1){16);畫白色棋子if(v==2){16);if(v==3){響應鼠標的點擊事件,根據(jù)鼠標的點擊來下棋,根據(jù)下棋判斷勝負等publicvoidmousePressed(MouseEventevt){intx=(evt.getX()-10)/20;inty=(evt.getY()-10)/20;"if(evt.getModifiers()==MouseEvent.){cm,y);System.out.println(cm.getisOdd()+""+cm.getarrMapShow()[x][y]);nt();if.judgeSuccess(x,y,sOdd())){cm.showSuccess(this);me();判斷是否為人機對弈if(ChessFrame.&&!cmxist()){puterDo(.getWidth(),eight());nt();ifcm.judgeSuccess(.getX(),.getY(),isOdd())){cm.showDefeat(sume();
evt){}publicvoidmouseReleased(MouseEventevt){}publicvoidmouseEntered(MouseEventmouseevt){}publicvoidmouseExited(MouseEventmouseevent){}publicvoidmouseDragged(MouseEventevt){}響應鼠標的拖動事件publicvoidmouseMoved(MouseEventmoveevt){intx=(moveevt.getX()-10)/20;inty=(moveevt.getY()-10)/20;y);nt();importjava.awt.event.WindowAdapter;響應退出窗口classChessWindowEventextendsWindowAdapter{publicvoidwindowClosing(WindowEvente){()四.序調(diào)試與運行棋盤棋盤:棋盤:型二:型三:對戰(zhàn):五.結論禁手,沒有能設置悔棋,還有很多東西可以擴充完善。完整源代碼:importjava.awt.event.*;importjava.applet.*;importjava.io.PrintStream;importjavax.swing.JComponent;classChessFrameextendsJFrameimplementsActionListener{publicstaticbooleaniscomputer=true,checkcomputer=true;privateintwidth,height;privateChessModelcm;privateMainPanelmp;publicChessFrame(){Containercon=this.getContentPane();this.addWindowListener(newChessWindowEvent());JMenuBarmbar=newJMenuBar();JMenugameMenu=newJMenu("游戲");mbar.add(makeMenu(gameMenu,newObject[]{"開局",null,"棋盤",null,"模式",null,"退出"JMenulookMenu=newJMenu("外觀");mbar.add(makeMenu(lookMenu,newObject[]{JMenuhelpMenu=newJMenu("版本");mbar.add(makeMenu(helpMenu,newObject[]{publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){JMenum=null;if(parentinstanceofJMenu)m=(JMenu)parent;elseif(parentinstanceofString)m=newJMenu((String)parent);for(inti=0;i<items.length;i++)if(items[i]==null)elseif(items[i]=="棋盤"){JMenujm=newJMenu("棋盤");ButtonGroupgroup=newButtonGroup();for(intj=0;j<strsize.length;j++){}elseif(items[i]=="模式"){JMenujm=newJMenu("模式");ButtonGroupgroup=newButtonGroup();for(inth=0;h<strmode.length;h++){m.add(makeMenuItem(items[i],target));publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){JMenuItemr=null;if(iteminstanceofString)r=newJMenuItem((String)item);elseif(iteminstanceofJMenuItem)r=(JMenuItem)item;if(targetinstanceofActionListener)publicJRadioButtonMenuItemmakeRadioButtonMenuItem(Objectitem,Objecttarget){JRadioButtonMenuItemr=null;if(iteminstanceofString)r=newJRadioButtonMenuItem((String)item);elseif(iteminstanceofJRadioButtonMenuItem)r=(JRadioButtonMenuItem)item;if(targetinstanceofActionListener)returnr;publicvoidMapSize(intw,inth){setSize(w*24,h*27);publicbooleangetiscomputer(){returnthis.iscomputer;publicvoidrestart(){intmodeChess=cm.getModeChess();if(modeChess<=3&&modeChess>=0){cm=newChessModel(modeChess);publicvoidactionPerformed(ActionEvente){Stringarg=e.getActionCommand();"javax.swing.plaf.metal.MetalLookAndFeel");}catch(Exceptionee){}cm=newChessModel(1);cm=newChessModel(2);cm=newChessModel(3);cm=newChessModel(cm.getModeChess());cm=newChessModel(cm.getModeChess());JOptionPane.showMessageDialog(null,"第一版","版本);importjava.awt.event.*;importjava.applet.*;importjava.io.PrintStream;importjavax.swing.JComponent;importjavax.swing.JPanel;classChessModel{privateintwidth,height,modeChess;privateintx=0,y=0;privateint[][]arrMapShow;privatebooleanisOdd,isExist;publicChessModel(){}publicChessModel(intmodeChess){if(modeChess==1){PanelInit(14,14,modeChess);if(modeChess==2){PanelInit(18,18,modeChess);if(modeChess==3){PanelInit(22,22,modeChess);privatevoidPanelInit(intwidth,intheight,intmodeChess){this.width=width;this.height=height;this.modeChess=modeChess;arrMapShow=newint[width+1][height+1];for(inti=0;i<=width;i++){for(intj=0;j<=height;j++){arrMapShow[i][j]=-1;publicbooleangetisOdd(){publicvoidsetisOdd(booleanisodd){publicbooleangetisExist(){publicintgetWidth(){publicintgetHeight(){publicintgetModeChess(){publicint[][]getarrMapShow(){privatebooleanbadxy(intx,inty){if(x>=width+20||x<0)returny>=height+20||y<0;publicbooleanchessExist(inti,intj){if(this.arrMapShow[i][j]==1||this.arrMapShow[i][j]==2)publicvoidreadyplay(intx,inty){publicvoidplay(intx,inty){publicvoidcomputerDo(intwidth,intheight){intmax_black,max_white,max_temp,max=0;System.out.println("計算機走棋...");for(inti=0;i<=width;i++){for(intj=0;j<=height;j++){}publicvoidsetX(intx){publicvoidsetY(inty){publicintgetX(){publicintgetY(){publicintcheckMax(intx,inty,intblack_or_white){intnum=0,max_num,max_temp=0;for(inti=1;i<5;i++){for(inti=1;i<5;i++){}for(inti=1;i<5;i++){for(inti=1;i<5;i++){for(inti=1;i<5;i++){if(y_temp1<0||x_temp1<0)if(y_temp1>this.height||x_temp1>this.width)for(inti=1;i<5;i++){if(y_temp1<0||x_temp1>this.width)if(y_temp1>this.height||x_temp1<0)publicbooleanjudgeSuccess(intx,inty,booleanisodd){intx_temp=x,y_temp=y;for(inti=1;i<6;i++){for(inti=1;i<6;i++){for(inti=1;i<6;i++){for(inti=1;i<6;i++){for(inti=1;i<6;i++){if(y_temp1<0||x_temp1<0)for(inti=1;i<6;i++){if(y_temp1>this.height||x_temp1>this.width)for(inti=1;i<6;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校重大項目安排管理制度
- 奧林匹克小賽的題目及答案
- 綜合a類題型分析題目及答案
- 養(yǎng)老院老人生活設施維修人員激勵制度
- 鳴陽礦業(yè)考試題目及答案
- 多邊形面積100道題目及答案
- 辦公室招聘與培訓管理制度
- 數(shù)據(jù)分析報告撰寫要求與技巧
- IT項目風險管理策略要點
- 輕量化統(tǒng)計制度
- 急診PDCA課件教學課件
- 2025-2030手術機器人醫(yī)生培訓體系構建與醫(yī)院采購決策影響因素報告
- 呼倫貝爾市縣域經(jīng)濟發(fā)展的困境與突破路徑研究
- 中遠海運博鰲有限公司東嶼島旅游度假區(qū)招聘筆試題庫2025
- 2025年本科院校圖書館招聘面試題
- 2025-2026學年人教版(2024)初中生物八年級上冊教學計劃及進度表
- 項目物資退庫管理辦法
- 2025中國奢華酒店價值重塑與未來圖景白皮書
- 2025至2030中國碳納米管行業(yè)市場發(fā)展分析及風險與對策報告
- 制冷站5s管理制度
- 湖北中煙2025年招聘綜合測試
評論
0/150
提交評論