Alas模块化架构:深入解析各功能模块的设计与实现

Alas模块化架构:深入解析各功能模块的设计与实现

【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 【免费下载链接】AzurLaneAutoScript 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript

本文深入解析了Alas自动化系统的模块化架构,重点介绍了任务、战斗、委托等核心功能模块的设计理念、实现机制和协作关系。Alas采用分层模块化设计,每个模块遵循单一职责原则,具有清晰的边界和明确的接口,使系统具备良好的可维护性、可扩展性和可测试性。文章详细分析了各模块的核心类结构、执行流程以及模块间的协作机制,并探讨了高级功能特性和性能优化策略。

核心模块结构:任务、战斗、委托等

Alas的模块化架构是其强大功能的核心基础,通过精心设计的模块分工,实现了对碧蓝航线游戏各种玩法的全面自动化。本文将深入解析任务、战斗、委托等核心模块的设计理念、实现机制和协作关系。

模块化架构设计理念

Alas采用分层模块化设计,每个功能模块都遵循单一职责原则,具有清晰的边界和明确的接口。这种设计使得系统具有良好的可维护性、可扩展性和可测试性。

mermaid

任务模块:智能任务管理

任务模块负责处理游戏中的各种任务场景,包括主线图、活动图、共斗活动等。该模块采用动态加载机制,能够根据配置自动选择和执行不同的任务地图。

核心类结构
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):
        """任务执行主循环"""
        # 完整的任务执行流程控制
任务执行流程

任务模块的执行流程体现了高度的智能化设计:

  1. 地图加载阶段:根据配置动态加载对应的地图模块
  2. 条件检查阶段:验证油量、心情、次数等限制条件
  3. 导航阶段:自动进入指定章节和模式
  4. 战斗阶段:调用战斗模块执行战斗
  5. 战后处理:处理掉落物、经验获取等

mermaid

战斗模块:精细化战斗控制

战斗模块负责处理战斗相关的所有操作,从战斗准备到战斗执行,再到战后处理,实现了全流程的自动化控制。

模块组成
子模块功能描述核心类/方法
combat.py基础战斗处理处理战斗状态、物品获取、经验信息
combat_auto.py自动战斗实现自动战斗逻辑
combat_manual.py手动战斗支持手动战斗模式
emotion.py心情管理控制舰娘心情状态
submarine.py潜艇作战专门处理潜艇战斗
hp_balancer.pyHP平衡血量管理和平衡
战斗状态机

战斗模块采用状态机模式管理战斗流程:

# 战斗状态处理示例
def handle_battle_status(self, drop=None):
    """处理战斗状态变化"""
    # 监控战斗中的各种状态转换
    # 包括战斗开始、战斗结束、胜利、失败等
    
def handle_get_items(self, drop=None):
    """处理物品获取"""
    # 自动识别和收集战斗掉落物品
    
def handle_exp_info(self):
    """处理经验信息"""
    # 监控经验获取和等级提升

委托模块:智能委托管理

委托模块实现了委托任务的自动化管理,包括委托检测、筛选、执行和收获的全流程。

委托处理流程

mermaid

核心功能实现

委托模块的核心在于智能的委托筛选算法:

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的各模块之间通过清晰的接口进行协作,主要协作方式包括:

  1. 配置共享:通过统一的Config对象共享配置信息
  2. 方法调用:模块间直接调用对方提供的公共方法
  3. 事件通知:通过通知机制传递状态变化
  4. 数据传递:使用统一的数据结构进行信息交换
协作示例
# 任务模块调用战斗模块执行战斗
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在模块设计中采用了多种性能优化策略:

  1. 图像处理优化:使用高效的图像识别算法,减少处理时间
  2. 缓存机制:对频繁访问的数据进行缓存,减少重复计算
  3. 懒加载:仅在需要时加载资源,降低内存占用
  4. 并行处理:在可能的情况下使用并行执行提高效率

扩展性与维护性

模块化架构为Alas带来了良好的扩展性和维护性:

  1. 新功能添加:通过新增模块即可扩展功能,不影响现有系统
  2. bug修复:问题隔离在特定模块内,便于定位和修复
  3. 自定义开发:开发者可以基于现有模块接口进行二次开发
  4. 配置灵活:通过配置文件即可调整模块行为,无需修改代码

这种精心设计的模块化架构使得Alas能够高效、稳定地运行,同时为未来的功能扩展奠定了坚实的基础。每个模块都像精密仪器中的一个齿轮,各司其职又协同工作,共同构成了这个强大的碧蓝航线自动化系统。

大世界模块:Operation Siren全自动实现

Alas的大世界模块(Operation Siren,简称OpSi)是整个项目中最复杂且功能最全面的模块之一。它实现了碧蓝航线大型作战模式的完全自动化,从日常任务到月度重置,从港口商店到深渊海域,覆盖了大世界玩法的方方面面。

模块架构设计

大世界模块采用分层架构设计,核心类OperationSiren继承自OSMap,形成了完整的继承链:

mermaid

核心功能实现

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()处理大世界月度重置,这是最复杂的逻辑之一:

mermaid

重置过程中的配置重写机制:

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,
)

性能优化策略

大世界模块采用了多种性能优化技术:

  1. 智能路径规划:使用SelectedGrids进行最优路径计算
  2. 图像识别优化:减少不必要的截图和识别操作
  3. 内存管理:及时清理不再需要的资源
  4. 并发控制:合理控制任务执行频率

实际应用效果

在实际使用中,大世界模块能够实现:

  • 自动完成所有日常和周常任务
  • 智能购买港口商店物资
  • 月度重置时的全自动开荒
  • 深渊海域和塞壬要塞的自动攻略
  • 指挥喵系统的自动化管理

通过精密的算法设计和完善的异常处理,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()

【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 【免费下载链接】AzurLaneAutoScript 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值