screeps
2019-09-25 17:19:55 0 举报
游戏 screeps 的设计思路
作者其他创作
大纲/内容
Yes
upgrader升级者
不工作
访问内存中矿工 - 矿注册表尝试绑定
mount.js检查挂载是否失效,若失效则统一检查
存放
生成 creep
havester采集者
生成矿工并注册
身体以 CARRY 和 MOVE 组件为主,仅包含最基本的 WORK 组件
距离太远
正常
主入口
转变为 upgrader
transfer会保存自己的当前工作目标,并每tick检查自己的任务是否完成,一旦完成就去执行下一个任务
结束
检查矿工 - 矿注册表
查找房间
每个房间调用一次
建筑者builder
数量控制器
检查当前存在的数量是否足够
volumescreeps-mongo-db存储卷
调用雷达
挖矿
房间2
containerscreeps-redisredis 服务器
配置文件
雷达
建造
转变为 维修者repairer
挂载
调用
查找最近的存放点优先级:容器 > 拓展 > 出生点
调用房间初始化模块
距离过远则执行moveTo
目标是否已经完成
main.js
yes
矿
查找最近的存放点:优先级被标记为output的容器 > 矿
身体以 WORK 组件为主,仅包含最基本的 CARRY 和 MOVE 组件
获取下一个目标
提供creep信息及身体部件
工作
建造建筑
no
内存中是否有本房间信息
转变为 havester
循环对应房间的角色配置项
containerscreeps-mongomongo 服务器
向目标移动
存放能量
是否即将死亡
填充拓展
检查有多少个矿
container容器
获取当前目标
扫描敌人
在 Creep 原型上发现了 sayHello 方法
状态检查器
目标
任务方法
搬运能量
都注册了
采集
向生成队列推送一个任务
检查是否有结构即将损坏
运输者transfer
No
contaienrscreeps-server游戏服务器
异常
调用工作分发器
更多拓展...
循环结束
执行 sayHello()
宿主机/home/screeps 目录
自己内存中的sourceId是否存在
根据 prototype 查找到 Creep 原型
身体部分
目标1向拓展运输能量
目标2向upgrade容器运输能量
任务名
内存中读取矿ID
mount.creep.jsCreep 原型上的拓展
建立矿工 - 矿 注册表
creep 上没有找到 sayHello 方法
任务配置
检查是否有建筑工地
注销自己与矿的绑定
向目标存放能量
统一挂载
生成指定类型的creep
是否有可用 Spawn
不足
取出目标 id 进行操作
我们在 Creep.prototype 上自定义了 sayHello 方法
建立雷达扫描存储对象
填充塔
存活检查器
检查是否有空闲开采位
任务 creep
房间工作
networkscreeps-net服务网络
矿工 Run
方法参数
目标3向防御塔运输能量
检查下一个角色
depends_on
操作方法
transfer运输者
提供配置项
出生点
volumescreeps-redis-db存储卷
...
资源
存在未注册矿
获取能量
维修建筑
矿工和 矿ID 绑定,并注册在内存里。矿工快死的时候将自动注销绑定,数量控制系统在发现矿工死亡后将检查矿ID的绑定表,重新生成矿工,矿工复活后会主动进行绑定
找到资源 id 进行操作
调用数量控制器
mount.room.jsRoom原型上的拓展
执行 creep.sayHello() 方法
房间控制器
房间1
升级
获取下一个目标
检查其他creep角色数量是否足够
房间初始化模块
取出
收藏
收藏
0 条评论
下一页
为你推荐
查看更多
抱歉,暂无相关内容