package litao;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class MyJFrameAI extends JFrame implements MouseListener{
int qx = 20, qy = 40, qw = 490, qh = 490; //棋盘位置、宽高
int bw = 150, bh = 50, bx = 570, by = 150; //按钮宽高、位置
int x = 0, y = 0; //保存棋子坐标
int[][] SaveGame = new int[15][15]; //保存每个棋子
int qc = 1;//记录白棋=2,黑棋=1
int qn = 0;//判断棋子是否重复
boolean canplay = true; //判断游戏是否开始和结束
String go = "黑子先行"; //游戏信息
int bq = 0, hq = 0;
//人机对战增加参数
int machine = 0;// 该数值为1代表电脑先行
int[][] score = new int[15][15];// 权值表,保存每个位置的分数
//窗体
public void myJFrame() {
this.setTitle("五子棋(人机对战)"); //标题
this.setSize(800, 550); //窗口大小
this.setResizable(false); //窗口是否可以改变大小=否
this.setDefaultCloseOperation(MyJFrameAI.EXIT_ON_CLOSE); //窗口关闭方式为关闭窗口同时结束程序
int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕宽度
int height = Toolkit.getDefaultToolkit().getScreenSize().height; //获取屏幕高度
this.setLocation((width - 800) / 2, (height - 600) / 2); //设置窗口默认位置以屏幕居中
this.addMouseListener(this);
this.setVisible(true); //窗口是否显示=是
first();
}
public static class Position {
static int listx;
static int listy;
}
public static class chessUI extends JPanel {
public static Position[] ps = new Position[300];
int i;
}
static chessUI ui = new chessUI();
static Position p = new Position();
//覆写paint方法,绘制界面
public void paint(Graphics g) {
//双缓冲技术防止屏幕闪烁
BufferedImage bi = new BufferedImage(800, 550, BufferedImage.TYPE_INT_ARGB);
Graphics g2 = bi.createGraphics();
//获取图片路径
BufferedImage image = null;
try {
//获取项目文件夹路径
File directory = new File("");
//路径拼接
image = ImageIO.read(new File(directory.getAbsolutePath() + "/src/image/wzqbj.jpeg"));
} catch (IOException e) {
e.printStackTrace();
}
g2.drawImage(image, 10, 10, this); //显示图片
g2.setColor(Color.BLACK);//设置画笔颜色
g2.setFont(new Font("华文行楷", 10, 50)); //设置字体
g2.drawString("晓时五子棋", 525, 100); //绘制字符
//棋盘
g2.setColor(Color.getHSBColor(30, (float) 0.10, (float) 0.90)); //设置画笔颜色
g2.fillRect(qx, qy, qw, qh); //绘制棋盘背景矩形
//开始按钮
g2.setColor(Color.WHITE); //设置画笔颜色
g2.fillRect(bx, by, bw, bh); //绘制开始按钮
g2.setFont(new Font("华文行楷", 10, 30)); //设置字体
g2.setColor(Color.black); //设置画笔颜色
g2.drawString("开始", 615, 185); //绘制字符
//悔棋按钮
g2.setColor(Color.LIGHT_GRAY); //设置画笔颜色
g2.fillRect(bx, by + 60, bw, bh); //绘制悔棋按钮
g2.setFont(new Font("华文行楷", 10, 30)); //设置字体
g2.setColor(Color.WHITE); //设置画笔颜色
g2.drawString("悔棋", 615, 245); //绘制字符
//认输按钮
g2.setColor(Color.GRAY); //设置画笔颜色
g2.fillRect(bx, by + 120, bw, bh); //绘制认输按钮
g2.setFont(new Font("华文行楷", 10, 30)); //设置字体
g2.setColor(Color.WHITE); //设置画笔颜色
g2.drawString("认输", 615, 305); //绘制字符
//游戏信息栏
g2.setColor(Color.getHSBColor(30, (float) 0.10, (float) 0.90)); //设置画笔颜色
g2.fillRect(550, 350, 200, 150); //绘制游戏状态区域
g2.setColor(Color.black); //设置画笔颜色
g2.setFont(new Font("黑体", 10, 20)); //设置字体
g2.drawString("游戏信息", 610, 380); //绘制字符
g2.drawString(go, 610, 410); //绘制字符
g2.setColor(Color.BLACK); //设置画笔颜色
//绘制棋盘格线
for (int x = 0; x <= qw; x += 35) {
g2.drawLine(qx, x + qy, qw + qx, x + qy); //绘制一条横线
g2.drawLine(x + qx, qy, x + qx, qh + qy); //绘制一条竖线
}
//绘制标注点
for (int i = 3; i <= 11; i += 4) {
for (int y = 3; y <= 11; y += 4) {
g2.fillOval(35 * i + qx - 3, 35 * y + qy - 3, 6, 6); //绘制实心圆
}
}
//绘制棋子
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
if (SaveGame[i][j] == 1) //黑子
{
int sx = i * 35 + qx;
int sy = j * 35 + qy;
g2.setColor(Color.BLACK);
g2.fillOval(sx - 13, sy - 13, 26, 26); //绘制实心圆
hq++;
}
if (SaveGame[i][j] == 2) //白子
{
int sx = i * 35 + qx;
int sy = j * 35 + qy;
g2.setColor(Color.WHITE);
g2.fillOval(sx - 13, sy - 13, 26, 26); //绘制实心圆
g2.setColor(Color.BLACK);
g2.drawOval(sx - 13, sy - 13, 26, 26); //绘制空心圆
bq++;
}
}
}
g.drawImage(bi, 0, 0, this);
}
//判断输赢
private boolean WinLose() {
boolean flag = false; //输赢
int count = 1; //相连数
int color = SaveGame[x][y]; //记录棋子颜色
//判断横向棋子是否相连
int i = 1; //迭代数
while (color == SaveGame[x + i][y]) {
count++;
i++;
}
i = 1; //迭代数
while (color == SaveGame[x - i][y]) {
count++;
i++;
}
if (count >= 5) {
flag = true;
}
//判断纵向棋子是否相连
count = 1;
i = 1; //迭代数
while (color == SaveGame[x][y + i]) {
count++;
i++;
}
i = 1; //迭代数
if (y > 0) {
while (color == SaveGame[x][y - i]) {
count++;
i++;
}
}
if (count >= 5) {
flag = true;
}
//判断斜向棋子是否相连(左上右下)
count = 1;
i = 1; //迭代数
while (color == SaveGame[x - i][y - i]) {
count++;
i++;
}
i = 1; //迭代数
while (color == SaveGame[x + i][y + i]) {
count++;
i++;
}
if (count >= 5) {
flag = true;
}
//判断斜向棋子是否相连(左下右上)
count = 1;
i = 1; //迭代数
while (color == SaveGame[x + i][y - i]) {
count++;
i++;
}
i = 1; //迭代数
while (color == SaveGame[x - i][y + i]) {
count++;
i++;
}
if (count >= 5) {
flag = true;
}
return flag;
}
//初始化游戏
public void Initialize() {
//遍历并初始化棋子位置数组
for (int i = 0; i < 15
流星宇352
- 粉丝: 0
- 资源: 1
最新资源
- 【岗位说明】广告公司各职员职务说明书(精美版).doc
- 【岗位说明】广告公司各职员职务说明书.doc
- 【岗位说明】广告公司各岗位职责.docx
- 【岗位说明】XX培训机构岗位职责行政职责.doc
- 【岗位说明】风华教育培训中心岗位职责说明书.doc
- 【岗位说明】高校行政人员岗位职责.doc
- 【岗位说明】教师各岗位岗位职责.doc
- 【岗位说明】教学秘书岗位职责.doc
- 【岗位说明】培训机构助教老师岗位职责.doc
- 【岗位说明】培训机构老师岗位职责.doc
- 【岗位说明】培训学校人员岗位职责及任职要求.doc
- 【岗位说明】学校及培训机构岗位职责大全.doc
- 【岗位说明】幼儿园岗位责任制度.doc
- 【岗位说明】幼儿园岗位职责.doc
- 【岗位说明】幼儿园各类人员岗位职责.doc
- 【岗位说明】辅导机构各岗位职责.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈