资源简介

五子棋的人机对弈的实现,其编程语言是 java,带gui界面,这适合AI的初学者下载学习

资源截图

代码片段和文件信息

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
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;
import javax.swing.JPanel;

public class fivechess extends Jframe{

public fivechess(){
GameBoard gb=new GameBoard();
Container contentPane=getContentPane();  
    contentPane.add(gb);
    gb.setOpaque(true);
    add(gb);
    setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
    setSize(526549);
    setLocation(400100);
}


public static void main(String[] args) {
// TODO Auto-generated method stub
fivechess f=new fivechess();
f.settitle(“五子棋单机版-人机对战“);
f.setVisible(true);

}

public class GameBoard extends JPanel implements MouseListener{
BufferedImage bgImage=null;//背景图片
int row=14;//棋盘行数
int col=14;//棋盘列数
int span=30;//每个单元格的宽度
int dis=30;//边距
int[][] ChessBoard=new int[row+1][col+1];//棋子代表的二维数组,其中0代表没有落子1代表黑子2代表白子

//保存每一步的操作,便于悔棋
int[] allx=new int[(row+1)*(col+1)];
int[] ally=new int[(row+1)*(col+1)];

int chessNum=0;//已经下了的棋子数目
boolean IsBlack=true;//判断哪方下子(黑子先行)
int lastx=-1lasty=-1;   //最后下子的位置
boolean Win=false;//是否胜利的标志

int[][][] Player=new int[row+1][col+1][4];
int[][][] Computer=new int[row+1][col+1][4];
//设置棋子半径
static final int radius=15;
//棋盘的位置的分值(固定为15x15的棋盘)

//构造函数
public GameBoard() {
try {
bgImage=ImageIO.read(new File(“src/wuziqi.jpg“));
} catch (IOException e) {
e.printStackTrace();
}
this.addMouseListener(this);
//初始化棋盘
for(int i=0;i for(int j=0;j ChessBoard[i][j]=0;
}
}

}


//绘制棋盘
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(bgImage 0 0 row*span+2*dis col*span+2*dis null);
//绘制线条
for(int i=0;i<=row;i++){//横线
g.drawLine(dis dis+i*span col*span+dis dis+i*span);
}
for(int j=0;j<=col;j++){//竖线
g.drawLine(dis+j*span dis dis+j*span row*span+dis);
}
//绘制棋子
for(int i=0;i for(int j=0;j if(ChessBoard[i][j]!=0){//存在落子
//获取网格交叉点的坐标(在屏幕上的)
int x=i*span+dis;
int y=j*span+dis;
if(ChessBoard[i][j]==1){//如果落黑子
g.setColor(Color.BLACK);
RadialGradientPaint paint=new RadialGradientPaint(x-radius+25y-radius+1020new float[]{0f1f}new Color[]{Color.WHITEColor.BLACK});
((Graphics2D) g).setPaint(paint);  
            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING RenderingHints.VALUE_ANTIALIAS_ON);  
            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-11-14 19:34  FiveChessGame\
     文件         301  2017-11-14 18:34  FiveChessGame\.classpath
     文件         389  2017-11-14 18:34  FiveChessGame\.project
     目录           0  2017-11-14 18:34  FiveChessGame\.settings\
     文件         598  2017-11-14 18:34  FiveChessGame\.settings\org.eclipse.jdt.core.prefs
     目录           0  2017-11-16 23:29  FiveChessGame\bin\
     文件        6082  2017-11-17 14:47  FiveChessGame\bin\fivechess$GameBoard.class
     文件        1066  2017-11-17 14:47  FiveChessGame\bin\fivechess.class
     文件       14069  2017-11-14 21:07  FiveChessGame\bin\wuziqi.jpg
     目录           0  2017-11-14 21:07  FiveChessGame\src\
     文件        7662  2017-11-17 14:47  FiveChessGame\src\fivechess.java
     文件       14069  2017-11-14 21:07  FiveChessGame\src\wuziqi.jpg
     文件       10425  2017-11-14 18:36  FiveChessGame\wuziqi.jpg

评论

共有 条评论