문제 수 선택 기능 추가 - 5문제 / 10문제

This commit is contained in:
2026-05-26 15:23:21 +09:00
parent 44e4d46c6c
commit 2779bf1b0e
5 changed files with 124 additions and 22 deletions
+16 -6
View File
@@ -16,17 +16,21 @@ export interface GameSession {
results: (GradeResult | null)[];
}
export type ProblemCount = 5 | 10;
interface GameState {
session: GameSession | null;
initSession: (count?: number) => void;
selectedProblemCount: ProblemCount;
setProblemCount: (count: ProblemCount) => void;
initSession: (count?: ProblemCount) => void;
submitAnswer: (answer: UserAnswer) => void;
nextProblem: () => void;
resetSession: () => void;
}
const DEFAULT_SESSION_COUNT = 10;
const DEFAULT_SESSION_COUNT: ProblemCount = 10;
function createSession(count = DEFAULT_SESSION_COUNT): GameSession {
function createSession(count: ProblemCount = DEFAULT_SESSION_COUNT): GameSession {
const problems = generateSession(count);
return {
@@ -38,8 +42,14 @@ function createSession(count = DEFAULT_SESSION_COUNT): GameSession {
export const useGameStore = create<GameState>((set, get) => ({
session: null,
initSession: (count = DEFAULT_SESSION_COUNT) => {
set({ session: createSession(count) });
selectedProblemCount: DEFAULT_SESSION_COUNT,
setProblemCount: (count) => {
set({ selectedProblemCount: count });
},
initSession: (count) => {
const selectedProblemCount = count ?? get().selectedProblemCount;
set({ session: createSession(selectedProblemCount) });
},
submitAnswer: (answer) => {
const { session } = get();
@@ -73,6 +83,6 @@ export const useGameStore = create<GameState>((set, get) => ({
});
},
resetSession: () => {
set({ session: createSession() });
set({ session: createSession(get().selectedProblemCount) });
},
}));