资源简介
界面借鉴了网上的开源资源,进行了部分改进。alphabeta算法参考了网上的例子,加了一点改进,局面评估采用了网上开源资源的一部分,也加了一部分改进。该程序具备初步的智能,还有很大的改进空间
代码片段和文件信息
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
import alphabeta.Constant;
import alphabeta.EvalPosition;
import alphabeta.GobangBoard;
import alphabeta.Position;
/**
* 五子棋--棋盘类
*/
public class ChessBoard extends JPanel implements MouseListener {
public static final int MARGIN = 30;// 边距
public static final int GRID_SPAN = 35;// 网格间距
public static final int ROWS = 15;// 棋盘行数
public static final int COLS = 15;// 棋盘列数
Point[] chessList = new Point[(ROWS + 1) * (COLS + 1)];// 初始每个数组元素为null
boolean isBlack = true;// 默认开始是黑棋先
boolean gameOver = false;// 游戏是否结束
int chessCount;// 当前棋盘棋子的个数
int xIndex yIndex;// 当前刚下棋子的索引
Image img;
Image shadows;
Color colortemp;
private GobangBoard gobangBoard = new GobangBoard(15 15);
public ChessBoard() {
// setBackground(Color.GRAY);//设置背景色为橘黄色
img = Toolkit.getDefaultToolkit().getImage(“board.jpg“);
shadows = Toolkit.getDefaultToolkit().getImage(“shadows.jpg“);
addMouseListener(this);
addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
// 将鼠标点击的坐标位置转成网格索引
int y1 = (e.getX() - MARGIN + GRID_SPAN / 2) / GRID_SPAN;
int x1 = (e.getY() - MARGIN + GRID_SPAN / 2) / GRID_SPAN;
// 游戏已经结束不能下
// 落在棋盘外不能下
// x,y位置已经有棋子存在,不能下
if (x1 < 0 || x1 > ROWS || y1 < 0 || y1 > COLS || gameOver || findChess(x1 y1))
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
// 设置成默认状态
else
setCursor(new Cursor(Cursor.HAND_CURSOR));
}
});
}
// 绘制
public void paintComponent(Graphics g) {
super.paintComponent(g);// 画棋盘
int imgWidth = img.getWidth(this);
int imgHeight = img.getHeight(this);// 获得图片的宽度与高度
int FWidth = getWidth();
int FHeight = getHeight();// 获得窗口的宽度与高度
int x = (FWidth - imgWidth) / 2;
int y = (FHeight - imgHeight) / 2;
g.drawImage(img x y null);
for (int i = 0; i < ROWS; i++) {// 画横线
g.drawString(Integer.toString(i) MARGIN-20 MARGIN + i * GRID_SPAN);
g.drawLine(MARGIN MARGIN + i * GRID_SPAN MARGIN + (COLS-1) * GRID_SPAN MARGIN + i * GRID_SPAN);
}
for (int i = 0; i < COLS; i++) {// 画竖线
g.drawString(Integer.toString(i) MARGIN + i * GRID_SPAN MARGIN );
g.drawLine(MARGIN + i * GRID_SPAN MARGIN MARGIN + i * GRID_SPAN MARGIN + (ROWS-1) * GRID_SPAN);
}
// 画棋子
for (int i = 0; i < chessCount; i++) {
// 网格交叉点x,y坐标
int xPos = chessList[i].getX() * GRID_SPAN + MARGIN;
int yPos = chessList[i].getY() * GRID_SPAN + MARGI
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-16 20:11 fir2\
文件 303 2019-01-16 20:29 fir2\.classpath
文件 380 2017-07-13 15:05 fir2\.project
目录 0 2017-07-13 15:07 fir2\.settings\
文件 57 2017-07-13 15:07 fir2\.settings\org.eclipse.core.resources.prefs
文件 598 2017-07-13 15:05 fir2\.settings\org.eclipse.jdt.core.prefs
目录 0 2019-01-16 20:29 fir2\bin\
目录 0 2019-01-16 20:29 fir2\bin\alphabeta\
文件 1141 2019-01-16 20:29 fir2\bin\alphabeta\Constant.class
文件 923 2019-01-16 20:29 fir2\bin\alphabeta\EvalPosition.class
文件 20468 2019-01-16 20:29 fir2\bin\alphabeta\GobangBoard.class
文件 893 2019-01-16 20:29 fir2\bin\alphabeta\Move.class
文件 703 2019-01-16 20:29 fir2\bin\alphabeta\Position.class
文件 991 2019-01-16 20:29 fir2\bin\alphabeta\StateCount.class
文件 1083 2019-01-16 20:29 fir2\bin\ChessBoard$1.class
文件 9095 2019-01-16 20:29 fir2\bin\ChessBoard.class
文件 701 2019-01-16 20:29 fir2\bin\Point.class
文件 1581 2019-01-16 20:29 fir2\bin\StartChessJfr
文件 3118 2019-01-16 20:29 fir2\bin\StartChessJfr
目录 0 2018-12-26 10:10 fir2\lib\
文件 45 2017-07-13 15:39 fir2\r.bat
目录 0 2019-01-16 20:12 fir2\src\
目录 0 2019-01-15 09:54 fir2\src\alphabeta\
文件 996 2019-01-15 09:53 fir2\src\alphabeta\Constant.java
文件 617 2019-01-11 11:28 fir2\src\alphabeta\EvalPosition.java
文件 33739 2019-01-16 20:10 fir2\src\alphabeta\GobangBoard.java
文件 581 2019-01-11 09:54 fir2\src\alphabeta\Move.java
文件 425 2019-01-11 10:45 fir2\src\alphabeta\Position.java
文件 1004 2019-01-15 10:24 fir2\src\alphabeta\StateCount.java
文件 12161 2019-01-16 20:22 fir2\src\ChessBoard.java
文件 521 2017-07-13 15:07 fir2\src\Point.java
............此处省略1个文件信息
相关资源
- 五子棋终结者
- 五子棋源码+算法详解
- 基于51单片机实现简单五子棋
- 五子棋(含较高级的人机对战)
- 基于CSocKet的网络应用五子棋设计与实
- Qt五子棋程序源码
- flash as3 五子棋游戏源码
- 引入了UCT算法的围棋AI程序代码
- Qt编写的网络五子棋
- αβ剪枝算法五子棋
- qt网络五子棋
- 五子棋棋盘的QT实现
- 毕业设计-网络五子棋的外文翻译
- 五子棋源码加详细注释
- 嵌入式 五子棋课程设计!!
- 五子棋局域网联机版
- AS3.0五子棋源文件
- 五子棋,C语言代码,dos环境支持鼠
- 五子棋人机对弈论文 博弈树
- 基于QT和OpenCV的五子棋实现源码
- C/S架构五子棋课程设计报告
- 论文--五子棋
- 五子棋 Labview
- 简易五子棋
- 通过alpha-belta剪枝的极大极小值算法实
- 五子棋 Linux make
- 用labview设计五子棋
- VC五子棋游戏设计VC五子棋游戏设计
- 蓝牙对战五子棋,含ai
- linux下QT游戏五子棋源代码
评论
共有 条评论