JavaSE 实战五子棋&中国象棋(单机简易版)

介绍

JavaSE实践五子棋和中国象棋游戏,棋盘,棋子绘制,输赢判定重置棋盘,单机博弈。

五子棋棋盘
中国象棋棋盘
使用说明
  1. 启动类 Main.java, 面板类 Panel.java绘制棋盘和玩法,实体类 ChessPiecesNode.java
  2. 启动类 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);
            }
        }
    });
}
  1. 面板类 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;
}
  1. 实体类 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;

}
视频展示

项目地址

传送门

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

멋진

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值