DEV.md 15 KB

宠物模块开发计划

1. 当前状态分析

宠物模块已经完成了基础框架的搭建,包括:

  • 数据库表结构设计和SQL文件生成
  • 基础模型类定义
  • 枚举类定义(PetGrade、PetStatus)
  • 事件类定义(PetBattleEvent、PetLevelUpEvent、PetRemouldEvent、PetSkillUsedEvent、PetStatusChangedEvent)
  • 部分监听器实现(ItemChangedListener、LoginSuccessListener)
  • 后台管理控制器实现
  • 仓库类基础结构

目前模块处于初始阶段,核心业务逻辑尚未实现,包括服务层、逻辑层、验证器等。

2. 开发目标

完成宠物模块的核心功能实现,包括:

  1. 宠物基础功能:创建、升级、喂养、洗髓
  2. 宠物技能系统:技能解锁、使用、冷却
  3. 与其他模块的集成:物品系统、农场系统、任务系统

注:宠物战斗系统和争霸赛系统暂不开发

3. 开发计划

3.1 第一阶段:核心服务和逻辑实现(当前)

3.1.1 服务层实现

  • PetService:对外提供宠物相关服务
    • 获取用户宠物列表
    • 创建宠物
    • 宠物升级
    • 宠物喂养
    • 宠物洗髓
    • 宠物技能使用
    • 宠物状态管理

3.1.2 逻辑层实现

  • PetLogic:内部宠物逻辑处理
    • 宠物创建逻辑
    • 宠物升级逻辑
    • 宠物经验计算
    • 宠物体力恢复
    • 宠物状态变更
    • 宠物技能逻辑
    • 宠物洗髓逻辑

3.1.3 验证器实现

  • [x] PetCreateValidator:宠物创建验证

    • 宠物名称验证
    • 宠物数量限制验证
  • [x] PetLevelUpValidator:宠物升级验证

    • 宠物状态验证
    • 宠物经验验证
  • [x] PetFeedValidator:宠物喂养验证

    • 宠物状态验证
    • 物品类型验证
  • [x] PetRemouldValidator:宠物洗髓验证

    • 宠物状态验证
    • 洗髓道具验证
  • [x] PetSkillUseValidator:宠物技能使用验证

    • 技能使用条件验证
    • 技能冷却验证
  • [x] PetStatusChangeValidator:宠物状态变更验证

    • 状态变更规则验证
  • [x] PetFoodValidator:宠物口粮验证

    • 根据物品属性判断是否为宠物口粮

3.2 第二阶段:事件系统完善

3.2.1 事件系统实现

  • [x] 对内监听器:监听其他模块的事件

    • ItemChangedListener:监听物品变更事件,处理宠物口粮和洗髓道具
    • LoginSuccessListener:监听登录成功事件,处理宠物体力恢复等
  • [x] 对外事件:提供给其他模块监听的事件

    • PetStatusChangedEvent:宠物状态变更事件
    • PetLevelUpEvent:宠物升级事件
    • PetRemouldEvent:宠物洗髓事件
    • PetSkillUsedEvent:宠物技能使用事件

3.2.2 事件注册

  • 在PetServiceProvider中注册模块间通信的事件和监听器

3.3 第三阶段:宠物技能系统完善

  • 技能效果实现:实现各种宠物技能效果
  • 技能解锁机制:完善技能解锁条件和机制
  • 技能冷却管理:优化技能冷却时间管理
  • 技能使用记录:完善技能使用记录和统计

3.4 第四阶段:与其他模块集成

  • 与物品模块集成:狗粮、洗髓道具等物品处理
  • 与农场模块集成:宠物技能对农场的影响
  • 与任务模块集成:宠物相关任务

3.5 第五阶段:测试和优化

  • 单元测试编写
  • 性能优化
  • 代码重构和优化

4. 当前任务

4.1 优先实现的功能

  1. 宠物技能系统:完善宠物技能功能

    • 技能效果实现
    • 技能解锁机制
    • 技能冷却管理
    • 技能使用记录
  2. 与农场模块集成:实现宠物技能对农场的影响

    • 自动收菜技能
    • 自动播种技能
    • 灾害防护技能
  3. 与物品模块集成:完善物品使用效果

    • 宠物口粮使用效果
    • 洗髓道具使用效果
    • 技能道具使用效果

4.2 具体实现步骤

  1. 完善PetLogic类中的技能效果实现
  2. 实现与农场模块的接口调用
  3. 完善ItemChangedListener,处理更多物品类型
  4. 优化宠物状态管理和事件处理
  5. 添加更多宠物技能类型和效果

5. 开发进度跟踪

功能模块 状态 开始日期 完成日期 备注
数据库设计 已完成 - - 包括10个数据表
模型定义 已完成 - - 包括10个模型类
枚举定义 已完成 - - PetGrade、PetStatus
事件定义 已完成 - - 5个事件类
监听器 已完成 - - 已实现5个监听器
后台控制器 已完成 - - 10个控制器
仓库类 已完成 - - 10个仓库类
服务层 已完成 - - 已实现PetService
逻辑层 已完成 - - 已实现PetLogic
验证器 已完成 - - 已实现7个验证器
技能系统 部分完成 - - 已实现基础功能
与其他模块集成 部分完成 - - 已实现物品变更监听

6. 下一步工作计划

  1. 完善宠物技能系统

    • 实现更多技能效果
    • 优化技能解锁机制
    • 完善技能冷却管理
  2. 加强与农场模块的集成

    • 实现自动收菜技能
    • 实现自动播种技能
    • 实现灾害防护技能
  3. 完善与物品模块的集成

    • 增加更多宠物口粮类型
    • 增加更多洗髓道具效果
    • 增加技能道具系统
  4. 优化宠物状态管理

    • 完善状态变更逻辑
    • 增加状态效果系统
    • 优化状态变更事件处理

7. 注意事项

  1. 所有模型类中需要保持无业务逻辑,业务逻辑应放在逻辑层
  2. 服务层类中的所有方法应该是静态方法,对外提供服务
  3. 服务层不负责事务管理,调用方需要自行开启和管理事务
  4. 验证器类应单独实现,不应在模型中进行验证
  5. 事件用于模块间通信,模块内部不应使用事件机制
  6. 宠物模块与物品模块的集成应通过监听物品变更事件实现
  7. 宠物口粮验证应根据物品的pet_power/pet_exp属性判断

8. 宠物模块与其他模块的交互

8.1 与物品模块的交互

  • 监听物品变更事件:处理宠物口粮、洗髓道具等物品的变更
  • 调用物品服务:消耗宠物口粮、洗髓道具等物品

8.2 与农场模块的交互

  • 提供宠物技能服务:供农场模块调用宠物技能
  • 监听农场事件:响应农场中的特定事件(如灾害发生)

8.3 与任务模块的交互

  • 提供宠物状态查询服务:供任务模块检查宠物相关任务条件
  • 触发任务完成事件:当宠物达成特定条件时

9. 宠物技能系统详细设计

9.1 技能类型

  1. 自动收菜:消耗50点体力,冷却2小时,自动收获成熟作物
  2. 自动播种:消耗50点体力,冷却4小时,自动补种空闲土地
  3. 灾害防护:消耗30点体力,冷却6小时,防止指定类型自然灾害

9.2 技能解锁条件

  • 自动收菜:宠物等级≥5
  • 自动播种:宠物等级≥10
  • 灾害防护:宠物等级≥15

9.3 技能效果实现

  • 自动收菜:调用农场模块的收获接口
  • 自动播种:调用农场模块的播种接口
  • 灾害防护:设置农场模块的灾害防护标志

10. 宠物争霸赛系统详细设计

10.1 赛季管理

  • 赛季创建、开始、结束
  • 奖池设置
  • Boss战力设置

10.2 队伍管理

  • 队伍创建、解散
  • 成员加入、退出
  • 队伍战力计算

10.3 战斗系统

  • Boss战斗机制
  • 伤害计算
  • 战斗结果记录

10.4 奖励分配

  • 首胜奖励模式
  • 伤害占比奖励模式
  • 奖励发放机制

11. 宠物喂养系统详细设计

11.1 喂养机制

  • 普通狗粮:提供基础经验值
  • 优质狗粮:提供双倍经验值
  • 特殊狗粮:提供额外属性加成

11.2 喂养效果

  • 经验获取:根据狗粮类型和品质获得不同经验值
  • 体力恢复:部分狗粮可以恢复宠物体力
  • 状态变更:喂养过程中宠物状态变为FEEDING

11.3 喂养限制

  • 冷却时间:每次喂养后有短暂冷却时间
  • 每日上限:每日喂养次数有上限
  • 体力消耗:喂养过程消耗少量体力

12. 宠物洗髓系统详细设计

12.1 洗髓机制

  • 消耗资源:钻石或特定道具
  • 概率计算:根据配置的品阶概率进行随机
  • 品阶变更:可能提升或降低品阶

12.2 洗髓效果

  • 属性重置:根据新品阶重新计算属性加成
  • 技能影响:部分技能可能受品阶影响
  • 外观变化:不同品阶可能有不同外观

12.3 洗髓记录

  • 记录保存:每次洗髓结果记录到pet_remould_logs表
  • 历史查询:玩家可查看历史洗髓记录

13. 宠物战斗系统详细设计

13.1 战斗类型

  • 偷菜战斗:宠物参与偷取其他玩家农场作物的战斗
  • 守护战斗:宠物守护自己农场的战斗
  • 争霸赛战斗:宠物参与争霸赛的战斗

13.2 战力计算

  • 基础战力:根据宠物等级和品阶计算
  • 属性加成:根据宠物数值属性计算加成
  • 品阶加成:不同品阶有不同战力加成系数
  • 装备加成:特殊装备可提供额外战力

13.3 战斗结果计算

  • 偷菜战斗:根据攻守双方战力差计算成功率
  • 守护战斗:根据守护宠物战力计算防御成功率
  • 争霸赛战斗:根据队伍总战力与Boss战力对比计算伤害

13.4 战斗奖励

  • 偷菜战斗:获得作物、经验值
  • 守护战斗:获得守护奖励、经验值
  • 争霸赛战斗:根据伤害排名获得奖池奖励

14. 宠物模块实现计划

14.1 第一周:基础功能实现

日期 计划任务 负责人
第1天 实现PetService基础方法 -
第2天 实现PetLogic基础逻辑 -
第3天 实现PetValidator验证器 -
第4天 实现PetFoodValidator验证器 -
第5天 完善事件监听器 -

14.2 第二周:技能系统实现

日期 计划任务 负责人
第1天 实现PetSkillLogic基础逻辑 -
第2天 实现技能解锁机制 -
第3天 实现技能冷却管理 -
第4天 实现技能效果 -
第5天 与农场模块集成 -

14.3 第三周:战斗系统实现

日期 计划任务 负责人
第1天 实现PetBattleLogic基础逻辑 -
第2天 实现战力计算 -
第3天 实现战斗结果计算 -
第4天 实现战斗奖励发放 -
第5天 完善战斗记录 -

14.4 第四周:争霸赛系统实现

日期 计划任务 负责人
第1天 实现赛季管理 -
第2天 实现队伍管理 -
第3天 实现Boss战斗机制 -
第4天 实现奖励分配 -
第5天 系统测试与优化 -

15. 接口设计

15.1 服务层接口

// PetService.php
class PetService
{
    // 获取用户宠物列表
    public static function getUserPets(int $userId): array;

    // 创建宠物
    public static function createPet(int $userId, string $name): array;

    // 宠物升级
    public static function levelUpPet(int $userId, int $petId): array;

    // 宠物喂养
    public static function feedPet(int $userId, int $petId, int $itemId, int $amount = 1): array;

    // 宠物洗髓
    public static function remouldPet(int $userId, int $petId, int $itemId = 0): array;

    // 使用宠物技能
    public static function useSkill(int $userId, int $petId, int $skillId, array $params = []): array;

    // 获取宠物状态
    public static function getPetStatus(int $userId, int $petId): array;

    // 更新宠物状态
    public static function updatePetStatus(int $userId, int $petId, int $status, string $reason = ''): bool;
}

// PetBattleService.php
class PetBattleService
{
    // 获取战斗记录
    public static function getBattleLogs(int $userId, int $petId, int $page = 1, int $pageSize = 20): array;

    // 发起战斗
    public static function startBattle(int $userId, int $petId, int $battleType, int $targetId = 0): array;

    // 获取战斗结果
    public static function getBattleResult(int $battleId): array;

    // 获取当前赛季信息
    public static function getCurrentSeason(): array;

    // 创建/加入队伍
    public static function joinTeam(int $userId, int $petId, int $teamId = 0, string $teamName = ''): array;

    // 退出队伍
    public static function leaveTeam(int $userId, int $petId): bool;

    // 获取队伍信息
    public static function getTeamInfo(int $teamId): array;
}

15.2 逻辑层接口

// PetLogic.php
class PetLogic
{
    // 创建宠物
    public static function createPet(int $userId, string $name): array;

    // 宠物升级
    public static function levelUpPet(int $petId): array;

    // 计算宠物经验
    public static function calculateExp(int $petId, int $expGain): array;

    // 恢复宠物体力
    public static function recoverStamina(int $petId, int $minutes): int;

    // 变更宠物状态
    public static function changeStatus(int $petId, int $status, string $reason = ''): bool;
}

// PetSkillLogic.php
class PetSkillLogic
{
    // 检查技能是否解锁
    public static function checkSkillUnlocked(int $petId, int $skillId): bool;

    // 管理技能冷却
    public static function manageSkillCooldown(int $petId, int $skillId): array;

    // 执行技能效果
    public static function executeSkillEffect(int $petId, int $skillId, array $params = []): array;
}

16. 数据结构示例

16.1 宠物数据结构

{
  "id": 1,
  "user_id": 1001,
  "name": "小松狮",
  "grade": "THIRD",
  "level": 15,
  "experience": 2500,
  "stamina": 85,
  "status": 1,
  "created_at": "2023-05-01 10:00:00",
  "updated_at": "2023-05-05 15:30:00"
}

16.2 技能数据结构

{
  "id": 1,
  "skill_name": "自动收菜",
  "stamina_cost": 50,
  "cool_down": 7200,
  "effect_desc": "自动收获成熟作物",
  "min_level": 5,
  "created_at": "2023-05-01 10:00:00",
  "updated_at": "2023-05-01 10:00:00"
}

16.3 战斗记录数据结构

{
  "id": 1,
  "pet_id": 1,
  "battle_type": 1,
  "opponent_id": 2,
  "result": 1,
  "reward": {
    "exp": 100,
    "items": [
      {"id": 1001, "amount": 2},
      {"id": 1002, "amount": 1}
    ]
  },
  "battle_time": "2023-05-05 14:30:00",
  "created_at": "2023-05-05 14:30:00"
}