Alas模块化架构:深入解析各功能模块的设计与实现
本文深入解析了Alas自动化系统的模块化架构,重点介绍了任务、战斗、委托等核心功能模块的设计理念、实现机制和协作关系。Alas采用分层模块化设计,每个模块遵循单一职责原则,具有清晰的边界和明确的接口,使系统具备良好的可维护性、可扩展性和可测试性。文章详细分析了各模块的核心类结构、执行流程以及模块间的协作机制,并探讨了高级功能特性和性能优化策略。
核心模块结构:任务、战斗、委托等
Alas的模块化架构是其强大功能的核心基础,通过精心设计的模块分工,实现了对碧蓝航线游戏各种玩法的全面自动化。本文将深入解析任务、战斗、委托等核心模块的设计理念、实现机制和协作关系。
模块化架构设计理念
Alas采用分层模块化设计,每个功能模块都遵循单一职责原则,具有清晰的边界和明确的接口。这种设计使得系统具有良好的可维护性、可扩展性和可测试性。
任务模块:智能任务管理
任务模块负责处理游戏中的各种任务场景,包括主线图、活动图、共斗活动等。该模块采用动态加载机制,能够根据配置自动选择和执行不同的任务地图。
核心类结构
class TaskRun(TaskEvent):
"""任务执行主类,继承自TaskEvent"""
def load_task(self, name, folder='task_main'):
"""动态加载任务地图配置"""
# 实现地图文件的动态导入和配置合并
def triggered_stop_condition(self, oil_check=True):
"""检查停止条件,包括油量、次数、等级等限制"""
# 实现多种停止条件的智能判断
def run(self, name, folder='task_main', mode='normal', total=0):
"""任务执行主循环"""
# 完整的任务执行流程控制
任务执行流程
任务模块的执行流程体现了高度的智能化设计:
- 地图加载阶段:根据配置动态加载对应的地图模块
- 条件检查阶段:验证油量、心情、次数等限制条件
- 导航阶段:自动进入指定章节和模式
- 战斗阶段:调用战斗模块执行战斗
- 战后处理:处理掉落物、经验获取等
战斗模块:精细化战斗控制
战斗模块负责处理战斗相关的所有操作,从战斗准备到战斗执行,再到战后处理,实现了全流程的自动化控制。
模块组成
| 子模块 | 功能描述 | 核心类/方法 |
|---|---|---|
| combat.py | 基础战斗处理 | 处理战斗状态、物品获取、经验信息 |
| combat_auto.py | 自动战斗 | 实现自动战斗逻辑 |
| combat_manual.py | 手动战斗 | 支持手动战斗模式 |
| emotion.py | 心情管理 | 控制舰娘心情状态 |
| submarine.py | 潜艇作战 | 专门处理潜艇战斗 |
| hp_balancer.py | HP平衡 | 血量管理和平衡 |
战斗状态机
战斗模块采用状态机模式管理战斗流程:
# 战斗状态处理示例
def handle_battle_status(self, drop=None):
"""处理战斗状态变化"""
# 监控战斗中的各种状态转换
# 包括战斗开始、战斗结束、胜利、失败等
def handle_get_items(self, drop=None):
"""处理物品获取"""
# 自动识别和收集战斗掉落物品
def handle_exp_info(self):
"""处理经验信息"""
# 监控经验获取和等级提升
委托模块:智能委托管理
委托模块实现了委托任务的自动化管理,包括委托检测、筛选、执行和收获的全流程。
委托处理流程
核心功能实现
委托模块的核心在于智能的委托筛选算法:
def _commission_choose(self, daily, urgent):
"""智能选择委托算法"""
# 1. 统计当前运行中的委托数量
running_count = int(np.sum([1 for c in total if c.status == 'running']))
# 2. 加载过滤策略(预设或自定义)
preset = self.config.Commission_PresetFilter
if preset == 'custom':
string = self.config.Commission_CustomFilter
else:
string = DICT_FILTER_PRESET[preset]
# 3. 应用过滤规则
COMMISSION_FILTER.load(string)
run = COMMISSION_FILTER.apply(total.grids, func=self._commission_check)
# 4. 智能补充分配
if no_shortest.count + running_count < self.max_commission:
# 添加最短时间的日常委托
COMMISSION_FILTER.load(SHORTEST_FILTER)
shortest = COMMISSION_FILTER.apply(daily[::-1], func=self._commission_check)
委托数据结构
委托模块使用专门的数据结构来管理委托信息:
class Commission:
"""委托数据类"""
def __init__(self, image, y, config):
# 从图像中解析委托信息
self.name = self.commission_name_parse(string)
self.time = self.parse_time(string)
self.status = self._get_status() # pending/running/finished
def convert_to_night(self):
"""将委托转换为夜间版本"""
# 处理夜间委托的特殊逻辑
def finish_time(self):
"""计算委托完成时间"""
# 用于调度器的时间管理
模块间协作机制
Alas的各模块之间通过清晰的接口进行协作,主要协作方式包括:
- 配置共享:通过统一的Config对象共享配置信息
- 方法调用:模块间直接调用对方提供的公共方法
- 事件通知:通过通知机制传递状态变化
- 数据传递:使用统一的数据结构进行信息交换
协作示例
# 任务模块调用战斗模块执行战斗
def execute_a_battle(self):
"""执行一场战斗"""
# 准备战斗
self.combat_preparation()
# 调用战斗模块执行战斗
result = self.combat.execute()
# 处理战斗结果
self.handle_battle_result(result)
高级功能特性
1. 无缝收菜机制
委托模块与调度器深度集成,实现了真正意义上的无缝收菜:
def commission_receive(self, skip_first_screenshot=True):
"""委托收获实现"""
# 计算委托完成时间
finish_time = commission.finish_time()
# 设置调度器在完成时间后立即执行收获
self.config.task_delay(second=finish_time.total_seconds())
# 自动收获并开始新的委托
2. 心情智能控制
Emotion模块与任务模块协作,实现心情值的智能管理:
def handle_combat_low_emotion(self):
"""处理低心情状态"""
# 计算心情回复时间
recover_time = self.emotion.calculate_recover_time()
# 在心情回复期间穿插执行其他任务
if recover_time > timedelta(minutes=10):
self.config.task_call('Commission') # 执行委托任务
self.config.task_delay(second=recover_time.total_seconds())
3. 油量资源管理
多个模块协同工作,实现油量资源的智能分配:
def triggered_stop_condition(self, oil_check=True):
"""油量限制检查"""
oil = self.get_oil()
if oil < max(500, self.config.StopCondition_OilLimit):
logger.hr('Triggered stop condition: Oil limit')
# 延迟任务并优先执行无油消耗的任务
self.config.task_delay(minute=(120, 240))
self.config.task_call('Commission') # 委托不耗油
return True
性能优化策略
Alas在模块设计中采用了多种性能优化策略:
- 图像处理优化:使用高效的图像识别算法,减少处理时间
- 缓存机制:对频繁访问的数据进行缓存,减少重复计算
- 懒加载:仅在需要时加载资源,降低内存占用
- 并行处理:在可能的情况下使用并行执行提高效率
扩展性与维护性
模块化架构为Alas带来了良好的扩展性和维护性:
- 新功能添加:通过新增模块即可扩展功能,不影响现有系统
- bug修复:问题隔离在特定模块内,便于定位和修复
- 自定义开发:开发者可以基于现有模块接口进行二次开发
- 配置灵活:通过配置文件即可调整模块行为,无需修改代码
这种精心设计的模块化架构使得Alas能够高效、稳定地运行,同时为未来的功能扩展奠定了坚实的基础。每个模块都像精密仪器中的一个齿轮,各司其职又协同工作,共同构成了这个强大的碧蓝航线自动化系统。
大世界模块:Operation Siren全自动实现
Alas的大世界模块(Operation Siren,简称OpSi)是整个项目中最复杂且功能最全面的模块之一。它实现了碧蓝航线大型作战模式的完全自动化,从日常任务到月度重置,从港口商店到深渊海域,覆盖了大世界玩法的方方面面。
模块架构设计
大世界模块采用分层架构设计,核心类OperationSiren继承自OSMap,形成了完整的继承链:
核心功能实现
1. 日常任务自动化
os_daily()方法是日常任务的核心调度器,它按照以下流程执行:
def os_daily(self):
# 使用调谐样本
if self.config.OpsiDaily_UseTuningSample:
self.tuning_sample_use()
while True:
# 接收日常任务
success = self.os_mission_overview_accept()
self.zone_init()
# 完成任务
self.os_finish_daily_mission()
if self.is_in_opsi_explore():
self.os_port_mission()
break
if success:
break
self.config.task_delay(server_update=True)
2. 港口任务系统
港口任务通过os_port_mission()实现,系统会遍历所有主要港口:
def os_port_mission(self):
logger.hr('OS port mission', level=1)
ports = ['NY City', 'Dakar', 'Taranto', 'Gibraltar',
'Brest', 'Liverpool', 'Kiel', 'St. Petersburg']
for port in ports:
port = self.name_to_zone(port)
logger.hr(f'OS port daily in {port}', level=2)
self.globe_goto(port)
self.run_auto_search()
self.handle_after_auto_search()
3. 商店购买逻辑
商店系统实现了智能购买和延迟计算:
def os_shop(self):
logger.hr('OS port daily', level=1)
if not self.zone.is_azur_port:
self.globe_goto(self.zone_nearest_azur_port(self.zone))
self.port_enter()
self.port_shop_enter()
if self.appear(OS_SHOP_CHECK):
not_empty = self.handle_port_supply_buy()
next_reset = self._os_shop_delay(not_empty)
logger.info('OS port daily finished, delay to next reset')
else:
next_reset = get_os_next_reset()
logger.warning('There is no shop in the port, skip to the next month.')
self.config.task_delay(target=next_reset)
self.config.task_stop()
高级功能实现
1. 月度重置处理
os_cross_month()处理大世界月度重置,这是最复杂的逻辑之一:
重置过程中的配置重写机制:
self.config.override(
OpsiGeneral_DoRandomMapEvent=False,
HOMO_EDGE_DETECT=False,
STORY_OPTION=0,
OpsiGeneral_UseLogger=True,
# Obscure
OpsiObscure_ForceRun=True,
OpsiFleet_Fleet=self.config.cross_get('OpsiObscure.OpsiFleet.Fleet'),
OpsiFleet_Submarine=False,
)
2. 海域清理系统
大世界模块支持多种海域的自动清理:
| 海域类型 | 对应方法 | 功能描述 |
|---|---|---|
| 深渊海域 | os_abyssal() | 清理深渊boss |
| 隐秘海域 | os_obscure() | 清理隐秘节点 |
| 塞壬要塞 | os_stronghold() | 攻破要塞防御 |
| 档案海域 | os_archive() | 完成档案任务 |
3. 自适应舰队管理
舰队选择和管理采用智能算法:
def run_stronghold_one_fleet(self, fleet):
"""使用单舰队攻略要塞"""
self.fleet_set(fleet)
self.os_order_execute(
recon_scan=False,
submarine_call=self.config.OpsiFleet_Submarine)
self.boss_clear(has_fleet_step=True)
技术亮点
1. 时间调度系统
大世界模块实现了精确的时间调度:
def _os_shop_delay(self, not_empty) -> datetime:
"""计算商店重置时间"""
if not_empty:
return get_server_next_update(self.config.Scheduler_ServerUpdate)
else:
remain = get_os_reset_remain()
next_reset = get_os_next_reset()
if remain == 0:
return get_server_next_update(self.config.Scheduler_ServerUpdate)
elif remain < 7:
return next_reset - timedelta(days=1)
else:
return (get_server_next_update(self.config.Scheduler_ServerUpdate) +
timedelta(days=6))
2. 异常处理机制
模块内置了完善的异常处理:
try:
self.globe_goto(zone)
self.run_auto_search()
except (GameStuckError, ScriptError) as e:
logger.warning(f'Failed to complete mission in {zone}: {e}')
self.map_exit()
continue
3. 资源配置管理
通过配置重写机制实现不同场景的优化:
self.config.override(
OpsiGeneral_DoRandomMapEvent=True,
HOMO_EDGE_DETECT=True,
STORY_OPTION=-2,
OpsiMeowfficerFarming_ActionPointPreserve=0,
OpsiMeowfficerFarming_HazardLevel=3,
)
性能优化策略
大世界模块采用了多种性能优化技术:
- 智能路径规划:使用
SelectedGrids进行最优路径计算 - 图像识别优化:减少不必要的截图和识别操作
- 内存管理:及时清理不再需要的资源
- 并发控制:合理控制任务执行频率
实际应用效果
在实际使用中,大世界模块能够实现:
- 自动完成所有日常和周常任务
- 智能购买港口商店物资
- 月度重置时的全自动开荒
- 深渊海域和塞壬要塞的自动攻略
- 指挥喵系统的自动化管理
通过精密的算法设计和完善的异常处理,Alas的大世界模块为用户提供了真正意义上的"set and forget"体验,让玩家从繁琐的大世界日常中彻底解放出来。
装备与舰队管理模块的技术细节
Alas的装备与舰队管理模块是整个自动化系统的核心组件之一,负责处理舰船装备的穿戴、卸下以及舰队配置的自动化操作。该模块采用了高度模块化的设计,通过多个子模块协同工作,实现了对碧蓝航线游戏中复杂装备系统的精确控制。
模块架构设计
装备管理模块采用分层架构设计,主要包含三个核心类:
classDiagram
class Equipment {
+_ship_view_swipe(distance, check_button)
+ship_view_next()
+ship_view_prev()
+ship_info_enter()
+_ship_side_navbar
+ship_side_navbar_ensure()
+ship_equipment_take_off()
+fleet_equipment_take_off()
+ship_equipment_take_on_preset()
+fleet_equipment_take_on_preset()
}
class EquipmentChange {
+equipping_set()
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



