介绍
JavaSE实践五子棋和中国象棋游戏,棋盘,棋子绘制,输赢判定重置棋盘,单机博弈。
五子棋棋盘
 
中国象棋棋盘
 
使用说明
- 启动类 Main.java, 面板类 Panel.java绘制棋盘和玩法,实体类 ChessPiecesNode.java
 - 启动类 Main.java中的 listener 方法监听五子棋结束状态
 
//监听游戏结束自动重绘面板
public static void listener(Panel panel, JFrame jFrame) {
    panel.addPropertyChangeListener(new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals("status") && evt.getNewValue() != null && (Boolean) evt.getNewValue()) {
                com.xq.cn.views.Panel panelNew = new Panel(TypeEnum.GOMOKU.getType(), 800, 800, 15, 15);
                jFrame.add(new JLabel("This is Panel 2"));
                jFrame.remove(panel);
                jFrame.add(panelNew);
                jFrame.revalidate(); // 重新验证布局
                jFrame.repaint();// 请求重绘组件
                listener(panelNew, jFrame);
            }
        }
    });
}
 
- 面板类 Panel.java绘制棋盘和玩法 

五子棋判断五子一线的算法如上图,观察数据后得出结论为:五子一线时组成的数列刚好是一组等差数列,由此得出下方的算法 
//获取任意节点连成五子的所有可能
public List<Integer> arithmeticSequence(Integer id, Integer step) {
    //1、等差步长为step的等差数列
    List<Integer> listStep = new ArrayList<>();
    for (int i = 1; i <= 5; i++) {
        listStep.add(id + ((i - 1) * step));
    }
    for (int i = 1; i <= 5; i++) {
        int num = id - ((i - 1) * step);
        if (num <= 0) {
            break;
        }
        listStep.add(num);
    }
    eturn listStep;
}
 
- 实体类 ChessPiecesNode.java
 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChessPiecesNode {
    /**
     * 坐标点(交点索引,从左往右,从上往下计数)
     */
    private Integer id;
    /**
     * 坐标点x
     */
    private Integer x;
    /**
     * 坐标点y
     */
    private Integer y;
    /**
     * 在棋盘中对应的最小点击点位对应的坐标点x
     */
    private Integer minX;
    /**
     * 在棋盘中对应的最小点击点位对应的坐标点y
     */
    private Integer minY;
    /**
     * 在棋盘中对应的最大点击点位对应的坐标点x
     */
    private Integer maxX;
    /**
     * 在棋盘中对应的最大点击点位对应的坐标点y
     */
    private Integer maxY;
    /**
     * 坐标点使用状态(0-未被使用,1-已使用)
     */
    private Integer status;
    /**
     * 棋子对应的颜色
     */
    private Color color;
    /**
     * 被使用的类型(黑/白)
     */
    private Integer type;
}
 
视频展示
项目地址
传送门



















![[干货!必看文章]学会如何用L4级AI软件开发平台免费制作应用程序](https://img-blog.csdnimg.cn/direct/3b40d06f7b7642ab8991474f8c585c0f.jpeg)