联机象棋(1)

需求

  • 登录、注册
  • 在线人人匹配对战(待完善)
  • 人机对战(待实现)

架构与开发技术

  • 架构上采用客户端-服务端模式
  • 客户端主要使用Java Awt/Swing、Netty,服务端使用SpringBoot、Netty、MyBatis
  • 软件上数据库使用MySQL,Java JDK版本为8

主要设计与实现

1. 棋盘、棋子布局
  • 主要将象棋棋盘看成一个10*9的二维方格,用一个二维数组map[10][9]来表示,原象棋红黑双方共32枚棋子,使用一个数组Chess[32]表示。
  • map[i][j]=-1表示该棋盘处当前没有棋子,map[i][j]不等于-1则表示为Chess[map[i][j]]的索引。
2. 选棋、下棋

1. 选棋下棋总体流程图

选棋下棋流程图
2. 判断棋子移动是否合法

利用面向对象编程的多态特性,首先构建一个抽象类Chess,其中包含一个抽象方法isAllowMove(),由各类棋子继承编写自己的走法规则约束。

象棋类图

3. 人人对战匹配

​ 目前暂时是使用阻塞队列实现,但实际多人使用时还是会存在一些并发问题,后面再完善。其当前流程图如下:

游戏匹配

4. 判断是否被将

​ 每次棋局盘面的变化都判断一下是否有棋子可以吃掉王/帅。

5. 通信模块
public class Command {

    private Integer userId;

    private Integer enemyId;

    private String commandType;

    private int oldX, oldY;

    private int newX, newY;

    private String enemyName;

    private String message;

    private short player;
}

使用Netty自定义编码器和解码器进行数据的传输,根据不同命令类型做出相应的反应。比如下棋、悔棋、人数等。

6. 其他如声音效果等提升用户体验
  1. 落子声音、吃、将军的声音;
  2. 合理提示信息。
7. 人机对战(尚未实现)
8. 最终实现效果图

最终界面效果图

github: https://github.com/zjx1230/chess

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值