working on useGame

This commit is contained in:
2025-10-15 17:29:53 +01:00
commit 8acc16fc1c
37 changed files with 3320 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
import { useState, useCallback } from "react";
import { sudoku } from "../lib/Sudoku";
import type { UseCursorType } from "./useCursor";
export function useBoardState(cursorManager: UseCursorType) {
const { cursor, setCursor } = cursorManager;
const [board, setBoard] = useState<string>(sudoku.generate("medium"));
const [initialBoard, setInitialBoard] = useState<string>(board);
const [solution, setSolution] = useState<string | null>(null);
const setDigit = useCallback(
(d: string) => {
const i = cursor.r * 9 + cursor.c;
const arr = board.split("");
arr[i] = d;
setBoard(arr.join(""));
},
[cursor, board]
);
const erase = useCallback(() => {
const i = cursor.r * 9 + cursor.c;
const arr = board.split("");
arr[i] = ".";
setBoard(arr.join(""));
}, [cursor, board]);
const reset = useCallback(() => {
const newBoard = sudoku.generate("medium");
setBoard(newBoard);
setInitialBoard(newBoard);
setSolution(null);
setCursor({ r: 0, c: 0 });
}, [setCursor]);
const solveBoard = useCallback(() => {
const solved = sudoku.solve(board);
if (solved) {
setSolution(solved);
setBoard(solved);
}
}, [board]);
return {
board,
initialBoard,
solution,
setDigit,
erase,
reset,
solveBoard,
};
}
export type UseBoardStateType = ReturnType<typeof useBoardState>;