您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java怎么實現五子棋單機版的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java怎么實現五子棋單機版文章都會有所收獲,下面我們一起來看看吧。
Java五子棋設計流程:
1.創建窗口和設計一個棋盤界面
2.實現鼠標點擊,棋子出現,黑白棋輪流下
3.能夠判斷輸贏
4.添加按鈕功能
實現結果圖:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Test { public static void main(String[] args) { new MyFrame(); } } class MyFrame extends JFrame implements MouseListener{ //保存坐標 int x; int y; int x1; int y1; //黑子數 //白子數 //1是黑下,2是白下 //默認開始是黑旗先下 int flag=1; //表示游戲是否結束 //true游戲開始,false游戲結束,不能再下 boolean canPlay=true; //保存之前下過的棋子的坐標 //'0'代表沒有棋子,'1'代表黑棋,'2'代表白棋 int [][]allChess=new int[19][19]; //int [][]allChess=new int[25][25]; //當前棋子的總數 int chessSum=0; BufferedImage bgImage =null; JButton withdraw=new JButton("悔棋"); JButton restart=new JButton("重新開始"); JButton exit=new JButton("退出"); JPanel south=new JPanel(); public MyFrame() { this.setTitle("五子棋"); setSize(630,700); setLayout(new BorderLayout()); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { bgImage=ImageIO.read(new File("C:\\Users\\us\\Desktop\\1.jpg")); } catch (IOException e1) { e1.printStackTrace(); } addMouseListener(this);//將窗體加入監聽 south.setLayout(new FlowLayout(FlowLayout.LEFT,60,30)); south.add(restart); south.add(withdraw); south.add(exit); //初始化按鈕事件監聽器內部類 MybuttonListener buttonListener =new MybuttonListener(); //將三個按鈕事件注冊監聽事件 restart.addActionListener(buttonListener); withdraw.addActionListener(buttonListener); exit.addActionListener(buttonListener); //將按鈕面板加到窗體的南部 this.add(south,BorderLayout.SOUTH); setVisible(true); } public void paint(Graphics g) { int tempSum=chessSum; //棋盤 g.drawImage(bgImage,8,30,this); for(int colum=58;colum<600 ;colum=colum+30){//行 g.drawLine(38,colum,578,colum); } for(int rand=38;rand<600;rand=rand+30){//列 g.drawLine(rand, 58,rand, 598); } //黑點 g.fillOval(122, 143, 10, 10); g.fillOval(484, 143, 10, 10); g.fillOval(122, 504, 10, 10); g.fillOval(303, 353, 10, 10); g.fillOval(484, 503, 10, 10); g.fillOval(122, 355, 10, 10); g.fillOval(484, 355, 10, 10); g.fillOval(303, 145, 10, 10); g.fillOval(303, 503, 10, 10); for(int i=0;i<allChess.length;i++) { for(int j=0;j<allChess.length;++j) { //下黑子 if(allChess[i][j]==1) { int tempX=i*30+38;//左邊界到棋盤的距離 int tempY=j*30+58;//上邊界到棋盤的距離 g.setColor(Color.black); g.fillOval(tempX-13,tempY-13,25,25); } //下白子 if(allChess[i][j]==2) { int tempX=i*30+38; int tempY=j*30+58; g.setColor(Color.white); g.fillOval(tempX-13,tempY-13,25,25); } } } //最后棋子用紅框表示 if(chessSum>0) { g.setColor(Color.red); g.drawRect(x*30+38-13, y*30+58-13, 25,25); } //g.setColor(Color.red); //g.drawRect(x1*30+38-13, y1*30+58-13, 25,25); chessSum++; System.out.println("總數為"+(chessSum-1)); } public void mouseClicked(MouseEvent e) { x=e.getX(); y=e.getY(); //System.out.println("x="+e.getX()+" "+"y="+e.getY()); if(canPlay) { if(x>=38&&x<=588&&y>=58&&y<=620) { x=(x-38)/30;//38起點,適應19x19 y=(y-58)/30; if(allChess[x][y]==0){//此點沒有棋子,才可下 //判斷該由哪方下棋 if(flag==1) {//'1'代表由黑方下 allChess[x][y]=1;//'1'表示此處放黑棋 this.checkFive();//判斷黑棋是否五子相連 flag=2; } else { allChess[x][y]=2;//'2'表示此處放白棋 this.checkFive();//判斷白棋是否五子相連 flag=1;//'1'代表由黑方下 } this.repaint(); } } } } //判斷五子相連 public void checkFive(){ //把要下的棋子顏色保存 int color=allChess[x][y]; //計算已連棋子個數 int count=1; //判斷橫向右邊是否五子 for(int i=1;i<5;i++) { if(x>=15) break; if(color==allChess[x+i][y]) { count++; } checkWin(count); } count=1; //判斷橫向左邊是否五子 for(int i=1;i<5;i++) { if(x<=3)//當棋子左邊無法連成五子,直接退出 break; if(color==allChess[x-i][y]) { count++; } checkWin(count); } count=1; //判斷豎向下邊是否五子 for(int i=1;i<5;i++) { if(y>=15)//當棋子左邊無法連成五子,直接退出 break; if(color==allChess[x][y+i]) { count++; } checkWin(count); } count=1; //判斷豎向上邊是否五子 for(int i=1;i<5;i++) { if(y<=3)//當棋子豎向上邊無法連成五子,直接退出 break; if(color==allChess[x][y-i]) { count++; } checkWin(count); } count=1; //判斷右斜上邊是否五子 for(int i=1;i<5;i++) { if(y<=3||x>=15)//當棋子右斜上邊無法連成五子,直接退出 break; if(color==allChess[x+i][y-i]) { count++; } checkWin(count); } count=1; //判斷左斜向下邊是否五子 for(int i=1;i<5;i++) { if(x<=3||y>=15)//當棋子左斜向下邊無法連成五子,直接退出 break; if(color==allChess[x-i][y+i]) { count++; } checkWin(count); } count=1; //判斷左斜向上邊是否五子 for(int i=1;i<5;i++) { if(x<=3||y<=3) break; if(color==allChess[x-i][y-i]) { count++; } checkWin(count); } count=1; //判斷右斜向下邊是否五子 for(int i=1;i<5;i++) { if(y>=15||x>=15) break; if(color==allChess[x+i][y+i]) { count++; } checkWin(count); } count=1; } public void mouseEntered(MouseEvent e) { x1=e.getX(); y1=e.getY(); if(x1>=38&&x1<=588&&y1>=58&&y1<=620) { setCursor(new Cursor(Cursor.HAND_CURSOR)); } } public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent e) { } public void checkWin(int count) { if(count>=5) {//五子相連 if(allChess[x][y]==1) { JOptionPane.showMessageDialog(this, "黑方勝出!!!!!!"); } if(allChess[x][y]==2) { JOptionPane.showMessageDialog(this, "白方勝出!!!!!!"); } canPlay=false;//游戲結束 } } //重新開始 public void restartGame(){ for(int i=0;i<allChess.length;i++) { for(int j=0;j<allChess.length;j++) { allChess[i][j]=0; } } flag=1;//默認開始是黑旗先下 canPlay=true; repaint(); } //悔棋 public void goback() { if(allChess[x][y]!=0) {//當棋盤有棋子,才能悔棋 allChess[x][y]=0; if(flag==1) { flag=2; repaint(); } else { flag=1; repaint(); } } } //按鈕事件監聽器內部類 class MybuttonListener implements ActionListener{ public void actionPerformed(ActionEvent e) { if(e.getSource()==restart) { restartGame(); } if(e.getSource()==withdraw) { goback(); } if(e.getSource()==exit) { System.exit(0); } } } }
關于“Java怎么實現五子棋單機版”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java怎么實現五子棋單機版”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。