feat(settings/options/2048): save board state to local storage

This commit is contained in:
2026-01-29 21:10:27 +01:00
parent d7fc045302
commit 24d9121b2b

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
// TODO: store state in local storage
import { useLocalStorage } from "@vueuse/core";
const store = useSettingsStore();
const confirmationModal = useConfirmationModal();
@@ -54,10 +54,18 @@ const BOARD_X = 64;
const BOARD_Y = 32;
const BOARD_SIZE = 4;
const board = Array.from({ length: BOARD_SIZE }, () =>
const emptyBoard = () =>
Array.from({ length: BOARD_SIZE }, () =>
Array.from({ length: BOARD_SIZE }, () => 0),
);
const savedBoard = useLocalStorage("nds-2048-board", emptyBoard());
const board = savedBoard.value.map((r) => [...r]);
const saveBoard = () => {
savedBoard.value = board.map((r) => [...r]);
};
onRender((ctx) => {
assets.images.home.topScreen.background.draw(ctx, 0, 0);
@@ -182,6 +190,7 @@ const resetBoard = () => {
spawnTile();
spawnTile();
saveBoard();
};
const isDead = () => {
@@ -198,7 +207,9 @@ const isDead = () => {
return true;
};
if (board.every((r) => r.every((c) => c === 0))) {
resetBoard();
}
const slide = (rowDir: number, colDir: number) => {
const before = board.map((r) => [...r]);
@@ -211,6 +222,7 @@ const slide = (rowDir: number, colDir: number) => {
if (!moved) return;
spawnTile();
saveBoard();
if (isDead()) {
confirmationModal.open({
text: "Game Over!\nRestart?",