Java五子棋游戲源代碼

jopen 12年前發布 | 199K 次閱讀 Java 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!