"use client"; import Link from "next/link"; import { FormEvent, useEffect, useState } from "react"; import KatexRenderer from "@/components/math/KatexRenderer"; import { useGameStore } from "@/store/gameStore"; function parseAnswer(value: string) { if (value.trim() === "") return null; const parsed = Number.parseInt(value, 10); return Number.isNaN(parsed) ? null : parsed; } export default function PlayClient() { const session = useGameStore((state) => state.session); const initSession = useGameStore((state) => state.initSession); const submitAnswer = useGameStore((state) => state.submitAnswer); const nextProblem = useGameStore((state) => state.nextProblem); const resetSession = useGameStore((state) => state.resetSession); const [answerA, setAnswerA] = useState(""); const [answerB, setAnswerB] = useState(""); const [inputError, setInputError] = useState(""); const currentProblem = session?.problems[session.currentIndex] ?? null; const currentResult = session?.results[session.currentIndex] ?? null; const isComplete = Boolean( session && session.currentIndex >= session.problems.length, ); const correctCount = session?.results.filter((result) => result?.correct).length ?? 0; const totalCount = session?.problems.length ?? 0; useEffect(() => { if (session === null) { initSession(); } }, [initSession, session]); useEffect(() => { setAnswerA(""); setAnswerB(""); setInputError(""); }, [currentProblem?.key]); function handleSubmit(event: FormEvent) { event.preventDefault(); if (currentResult || !currentProblem) return; const parsedA = parseAnswer(answerA); const parsedB = parseAnswer(answerB); if (parsedA === null || parsedB === null) { setInputError("두 칸 모두 정수로 입력하세요."); return; } setInputError(""); submitAnswer({ a: parsedA, b: parsedB }); } if (!session) { return (

문제를 준비하고 있습니다.

); } if (isComplete) { return (

괄호 음수 분배

풀이 결과

{correctCount} / {totalCount} 정답

처음으로
); } if (!currentProblem) { return (

현재 문제를 불러올 수 없습니다.

); } const submitted = currentResult !== null; const isLastProblem = session.currentIndex === session.problems.length - 1; return (

괄호 음수 분배

문제 풀이

{session.currentIndex + 1} / {session.problems.length}

괄호를 풀어 두 항을 순서대로 입력하세요.

{inputError ? (

{inputError}

) : null}
처음으로
{currentResult ? (

{currentResult.correct ? "정답입니다." : "오답입니다."}

) : null}
); }