From dd49dd8c6d27a9a24f00d439716b09c702ecc7e4 Mon Sep 17 00:00:00 2001 From: kjs Date: Thu, 13 Aug 2026 18:12:05 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A7=88=EC=9D=84=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EB=B2=84=ED=8A=BC=20(=ED=9A=8C=EA=B4=80=20?= =?UTF-8?q?=ED=8C=A8=EB=84=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - engine.reset(): 세이브 삭제 + 새 게임 상태로 즉시 전환 (튜토리얼부터) - 회관 패널 하단에 확인 창 포함 초기화 버튼 - 콘솔에서 localStorage만 지우면 5초 자동 저장이 되살리는 문제의 정식 해법 Co-Authored-By: Claude Fable 5 --- src/components/game/Game.tsx | 23 ++++++++++++++++++++++- src/lib/game/engine.ts | 7 +++++++ 2 files changed, 29 insertions(+), 1 deletion(-) 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) {