五子棋實訓報告_第1頁
五子棋實訓報告_第2頁
五子棋實訓報告_第3頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、JAVA程序設計實訓報告課程名稱:JAVA程序設計專業:計算機應用技術班級:11計算機應用班小組成員:巨敏石麗濤張婭雯李延尚文學董丁喜周致遠指導老師:武文廷目錄一. 實訓目的1實訓題目和要求2.1實訓題目描述122實訓要求1二. 實訓報告內容3.1五子棋主框架13.2棋盤、棋子及說明信息13.3對弈算法相關問題設計1三. 實訓中的部分代碼2五子棋源程序代碼3六.總結17一、實訓目的本次實訓,學生可以將理論知識與具體實踐相結合,鞏固對JAVA相關方法和概念的理解。通過實訓單機版五子棋游戲的編程,掌握JAVA語言編程的基礎知識并能熟練運用,熟悉累聲明與對象的使用,運用JAVAswing編寫單機版五

2、子棋游戲,并實現其功能。通過本次實訓,可以開拓思維,增強編程思想,為深入學習JAVA打下良好的基礎。二、實訓題目描述和要求2.1實訓題目描述實訓題目:JAVA五子棋單機版游戲。描述:通過JAVA的swing組件,實現五子棋簡單的雙人對弈,并通過內部條件判斷實現輸贏的雙方的下棋過程。2.2實訓要求(1)五子棋游戲的主窗口也就是游戲界面的實現(2)棋子黑白色的設置及判定(3)完成判斷某一橫行是否練成五子及所有方向是否練成五子的功能(4)幾個簡單按鈕的實現,“重新開始”“悔棋”“退出”按鈕(5)菜單欄的實現,“重新開始”“悔棋”“退出”菜單項三、實訓報告內容3.1 主框架編寫一個startChees

3、JFrame類,主要用來顯行主窗體界面,包括工具條面板、菜單欄項。設置界面關閉事件。并編寫一個內部類MyItemListener來監聽按鈕和菜單欄的單機事件。3.2 棋盤、棋子(1)編寫point類,包括棋子的X/Y索引,顏色。定義構造函數和相應的get方法。(2)編寫ChessBoard類,設置棋盤背景顏色為橘黃色(3)在主框架類中創建ChessBoard對象,并添加到主框架中(4)編寫mousePressed方法來進行繪制棋盤和棋子3.3 對弈算法相關問題設計(1)編寫mousePressed方法的內容,預定義isBlack表示下的是黑棋還是白棋。PointCount表示當前棋子的個數。(

4、2)添加相應的判斷:不能畫到棋盤外,下過的地方不能再下(需要輔助方法findpoint)。(3)添加勝利的判斷iswin,添加標記變量gameOver。在mousePressed方法的最前面調用加入gameOver的判斷,在mousePressed方法的最后調用iswin,返回true則給出消息提示,gameOver設置為tuer。四、實訓中的部分代碼PrivateChessBoardchessboard;PrivateJPaneltoolbar;PrivateJButtonshartButton;PrivateJButtonbackButton;PrivateJButtonexiButton

5、;PublicclasspointPrivateintx;Privateinty;Privatecolorcolor;PublicstaticfinalintDIAMETER=30;Publicpointlintx,inty,colorcolorThis.X=x;This.y=y;This.color=color;PublicstartChessJFrame()SetTitle(“單機版五子棋”);chessboard=newchessboard();menuBar=newJMenuBar();sysMenu=newJMenu(“系統”);startMenuItem=newJMenuItem(

6、“重新開始”);exitMenuItem=newJMenuItem(“退出”);backMenuItem=newJMenuItem(“悔棋”);sysMenu.add(startMenuItem);五、五子棋源程序代碼/StartChessFrameimportjavax.swing.*;import;importjava.awt.*;publicclassStartChessFrameextendsJFrameprivateChessBoardchessBoard;privateJPaneltoolbarprivateJButtonstartButton,backButton,exitBut

7、ton;privateJMenuBarmenuBar;privateJMenusysMenu;privateJMenuItemstartMenuItem,exitMenuItem,backMenuItem;publicStartChessFrame()setTitle("單機版五子棋");chessBoard=newChessBoard();menuBar=newJMenuBar();sysMenu=newJMenu("系統");startMenuItem=newJMenuItem("重新開始");exitMenuItem=newJM

8、enuItem("退出");backMenuItem=newJMenuItem("悔棋");sysMenu.add(startMenuItem);sysMenu.add(backMenuItem);sysMenu.add(exitMenuItem);MyItemListenerlis=newMyItemListener();JbackMenuItem.addActionListener(lis);exitMenuItem.addActionListener(lis);menuBar.add(sysMenu);setJMenuBar(menuBar);im

9、port;publicclassPointprivateintx;privateinty;privateColorcolor;publicstaticfinalintDIAMETER=30;publicPoint(intx,inty,Colorcolor)this.x=x;this.y=y;this.color=color;publicintgetX()returnx;publicintgetY()returny;publicColorgetColor()returncolor;toolbar=newJPanel();startButton=newJButton("重新開始"

10、;);backButton=newJButton("悔棋");exitButton=newJButton("退出");toolbar.setLayout(newFlowLayout(FlowLayout.LEFT);toolbar.add(startButton);toolbar.add(backButton);toolbar.add(exitButton);startButton.addActionListener(lis);backButton.addActionListener(lis);exitButton.addActionListener(l

11、is);add(toolbar,BorderLayout.SOUTH);add(chessBoard);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/setSize(800,800);pack();privateclassMyItemListenerimplementsActionListenerpublicvoidactionPerformed(ActionEvente)Objectobj=e.getSource();if(obj=|obj=startButton)"重新開始.");chessBoard.restartGa

12、me();elseif(obj=exitMenuItem|obj=exitButton)System.exit(0);elseif(obj=backMenuItem|obj=backButton)"悔棋.");chessBoard.goback();publicstaticvoidmain(Stringargs)StartChessFramef=newStartChessFrame();f.setVisible(true);/ChessBoardimportjavax.swing.*;importjava.awt.*;import;import;import;publicc

13、lassChessBoardextendsJPanelimplementsMouseListenerpublicstaticfinalintMARGIN=30;publicstaticfinalintGRID_SPAN=35;publicstaticfinalintROWS=10;publicstaticfinalintCOLS=10;PointchessList=newPoint(ROWS+1)*(COLS+1);booleanisBlack=true;booleangameOver=false;intchessCount;intxIndex,yIndex;publicChessBoard(

14、)setBackground(Color.ORANGE);addMouseListener(this);addMouseMotionListener(newMouseMotionListener()publicvoidmouseDragged(MouseEvente)publicvoidmouseMoved(MouseEvente)intx1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;inty1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;if(x1<0|x1>ROWS|y1<0|y1>COLS|

15、gameOver|findChess(x1,y1)setCursor(newCursor(Cursor.DEFAULT_CURSOR);elsesetCursor(newCursor(Cursor.HAND_CURSOR););publicvoidpaintComponent(Graphicsg)super.paintComponent(g);for(inti=0;i<=ROWS;i+)g.drawLine(MARGIN,MARGIN+i*GRID_SPAN,MARGIN+COLS*GRID_SPAN,MARGIN+i*GRID_SPAN);for(inti=0;i<=COLS;i

16、+)g.drawLine(MARGIN+i*GRID_SPAN,MARGIN,MARGIN+i*GRID_SPAN,MARGIN+ROWS*GRID_SPAN);for(inti=0;i<chessCount;i+)intxPos=chessListi.getX()*GRID_SPAN+MARGIN;intyPos=chessListi.getY()*GRID_SPAN+MARGIN;g.setColor(chessListi.getColor();g.fillOval(xPos-Point.DIAMETER/2,yPos-Point.DIAMETER/2,Point.DIAMETER,

17、Point.DIAMETER);if(i=chessCount-1)g.setColor(Color.red);g.drawRect(xPos-Point.DIAMETER/2,yPos-Point.DIAMETER/2,Point.DIAMETER,Point.DIAMETER);publicvoidmousePressed(MouseEvente)if(gameOver)return;StringcolorName=isBlack?"黑棋":"白棋xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;yIndex=(e.

18、getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;if(xIndex<0|xIndex>ROWS|yIndex<0|yIndex>COLS)return;if(findChess(xIndex,yIndex)return;Pointch=newPoint(xIndex,yIndex,isBlack?Color.black:Color.white);chessListchessCount+=ch;repaint();if(isWin()Stringmsg=String.format("恭喜,%s贏了!",colorName);J

19、OptionPane.showMessageDialog(this,msg);gameOver=true;isBlack=!isBlack;publicvoidmouseClicked(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)publicvoidmouseReleased(MouseEvente)privatebooleanfindChess(intx,inty)for(Pointc:chessList)if(c!=null&&c.getX()=x&

20、&c.getY()=y)returntrue;returnfalse;privatebooleanisWin()intcontinueCount=1;for(intx=xIndex-1;x>=0;x-)Colorc=isBlack?Color.black:Color.white;if(getChess(x,yIndex,c)!=null)continueCount+;elsebreak;for(intx=xIndex+1;x<=ROWS;x+)Colorc=isBlack?Color.black:Color.white;if(getChess(x,yIndex,c)!=nu

21、ll)continueCount+;elsebreak;if(continueCount>=5)returntrue;elsecontinueCount=1;for(inty=yIndex-1;y>=0;y-)Colorc=isBlack?Color.black:Color.white;if(getChess(xIndex,y,c)!=null)continueCount+;elsebreak;for(inty=yIndex+1;y<=ROWS;y+)Colorc=isBlack?Color.black:Color.white;if(getChess(xIndex,y,c)!

22、=null)continueCount+;elsebreak;if(continueCount>=5)returntrue;elsecontinueCount=1;for(intx=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x+,y-)Colorc=isBlack?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;for(intx=xIndex-1,y=yIndex+1;y<=ROWS&&x>=0;x-,y+)

23、Colorc=isBlack?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;if(continueCount>=5)returntrue;elsecontinueCount=1;for(intx=xIndex-1,y=yIndex-1;y>=0&&x>=0;x-,y-)Colorc=isBlack?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;for(intx=xIndex+1,y=yIndex+1;y<=ROWS&&x<=COLS;x+,y+)Colorc=isBlack?Color.black:Color.white;if(getChess(x,y,c)!=null)continueCount+;elsebreak;if(con

溫馨提示

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

評論

0/150

提交評論