142
社区成员




在游戏中经常需要随机生成一些环境、资源,学习该技术可以更加方便地去控制随机生成变量。技术难点在于,随机生成需要很强的扩展性,才能面对需求的变化。
是抽象出房间的概念:多种房间继承自Room
,每个房间这样就可以有更多不同的自己的物体,比如休息房间可以再增加休息点、怪物生成房间可以有怪物生成点。这步产生房间层次类。
控制生成环境变量:在编码前需要确定各种随机生成后的房间的特征,比如是图状还是树状,从多个点生成还是从一个点生成。我们这次项目为从一个点开始生成树状地图,采用深度优先的方式生成。这步产生生成过程类。
控制房间不重叠:使用一个栈记录房间生成过的位置,在生成过程中去探寻各个方向还有没有位置可以生成,如果没有则返回False代表生成失败。这步也为生成过程类的内容
工厂模式+创建者模式结合:有一个单独的函数通过传入参数来控制房间生成,工厂模式:房间类别,创建者模式:房间位置、房间信息(门的开口)。可以在设置完所有房间的信息后统一生成,也可以分开在游戏进行过程中动态生成。这步产生工厂+创建者混合类。
房间信息保存与查询:将房间信息通过链表保存起来,方便后续需求变化来的时候修改。这步产生地图信息类。
关卡管理:再房间生成之后可能需要再生成不同的关卡,通过关卡管理类来分别管理。
随机房间生成系统可以分为:房间层次类、工厂+创建者混合类、生成过程类、地图信息类、关卡管理类。
简易类图表达: