联机象棋(1)
2021/7/1 23:22:35
本文主要是介绍联机象棋(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
联机象棋(1)
- 需求
- 架构与开发技术
- 主要设计与实现
- 1. 棋盘、棋子布局
- 2. 选棋、下棋
- 3. 人人对战匹配
- 4. 判断是否被将
- 5. 通信模块
- 6. 其他如声音效果等提升用户体验
- 7. 人机对战(尚未实现)
- 8. 最终实现效果图
需求
- 登录、注册
- 在线人人匹配对战(待完善)
- 人机对战(待实现)
架构与开发技术
- 架构上采用客户端-服务端模式
- 客户端主要使用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. 其他如声音效果等提升用户体验
- 落子声音、吃、将军的声音;
- 合理提示信息。
7. 人机对战(尚未实现)
8. 最终实现效果图
github: https://github.com/zjx1230/chess
这篇关于联机象棋(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南