ancient-empire 说明
ancient-empire 是项目远古帝国网页版 的后端项目(现在该项目在持续开发中.......)
设计
1.用户管理
2.地图管理
3.游戏管理
1.游戏的核心控制
-
游戏的核心控制是基于事件指令的;
-
客户端(web前端,移动前端...)根据用户的操作发出事件(事件集),后端处理事件,生成指令(指令集), 前端再根据指令做出相应的渲染;
-
其中后端维护一局游戏的生命周期,即GameContext 维护在GameContextManger中;
-
客户端对操作做出校验,校验成功通过websocket长连接发出事件,后端接受事件,封装成事件对象,发送到GameContext, GameContext获取对应事件的处理器,处理事件,返回结果,生成相应指令;
-
玩家的websocket连接管理 玩家先连接到服务器,单机验证完信息直接创建一个GameContext,
2.使用模板管理
- 游戏的内容都是可以配置的,用户可以选择自己的角色动画,角色描述,甚至攻击动画,使用能力的动画,等等 当然这要求用户有一定的像素绘画能力
- 用户创建单位 模板可以复用
4.事件指令模型的好处
-
可以不关心客户端,只需要接受事件,处理事件,方便多个平台
-
便于联机,很多时候一个指令是需要发送到多个客户端显示的
4.联机管理
暂无
5.人机管理
1.人机操作
- 当GameContextManger判断当前回合是人机回合的时候,会新生成一个GameRobot 对象 这是一个线程,从创建到结束取决于自身的逻辑
5.客户端管理
-
客户端抽离出公共部分,包括对命令的解析等
-
网页web使用uniapp 目前支持web端和微信小程序端
6.扩展
-
因为一个应用维护的都是有状态的(维护了不同的GameContext) 如果无状态需要频繁操作数据库, 且前端也每次都要传大Map过来,暂时不扩展
-
模块化
- common 通用模块
- auth 人员管理及验证模块
- base 基础模块,维护地图信息等
- core 维护核心处理模块
- ws网络请求
- 机器人模块
- startup 启动模块
7.其他
事件集
ancient-empire 前端项目地址
https://github.com/therNoY/ancient-empire-web/
其他技术
项目使用mybatis-plus 作为持久层框架 使用spring-security 和 jwt 结合作为用户身份验证的框架 使用了spring-mail来处理邮件, 使用spring-boot-websocket 处理基于stomp的ws请求连接
修改bug (20210207-20210227)
- 机器人模块 只修复 不占领 √
- 机器人模块 目标移动的路线 不合理 应该计算 移动的最短距离 而不是直线最短 ===》 无向有权图两点之间的最短距离 迪杰斯特拉算法 √
- 机器人模块 购买单位优化 单位最低需要的占领城镇兵的数量 和 远程兵的数量 (现在容易触发 选择攻击类型优先的兵种) √
- 机器人模块 优化单位行动优先级 修改占领 和 攻击的优先级 √
- 机器人模块 优化远程单位选择合适的地点进行召唤和攻击 (现在是选择最近的点)√
- 核心模块 处理升级 √
- 机器人模块 修改单位只修复不占理 √
修改bug (20210228-20210314)
-
读取游戏 √ 增加userRecord的游戏保存的类型 √
- 单机遭遇战
- 单机战役
- 联机遭遇战 类型1,2 增加保存记录并退出 增加保存临时地图 在记录可以查到这个并继续游戏,最上面是一个临时地图 √
-
多人游戏 点击之后出现弹框(创建 搜索 刷新 房间列表 房间信息 退出 选择) √
创建房间 选择地图 设置初始属性 创建房间(生产房间号) 生成room对象 √ 创建房间号之后 连接ws 1.房主退出摧毁(刷新网页, 或者返回) 房主主动销毁 (点击退出) 超时摧毁 √ 如果房间还有其他人 其他人成为房主 √ 人加入可以聊天 √
完成房间任 (20210314-20210331)
- 设计房间 room表 √
- 可以加入房间判断 √
剩余主要任务 (20210407-20210505)
- 房间开始游戏,多人游戏完成 √
- 优化gameCoreIndex页面 √
- 单人可以保存遭遇战进度,并且可以从进度开始游戏 √
- 支持故事模式,并支持基础故事(支持天堂之怒)√
发现的缺陷
- 单位升级有问题 没有正确升级
✔ - 单位购买 有问题 领主死亡不能购买
- 单位召唤 有问题 都有召唤的action
- 机器人选择占领和修复 优先级不够
- 修改单位信息报错
✔ - 单位移动到地图边缘有问题(路径)
- 地图绘画有问题,画到边缘会报错
✔ - (小程序)用户首次登录报错 第二次才成功
- 注册用户userSetting不创建 后续会报错
✔ - 房间中预览再返回会直接退出房间
✔ - (小程序)小程序条件搜索框 输入之后再修改会导致参数获取错误
✔ - (小程序)微信小程序拖动无法改变顺序 暂不支持
- 点击分页选择第二页 再左右选择查不到数据
✔ - 初始化地图设置如果没有领主 获取不到游戏方 应该根据城堡和军队颜色设置
✔ - 初始化地图如果设置游戏方为空 则除了移除游戏角色还应改变地图的城堡颜色
✔ - (小程序)绘画地图覆盖单位不能马上更新
✔
还需要完成功能
-
单位模板和地图增加版本控制, 模板使用的是一个版本的单位 地图使用的是一个版本的模板 单位版本控制
✔ 模板版本控制✔ 地图版本控制✔ -
优化弹出提示框
✔ 弹出提示框✔ -
优化游戏主页界面(聊天使用同一个页面)
✔ -
监控(完善 可以观战 admin)
✔ -
控制增加单位需要admin角色权限 (暂时不做)
✔ -
增加日志控制
✔ 用户登录注册✔ -
多人游戏有人断线 游戏中情况
✔ -
加入人机游戏需要频繁等待 主要包括人机发出指令之后不能马上操做必须等到用户有交互才会执行下一个命令
前端代码迁移到uni-app上
- 首页
✔ - 用户管理
✔ - 战役
✔ - 遭遇战
✔ - 单位管理
✔ - 模板管理
✔ - 读取游戏
✔ - 地图管理
✔ - 编辑地图
✔
导出相应的脚本,服务器,发布游戏, 开始公测
以后作为版本升级开发
-
地图编辑功能 优化 地图编辑页面实现退出可以保存临时地图(是否保存根据修改历史判断) 地图编辑增加修改历史(存redis)可以撤回和恢复
-
补充单位能力 增加治疗能力 增加大地之子能力 增加德鲁伊能力
-
增加设置页面 包括userSetting表
✔ 背景音乐 -
增加单位晋升管理 补充晋升能力 骷髅王 神弓 战士主
-
增加版本发布说明字段
-
增加评论查看详情