game/prompt/02_item_system_request.md

2.9 KiB

Role

You are a Senior Flutter Developer. You are continuing the development of "Colosseum's Choice". The basic battle prototype is already working. Now, you need to implement the Item & Progression System.

Goal

Modify the existing code to implement the following features:

  1. Item Model: Create items that boost stats (ATK, MaxHP).
  2. Inventory System: Player can equip items, and stats are calculated dynamically (Base + Item Bonus).
  3. Battle Loop:
    • Victory: When Enemy HP <= 0, show a dialog to choose 1 of 3 random items.
    • Progression: After picking an item, the next battle starts immediately with a slightly stronger enemy.
    • HP Rule: Player HP is NOT fully restored between battles (Roguelike element).

Required Changes & Implementation Details

Please generate the updated code for the following files. IMPORTANT: Preserve the existing "Risk vs Return" and "Armor Decay" logic.


1. lib/models/item.dart (New File)

Description:

  • Fields: String name, String description, int atkBonus, int hpBonus.
  • Constructor: Standard constructor.

2. lib/models/character.dart (Modify)

Description: Update to support equipment.

  • New Fields: List<Item> equipment.
  • Stat Logic:
    • int get totalAtk: Returns baseAtk + sum of all equipped items' atkBonus.
    • int get totalMaxHp: Returns baseMaxHp + sum of all equipped items' hpBonus.
    • Important: Use totalAtk and totalMaxHp for battle logic instead of raw fields.
  • Methods:
    • void equip(Item item): Add to equipment. If hpBonus > 0, increase current hp by that amount as well (optional heal).

3. lib/providers/battle_provider.dart (Modify)

Description: Handle Victory and Stage Progression.

  • New Properties:
    • int stage: Tracks current stage number (starts at 1).
    • List<Item> rewardOptions: Stores the 3 random items generated upon victory.
    • bool showRewardPopup: Flag to trigger UI dialog.
  • Methods:
    • initializeBattle(): Reset Player (Stage 1).
    • _onVictory() (Internal): Called when Enemy dies. Generate 3 random items (e.g., "Rusty Sword (+2 ATK)", "Leather Vest (+10 HP)"). Set showRewardPopup = true.
    • selectReward(Item item): Equip item to player -> Increase Stage -> Spawn stronger Enemy (Scale Enemy stats by Stage) -> Reset showRewardPopup.
    • Update playerAction: Ensure it uses player.totalAtk for damage calculation.

4. lib/screens/battle_screen.dart (Modify)

Description: Add UI for stats and rewards.

  • Top Area: Display Stage: X. Update HP bars to show current / totalMaxHp.
  • Victory Handling:
    • Use Consumer to listen to battleProvider.
    • If provider.showRewardPopup is true, show a SimpleDialog (or similar) listing the rewardOptions.
    • Clicking an option calls provider.selectReward(item).

Output Format

Please provide the complete code for the modified/new files.