# 43. 상점 시스템 구현 (Shop System Implementation) ## 목표 (Objective) 플레이어가 획득한 골드를 소비하여 장비를 구매하고 전력을 강화할 수 있는 상점 시스템을 구현합니다. 상점은 랜덤하게 생성된 아이템을 제공하며, 리롤(새로고침) 기능을 통해 전략적인 아이템 파밍을 지원합니다. ## 구현 내용 (Implementation Details) ### 1. 데이터 및 로직 (`BattleProvider`) - **`_generateShopItems()`:** 현재 스테이지 티어에 맞는 랜덤 아이템 4개를 생성하는 로직 분리. - **`rerollShopItems()`:** 50골드를 지불하고 상점 아이템 목록을 새로고침하는 기능. - **수정 사항:** `StageModel`의 `shopItems` 필드가 `final`이므로, 리스트 자체를 재할당하는 대신 기존 리스트의 내용을 `clear()` 후 새로운 아이템으로 `addAll()`하는 방식으로 변경하여 런타임 에러를 방지했습니다. - **`buyItem(Item item)`:** 골드를 차감하고 아이템을 인벤토리에 추가하며, 상점 목록에서 해당 아이템을 제거하는 기능. ### 2. UI (`ShopUI` in `stage_ui.dart`) - **헤더:** 'Merchant' 타이틀과 현재 보유 골드 표시 (황금색 강조). - **아이템 목록 (GridView):** - 2열 카드 형태의 그리드 레이아웃. - 희귀도(Rarity)에 따른 이름 색상 및 테두리 적용. - 아이템 아이콘, 이름, 주요 스탯 요약 표시. - **가격 버튼:** 보유 골드에 따라 활성/비활성화. 클릭 시 구매 확인 팝업 출력. - **하단 버튼:** - **Reroll (50 G):** 목록 새로고침 버튼 (골드 부족 시 비활성화). - **Leave Shop:** 상점을 떠나 다음 스테이지로 이동. ### 3. 테스트 및 복구 (Test & Restoration) - **임시 테스트 설정 (완료):** - 초기 골드 200G로 시작. - 첫 스테이지를 강제로 상점(Shop)으로 설정. - **정상 설정으로 복구 완료:** - 초기 골드 **50G**로 시작. - 상점은 **매 5번째 스테이지**마다 등장하도록 복구.