• 大小: 98KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-23
  • 语言: 其他
  • 标签: 五子棋  alphabeta  

资源简介

界面借鉴了网上的开源资源,进行了部分改进。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\StartChessJframe$MyItemListener.class
     文件        3118  2019-01-16 20:29  fir2\bin\StartChessJframe.class
     目录           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个文件信息

评论

共有 条评论