任务要求
用编程语言实现一个服务器端的游戏2d场景管理模块,场景上包括了地图的信息,以及一些游戏元素,如NPC,树,石头,建筑等静态元素,地图设计尽可能大,场景上至少包含100个活动元素(玩家、NPC等)模拟随机行走(行走方式有:1.单步移动,2.两点寻路),活动元素不能穿越静态元素的位置。 要求使用合理的数据结构及算法实现。
编程要求:
- 无需图形界面
- 地图尺寸为10000*10000个基础单位
- 活动元素随机行走触发随机事件,每秒移动一次
- 可以使用go/c++语言实现
- Cpu利用率经可能低
- 建议开发周期不超过2周
实现
主要思路
- 使用网格法模拟地图
- 随机生成10000x10000的地图
- 地图大,要求CPU利用率低,没做内存要求,所以在合理的情况下尽量空间换时间
- 使用A Star算法做两点间路径搜索,但是必须做量级的优化
- 由于是静态地图,把大地图拆分为多个区块,在区块边上计算互通点,互通点描述区块间的连通性,预存区块内互通点间的路径
- 搜索使用堆和启发函数优化
- 经过拆分和预处理,每次寻路只需要搜索一次100x100的起始点到互通点到路径、一次100x100的区块间路径、一次100x100的互通点到目标点的路径。
- 经过优化,搜索区域从10000x10000降至3次100x100的空间。
代码在特殊情况有bug,但是数据庞大而随机没有继续调试,实现了主要功能。
1 | //#define Debug |