# 進化系統設計文檔

## 現有實現

### 基礎進化機制
目前系統已支援基於**時間 + 屬性條件**的進化：

```javascript
{
  stage: 'child',
  durationSeconds: 600,  // 時間條件：需要 600 秒
  conditions: {          // 屬性條件：同時滿足
    str: 20,
    int: 20
  }
}
```

### 進化條件檢查
- **時間條件**：寵物年齡 >= durationSeconds
- **屬性條件**：所有指定屬性都要達標
- **邏輯**：時間 AND 屬性 都滿足才進化

## 進化分支系統設計

### 方案 1：多分支進化（推薦）

```javascript
lifecycle: [
  { stage: 'egg', durationSeconds: 0 },
  { stage: 'baby', durationSeconds: 300 },
  {
    stage: 'child',
    durationSeconds: 600,
    conditions: { str: 20, int: 20 }
  },
  // 成年體可以有多種進化路線
  {
    stage: 'adult_warrior',  // 戰士型
    durationSeconds: 1200,
    conditions: { str: 60, dex: 40 },
    priority: 1
  },
  {
    stage: 'adult_mage',     // 法師型
    durationSeconds: 1200,
    conditions: { int: 60, str: 30 },
    priority: 2
  },
  {
    stage: 'adult_balanced', // 平衡型
    durationSeconds: 1200,
    conditions: { str: 50, int: 50, dex: 50 },
    priority: 3
  },
  {
    stage: 'adult',          // 普通成年（保底）
    durationSeconds: 1200,
    conditions: {},
    priority: 999
  }
]
```

**檢查邏輯**：
1. 時間到達後，檢查所有同階段的進化選項
2. 按 priority 從小到大檢查
3. 第一個滿足條件的就進化成該階段

### 方案 2：樹狀進化圖

```javascript
export const EVOLUTION_TREE = {
  tinyTigerCat: {
    baby: {
      next: ['child'],  // 固定進化
      conditions: { ageSeconds: 300 }
    },
    child: {
      next: ['warrior', 'mage', 'balanced', 'adult'],  // 多選一
      conditions: { ageSeconds: 600 },
      branches: {
        warrior: { str: 60, dex: 40 },
        mage: { int: 60, str: 30 },
        balanced: { str: 50, int: 50, dex: 50 },
        adult: {}  // 保底
      }
    }
  }
}
```

### 方案 3：觸發式進化

```javascript
{
  stage: 'adult_legendary',  // 傳說型
  trigger: 'special',        // 不走正常流程
  conditions: {
    str: 100,
    int: 100,
    dex: 100,
    destiny: 'lucky_star',   // 需要特定命格
    deityFavor: 100          // 神明好感滿
  }
}
```

## 建議實現

### 第一階段（基礎）
使用**方案 1**，在 `pet-species.js` 中定義多條進化路線：

```javascript
lifecycle: [
  { stage: 'baby', ... },
  { stage: 'child', ... },
  {
    stage: 'warrior',
    branch: 'combat',  // 標記分支類型
    durationSeconds: 1200,
    conditions: { str: 60, dex: 40 },
    priority: 1,
    description: '力量與速度的化身'
  },
  {
    stage: 'mage',
    branch: 'magic',
    durationSeconds: 1200,
    conditions: { int: 60 },
    priority: 2,
    description: '智慧的追求者'
  },
  {
    stage: 'adult',
    branch: 'normal',
    durationSeconds: 1200,
    conditions: {},
    priority: 999,
    description: '普通的成年體'
  }
]
```

### 第二階段（進階）
- 添加**超進化**：需要特殊道具或事件觸發
- 添加**退化機制**：照顧不當可能退化
- 添加**命格影響**：特定命格解鎖特殊進化路線

## 實現細節

### 修改 checkStageTransition()

```javascript
checkStageTransition() {
  const ageSeconds = this.state.ageSeconds
  const currentStage = this.state.stage
  
  // 找出當前階段的所有可能進化
  const candidates = this.speciesConfig.lifecycle
    .filter(stage => 
      stage.durationSeconds > 0 && 
      ageSeconds >= stage.durationSeconds &&
      stage.stage !== currentStage
    )
    .sort((a, b) => (a.priority || 999) - (b.priority || 999))
  
  // 檢查第一個滿足條件的
  for (const candidate of candidates) {
    if (this.checkEvolutionConditions(candidate)) {
      this.evolve(candidate.stage)
      break
    }
  }
}

checkEvolutionConditions(stageConfig) {
  if (!stageConfig.conditions) return true
  
  const { str, int, dex, ...others } = stageConfig.conditions
  
  if (str && this.state.str < str) return false
  if (int && this.state.int < int) return false
  if (dex && this.state.dex < dex) return false
  
  // 可擴展：檢查其他條件
  return true
}
```

## 數值平衡建議

### 進化時間規劃
- **Egg → Baby**: 5 分鐘（300秒）
- **Baby → Child**: 6 小時（21,900秒）
- **Child → Adult**: 3 天（281,100秒）

### 屬性要求
- **Baby → Child**: 
  - STR 8, INT 8
  - 設計目標：6小時內約需餵食 30-40 次，玩耍 60-70 次
- **Child → Adult**: 
  - STR 50, INT 50, DEX 50
  - 設計目標：3天內累積，需要持續照顧

### 命格影響
- **武曲星**（力量成長+30%）→ 更容易進化成戰士
- **文曲星**（智力成長+40%）→ 更容易進化成法師
- **天乙貴人**（運勢高）→ 可能觸發特殊進化
