diff --git a/src/components/game/Game.tsx b/src/components/game/Game.tsx index 4a9ab66..5d56b23 100644 --- a/src/components/game/Game.tsx +++ b/src/components/game/Game.tsx @@ -375,6 +375,16 @@ export default function Game() { state={state} onUpgrade={() => run(() => engine.upgradeHall())} highlightUpgrade={tutTarget === "hall-upgrade"} + onReset={() => { + if ( + window.confirm( + "정말 마을을 초기화할까요? 고양이·건물·자원이 모두 사라지고 처음부터 시작합니다.", + ) + ) { + dispatch(() => engine.reset()); + setPanel(null); + } + }} /> )} @@ -528,10 +538,12 @@ function HallPanel({ state, onUpgrade, highlightUpgrade, + onReset, }: { state: GameState; onUpgrade: () => void; highlightUpgrade?: boolean; + onReset: () => void; }) { const next = HALL_LEVELS[state.hall.level + 1]; return ( @@ -601,8 +613,17 @@ function HallPanel({ )} ) : ( -

회관이 최고 레벨입니다.

+

회관이 최고 레벨입니다.

)} + +
+ +
); } diff --git a/src/lib/game/engine.ts b/src/lib/game/engine.ts index d8395dc..fcb80af 100644 --- a/src/lib/game/engine.ts +++ b/src/lib/game/engine.ts @@ -310,6 +310,13 @@ export const engine = { state.tutorialStep = step; }, + /** 마을 완전 초기화 (새 게임 + 튜토리얼부터) */ + reset() { + localStorage.removeItem(SAVE_KEY); + state = createInitialState(); + offlineMinutes = null; + }, + tick(dt: number) { if (!state) return; for (const building of state.buildings) {