Java五子棋游戲源代碼
FiveChessFrame.java
?package myGameFrame;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Collections;
import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JOptionPane;
public class FiveChessFrame extends JFrame implements MouseListener { int width=Toolkit.getDefaultToolkit().getScreenSize().width; int height=Toolkit.getDefaultToolkit().getScreenSize().height; BufferedImage bgImage=null; //保存棋子的坐標 int x=0;int y=0; //保存之前下過的全部棋子的坐標 //其中的數據內容:0,沒有棋子 1,黑子 3,白子 int[][] allChess=new int[19][19]; //標識當前是黑棋還是白棋 boolean isBlack=true; //表示當前游戲是否可以繼續 boolean canPlay=true; public FiveChessFrame() { setTitle("五子棋"); setSize(500, 500); setLocation((width-500)/2,(height-500)/2); setResizable(false); addMouseListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { bgImage=ImageIO.read(new File("D:/bg.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } setVisible(true); } public void paint(Graphics g) { g.drawImage(this.bgImage, 0,20,this); g.setFont(new Font("黑體",Font.BOLD,20)); g.drawString("游戲信息", 120, 60); g.setFont(new Font("送體",Font.BOLD,12)); g.drawString("黑方時間", 60, 480); g.drawString("白方時間", 260, 480); //橫360,豎360,左上12,73,右上372,73,左下12,433,右下372,433 int y_index=0; for (int i = 0; i < 19; i++) { g.drawLine(12, 73+y_index, 372, 73+y_index); y_index+=20; } int x_index=0; for (int i = 0; i < 19; i++) { g.drawLine(12+x_index, 73, 12+x_index, 433); x_index+=20; } g.fillOval(70, 131, 4, 4); g.fillOval(310, 131, 4, 4); g.fillOval(70, 371, 4, 4); g.fillOval(310, 371, 4, 4); //繪制全部棋子 for (int i = 0; i<19; i++) { for (int j = 0; j < 19; j++) { if(this.allChess[i][j]==1) { //畫黑子 int tempX=i20+12; int tempY=j20+73; g.fillOval(tempX-7, tempY-7, 14, 14); } if(this.allChess[i][j]==2) { //畫白子 int tempX=i20+12; int tempY=j20+73; g.setColor(Color.WHITE); g.fillOval(tempX-7, tempY-7, 14, 14); g.setColor(Color.BLACK); g.drawOval(tempX-7, tempY-7, 14, 14); } } } } public static void main(String[] args) {
} @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { if(canPlay==false) { return; } System.out.println(e.getX()+"---"+e.getY()); x=e.getX(); y=e.getY(); if(x>=12&&x<=372&&y>=73&&y<433) { x=(x-12)/20; y=(y-73)/20; if(allChess[x][y]==0) { if(this.isBlack==true) { allChess[x][y]=1; isBlack=false; } else { allChess[x][y]=2; isBlack=true; } //判斷這個棋子是否和其他棋子連成5個 boolean winFlag=this.Check_Win(); if(winFlag) { JOptionPane.showMessageDialog(this, "游戲結束,"+(allChess[x][y]==1?"黑方":"白方")+"獲勝"); canPlay=false; } } else { JOptionPane.showMessageDialog(this, "當前已有棋子,不能再下了!"); } this.repaint(); } } private boolean Check_Win() { boolean flag=false; //保存共有多少相同顏色的棋子相連 int count=1; //先判斷橫向,特點,y坐標相同,即allChess[x][y]中y相同 //判斷這個棋子的顏色 int color=this.allChess[x][y];
// if(color==allChess[x+1][y]) // { // count++; // if(color==allChess[x+2][y]) // { // count++; // } // } //用循環來做棋子相連的判斷! // int i=1;//橫向向右判斷 // while(color==this.allChess[x+i][y]) // { // count++; // i++; // } // //橫向向左判斷 // i=1; // while(color==this.allChess[x-i][y]) // { // count++; // i++; // } // if(count>=5) // { // flag=true; // } //綜向判斷 // int i2=1; // int count2=1; // while(color==this.allChess[x][y+i2]) // { // count2++; // i2++; // } // i2=1; // while(color==this.allChess[x][y-i2]) // { // count2++; // i2++; // } // if(count2>=5) // { // flag=true; // } // //斜方向判斷,y=x方向 // int i3=1; // int count3=1; // while(color==this.allChess[x+i3][y-i3]) // { // count3++; // i3++; // } // i3=1; // while(color==this.allChess[x-i3][y+i3]) // { // count3++; // i3++; // } // if(count3>=5) // { // flag=true; // } // //斜方向,y=-x // int i4=1; // int count4=1; // while(color==this.allChess[x-i4][y-i4]) // { // count4++; // i4++; // } // i4=1; // while(color==this.allChess[x+i4][y+i4]) // { // count4++; // i4++; // } // if(count4>=5) // { // flag=true; // } //判斷橫向 count=Check_Count(1, 0, color); if(count>=5) { flag=true; } else { //判斷縱向 count=Check_Count(0, 1, color); if(count>=5) { flag=true; } else { //判斷右上,左下 count=Check_Count(1, -1, color); if(count>=5) { flag=true; } else { //判斷左上,右下 count=Check_Count(1, 1, color); if(count>=5) { flag=true; } } } } return flag; } //判斷棋子連接的數量 private int Check_Count(int xChange,int yChange,int color) { int count=1; int tempX=xChange; int tempY=yChange; while(color==this.allChess[x+xChange][y+yChange]) { count++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange>0) yChange++; if(yChange<0) yChange--; } } xChange=tempX;yChange=tempY; while(color==this.allChess[x-xChange][y-yChange]) { count++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange>0) yChange++; if(yChange<0) yChange--; } } return count; } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
}
}</pre>
myChessFrame.java
?package myGameFrame;import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; 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.JFrame; import javax.swing.JOptionPane;
public class myChessFrame extends JFrame implements MouseListener { public myChessFrame() {
this.setTitle("五子棋"); this.setSize(500,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addMouseListener(this); this.setVisible(true); }@Override public void mouseClicked(MouseEvent e) { repaint(); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void paint(Graphics g) { g.setColor(new Color(244,100,20)); g.setColor(Color.red); g.drawString("asdjkadslkd",10,10); g.drawOval(10, 10, 300, 100); BufferedImage image=null; try { image = ImageIO.read(new File("D:/1.bmp")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } g.drawImage(image,100,100,this); } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub }
}</pre></div>
Test.java
?package myGameTest; import myGameFrame.*; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Test { /** * @param args */ public static void main(String[] args) { new FiveChessFrame(); // int x=130; // System.out.println((x-10)/20); } }本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!