枚举定义.md 11 KB

农场模块枚举定义

1. 概述

本文档定义了农场模块中使用的所有枚举类型,包括土地类型、土地状态、种子类型、作物生长阶段和灾害类型等。这些枚举类型在模块的各个部分都有使用,是理解模块功能的重要基础。

2. 土地相关枚举

2.1 土地类型 (LAND_TYPE)

土地类型枚举定义了农场中可能的土地类型,不同类型的土地有不同的产出加成和灾害抵抗能力。

namespace App\Module\Farm\Enums;

enum LAND_TYPE: int {
    case NORMAL = 1;     // 普通土地
    case RED = 2;        // 红土地
    case BLACK = 3;      // 黑土地
    case GOLD = 4;       // 金色特殊土地
    case BLUE = 5;       // 蓝色特殊土地
    case PURPLE = 6;     // 紫色特殊土地
}

注:土地类型的属性(产量加成、灾害抵抗等)现在存储在 farm_land_types 表中,可通过后台配置修改。详细设计请参考 土地配置表设计 文档。

土地类型属性表

下表为默认配置,实际值以数据库配置为准:

土地类型 产量加成 灾害抵抗 解锁条件 升级材料
普通土地 1 0% 0% 默认 -
红土地 2 +10% +5% 任意等级 木材x10
黑土地 3 +25% +10% 任意等级 石材x10
金色特殊土地 4 +50% +15% 房屋7级+ 钢材x10+钻石x5
蓝色特殊土地 5 +40% +25% 房屋7级+ 钢材x10+钻石x5
紫色特殊土地 6 +60% +10% 房屋7级+ 钢材x10+钻石x5

2.2 土地状态 (LAND_STATUS)

土地状态枚举定义了土地可能的状态,影响土地上可以执行的操作。

namespace App\Module\Farm\Enums;

enum LAND_STATUS: int {
    case EMPTY = 0;      // 空闲
    case PLANTED = 1;    // 种植中
    case DISASTER = 2;   // 灾害
    case HARVESTABLE = 3; // 可收获
    case WITHERED = 4;   // 枯萎
}

土地状态说明

土地状态 说明 可执行操作
空闲 0 土地上没有作物 种植、升级
种植中 1 土地上有正在生长的作物 使用化肥、查看
灾害 2 土地上的作物遭遇灾害 处理灾害、查看
可收获 3 土地上的作物已成熟,可以收获 收获、查看
枯萎 4 土地上的作物已枯萎 铲除、查看

3. 种子与作物相关枚举

3.1 种子类型 (SEED_TYPE)

种子类型枚举定义了农场中可能的种子类型,不同类型的种子有不同的特性。

namespace App\Module\Farm\Enums;

enum SEED_TYPE: int {
    case NORMAL = 1;     // 普通种子
    case MYSTERY = 2;    // 神秘种子
    case GIANT = 3;      // 巨化种子
}

种子类型说明

种子类型 说明 特性
普通种子 1 常规种子,有固定的生长周期和产量 产量正常
神秘种子 2 特殊种子类型,具有独特的属性和产出配置 特殊产出配置
巨化种子 3 普通种子的强化版本 产量是普通种子的1.5倍

3.2 作物生长阶段 (CROP_GROWTH_STAGE)

作物生长阶段枚举定义了作物从种植到收获的各个阶段。

namespace App\Module\Farm\Enums;

enum CROP_GROWTH_STAGE: int {
    case SEED = 1;       // 种子期
    case SPROUT = 2;     // 发芽期
    case GROWING = 3;    // 生长期
    case MATURE = 4;     // 成熟期
    case WITHERED = 5;   // 枯萎期
}

生长阶段说明

生长阶段 持续时间 可用化肥 灾害概率 状态转换
种子期 1 种子配置 自动进入发芽期
发芽期 2 种子配置 自动进入生长期
生长期 3 种子配置 自动进入成熟期
成熟期 4 24小时 超时进入枯萎期
枯萎期 5 永久 需手动铲除

4. 灾害相关枚举

4.1 灾害类型 (DISASTER_TYPE)

灾害类型枚举定义了可能影响作物生长的灾害类型。

namespace App\Module\Farm\Enums;

enum DISASTER_TYPE: int {
    case DROUGHT = 1;    // 干旱
    case PEST = 2;       // 虫害
    case WEED = 3;       // 杂草
}

灾害类型说明

灾害类型 减产比例 处理道具 处理效果
干旱 1 5% 洒水壶 完全消除
虫害 2 5% 杀虫剂 完全消除
杂草 3 5% 除草剂 完全消除

5. 其他枚举

5.1 升级类型 (UPGRADE_TYPE)

升级类型枚举定义了农场中可能的升级类型,用于记录升级日志。

namespace App\Module\Farm\Enums;

enum UPGRADE_TYPE: int {
    case LAND = 1;       // 土地升级
    case HOUSE = 2;      // 房屋升级
}

5.2 化肥类型 (FERTILIZER_TYPE)

化肥类型枚举定义了可用的化肥类型,不同类型的化肥有不同的加速效果。

namespace App\Module\Farm\Enums;

enum FERTILIZER_TYPE: int {
    case NORMAL = 1;     // 普通化肥
    case ADVANCED = 2;   // 高级化肥
}

5.3 神灵加持类型 (GOD_BUFF_TYPE)

神灵加持类型枚举定义了可用的神灵加持类型,不同类型的加持提供不同的游戏优势。

namespace App\Module\Farm\Enums;

enum GOD_BUFF_TYPE: int {
    case HARVEST = 1;    // 丰收之神
    case RAIN = 2;       // 雨露之神
    case WEED = 3;       // 屠草之神
    case PEST = 4;       // 拭虫之神
}

神灵加持类型说明

加持类型 效果描述 应用场景
丰收之神 1 确保收获时获得最高产量 收获作物时直接使用种子的最大产量值
雨露之神 2 防止干旱灾害 生成灾害时不会生成干旱类型的灾害
屠草之神 3 防止杂草灾害 生成灾害时不会生成杂草类型的灾害
拭虫之神 4 防止虫害灾害 生成灾害时不会生成虫害类型的灾害

化肥类型说明

化肥类型 加速效果 物品ID
普通化肥 1 减少当前阶段1小时生长时间 2001
高级化肥 2 减少当前阶段3小时生长时间 2002

6. 枚举使用示例

6.1 土地类型判断

// 判断土地是否为特殊土地(旧版本,硬编码)
public function isSpecialLandType_old(int $landType): bool
{
    return in_array($landType, [
        LAND_TYPE::GOLD,
        LAND_TYPE::BLUE,
        LAND_TYPE::PURPLE
    ]);
}

// 判断土地是否为特殊土地(新版本,使用数据库配置)
public function isSpecialLandType(int $landType): bool
{
    // 从数据库中获取土地类型配置
    $landTypeConfig = $this->landTypeRepository->find($landType);

    if (!$landTypeConfig) {
        return false;
    }

    return (bool)$landTypeConfig->is_special;
}

6.2 土地状态更新

// 更新土地状态
public function updateLandStatus(int $landId, int $status): bool
{
    // 验证状态有效性
    if (!in_array($status, [
        LAND_STATUS::EMPTY,
        LAND_STATUS::PLANTED,
        LAND_STATUS::DISASTER,
        LAND_STATUS::HARVESTABLE,
        LAND_STATUS::WITHERED
    ])) {
        throw new InvalidStatusException("无效的土地状态");
    }

    // 更新土地状态
    return $this->landRepository->update($landId, [
        'status' => $status
    ]);
}

6.3 作物生长阶段更新

// 更新作物生长阶段
public function updateCropGrowthStage(FarmCrop $crop, int $newStage): bool
{
    // 验证生长阶段有效性
    if (!in_array($newStage, [
        CROP_GROWTH_STAGE::SEED,
        CROP_GROWTH_STAGE::SPROUT,
        CROP_GROWTH_STAGE::GROWING,
        CROP_GROWTH_STAGE::MATURE,
        CROP_GROWTH_STAGE::WITHERED
    ])) {
        throw new InvalidGrowthStageException("无效的生长阶段");
    }

    // 计算阶段结束时间
    $stageEndTime = $this->calculateStageEndTime($crop, $newStage);

    // 更新作物生长阶段
    return $this->cropRepository->update($crop->id, [
        'growth_stage' => $newStage,
        'stage_end_time' => $stageEndTime
    ]);
}

6.4 灾害处理

// 处理灾害
public function handleDisaster(int $cropId, int $disasterType, int $toolId): bool
{
    // 验证灾害类型有效性
    if (!in_array($disasterType, [
        DISASTER_TYPE::DROUGHT,
        DISASTER_TYPE::PEST,
        DISASTER_TYPE::WEED
    ])) {
        throw new InvalidDisasterTypeException("无效的灾害类型");
    }

    // 验证工具与灾害类型匹配
    if (!$this->isToolMatchDisaster($toolId, $disasterType)) {
        throw new InvalidToolException("该工具不能处理此类灾害");
    }

    // 处理灾害
    // ...

    return true;
}

7. 枚举扩展指南

如需添加新的枚举值,请按照以下步骤操作:

  1. 在对应的枚举类中添加新的枚举值
  2. 更新相关的业务逻辑,处理新的枚举值
  3. 更新前端展示逻辑,显示新的枚举值
  4. 更新文档,说明新的枚举值的含义和用法

例如,添加新的土地类型:

// 在LAND_TYPE枚举中添加新的土地类型
enum LAND_TYPE: int {
    case NORMAL = 1;     // 普通土地
    case RED = 2;        // 红土地
    case BLACK = 3;      // 黑土地
    case GOLD = 4;       // 金色特殊土地
    case BLUE = 5;       // 蓝色特殊土地
    case PURPLE = 6;     // 紫色特殊土地
    case DIAMOND = 7;    // 钻石土地(新增)
}

然后更新相关的业务逻辑:

// 在LandLogic中添加新土地类型的产出加成计算
public function calculateOutputBonus(FarmLand $land): float
{
    switch ($land->land_type) {
        case LAND_TYPE::NORMAL:
            return 0.0;
        case LAND_TYPE::RED:
            return 0.1;
        case LAND_TYPE::BLACK:
            return 0.25;
        case LAND_TYPE::GOLD:
            return 0.5;
        case LAND_TYPE::BLUE:
            return 0.4;
        case LAND_TYPE::PURPLE:
            return 0.6;
        case LAND_TYPE::DIAMOND:  // 新增
            return 0.8;
        default:
            return 0.0;
    }
}

8. 总结

本文档定义了农场模块中使用的所有枚举类型,包括土地类型、土地状态、种子类型、作物生长阶段和灾害类型等。这些枚举类型是模块功能的重要基础,理解这些枚举类型有助于理解模块的整体功能和业务逻辑。

在开发过程中,应该严格按照枚举定义使用这些类型,避免使用魔法数字,以提高代码的可读性和可维护性。如需添加新的枚举值,请按照枚举扩展指南进行操作,确保相关的业务逻辑和文档都得到更新。