type
Post
status
Published
date
Jul 8, 2023
slug
screeps_creeps_factory
summary
Screeps[GCL1,RCL3]时对于工种工厂 使用抽象工厂模式 的自研方案
tags
设计模式
游戏
效率
category
技术分享
icon
password
截止到2023-7-8本人在GCL1,RCL3的阶段,代码还在建设ing,思考有限

背景

在Screeps中,可以自定义自己的兵种,兵种可由自己定义
但是兵种的生产代码由Spawn(基地)的spawnCreep 方法来进行兵种创建
这样会使得兵种的生产与Spawn的调用关系强耦合
在代码调用关系上无法以较低的代码成本进行兵种的动态扩张

需求

  1. 只需要新增一个新兵种的信息,就可以使得兵种支持生产
  1. 后续只需要修改这个兵种信息,即可改变兵种属性
  1. 后续允许多个Spawn类调用

设计

将兵种工厂由抽象工厂模式进行设计
由于兵种信息固定单一,便可将兵种信息抽象为CreepsRoleMeta 的 抽象类
之后通过自己编写的兵种信息去继承这个CreepsRoleMeta类即可
最后在CreepsFactory类中,通过
  1. CreepsRoleMeta类读取兵种信息
  1. StructureSpawn类进行兵种生产的方法调用

抽象工厂模式

notion image
通过将StructureSpawn作为参数传递给CreepsFactory,做到后续支持多Spawn
之后将CreepsRoleMeta组合到creepsFactory中
使其可以调用通过CreepsRoleMeta继承下去的各个子类,进行兵种生产

结果

对于新增兵种,仅需要继承一个CreepsRoleMeta类,然后完善对应的属性即可
对于修改兵种,修改其对应的Meta信息即可
对Spawn类,在外部调用时,循环遍历Spawn,并传入方法即可
 
Screeps-工种调度方案V1自用集群搭建经历