# 29. 플레이어 공격 시 적 방어도 적용 수정 (Fix Player Attack vs Enemy Armor)

## 1. 배경 (Background)

사용자는 "플레이어의 공격 계산 시 enemy의 armor가 반영되지 않고 있다"고 보고했습니다.
코드 확인 결과, `playerAction` 메서드에서 플레이어가 공격할 때 `_applyDamage`를 직접 호출하여 적의 방어도를 무시하고 체력에 직접 데미지를 주고 있습니다. 반면, 적의 턴(`_enemyTurn`)에서는 플레이어의 방어도를 계산하는 로직이 존재합니다.

## 2. 목표 (Objective)

- `playerAction` 메서드 내 공격 로직을 수정하여, **적의 방어도(Armor)**를 먼저 차감하고 남은 데미지만 체력에 적용하도록 합니다.
- 방어도 차감 시 로그를 출력하여 플레이어가 방어 효과를 인지할 수 있도록 합니다.

## 3. 작업 상세 (Implementation Details)

### A. 로직 수정 (`lib/providers/battle_provider.dart`)

- `playerAction` 메서드의 `ActionType.attack` 처리 부분 수정:

  ```dart
  // 기존: _applyDamage(enemy, damage, ...);

  // 수정:
  int damageToHp = 0;
  if (enemy.armor > 0) {
    if (enemy.armor >= damage) {
      enemy.armor -= damage;
      damageToHp = 0;
      _addLog("Enemy's armor absorbed all $damage damage.");
    } else {
      damageToHp = damage - enemy.armor;
      _addLog("Enemy's armor absorbed ${enemy.armor} damage.");
      enemy.armor = 0;
    }
  } else {
    damageToHp = damage;
  }

  if (damageToHp > 0) {
    _applyDamage(enemy, damageToHp, targetType: DamageTarget.enemy);
    _addLog("Player dealt $damageToHp damage to Enemy.");
  } else {
      _addLog("Player's attack was fully blocked by armor.");
  }
  ```

### B. 검증 (Verification)

- **시나리오:**
  1. 적이 방어하여 방어도를 획득(예: 10).
  2. 플레이어가 공격(예: 15 데미지).
  3. 적의 방어도가 0이 되고, 체력은 5만 감소하는지 확인.
  4. 로그에 "Enemy's armor absorbed..." 메시지가 출력되는지 확인.

## 4. 기대 효과

- 적의 방어 행동이 실제로 의미를 가지게 됨.
- 전투의 전략적 깊이 증가 (방어도가 높은 적에게는 관통 공격이나 다른 전략 필요).
