import React, { useEffect, useState } from "react"; export default function HiraganaSearchTrumpApp() { const groups = { あ: ["あ", "い", "う", "え", "お"], か: ["か", "き", "く", "け", "こ"], さ: ["さ", "し", "す", "せ", "そ"], た: ["た", "ち", "つ", "て", "と"], な: ["な", "に", "ぬ", "ね", "の"], は: ["は", "ひ", "ふ", "へ", "ほ"], ま: ["ま", "み", "む", "め", "も"], や: ["や", "ゆ", "よ"], ら: ["ら", "り", "る", "れ", "ろ"], わ: ["わ", "を", "ん"], }; const allCards = Object.values(groups).flat(); const [cards, setCards] = useState(allCards); const [score, setScore] = useState(0); const [message, setMessage] = useState("スタートを押してね!"); const [target, setTarget] = useState(""); const [time, setTime] = useState(30); const [playing, setPlaying] = useState(false); useEffect(() => { let timer; if (playing && time > 0) { timer = setInterval(() => { setTime((prev) => prev - 1); }, 1000); } if (time === 0) { setPlaying(false); setMessage("ゲーム終了!"); } return () => clearInterval(timer); }, [playing, time]); const shuffleCards = () => { const shuffled = [...allCards].sort(() => Math.random() - 0.5); setCards(shuffled); }; const startGame = () => { shuffleCards(); setScore(0); setTime(30); setPlaying(true); const keys = Object.keys(groups); const randomTarget = keys[Math.floor(Math.random() * keys.length)]; setTarget(randomTarget); setMessage(`「${randomTarget}」のなかまをさがそう!`); }; const nextTarget = () => { const keys = Object.keys(groups); const randomTarget = keys[Math.floor(Math.random() * keys.length)]; setTarget(randomTarget); setMessage(`「${randomTarget}」のなかまをさがそう!`); }; const handleCardClick = (card) => { if (!playing) return; if (groups[target].includes(card)) { setScore((prev) => prev + 1); setMessage("せいかい!✨"); setCards((prev) => prev.filter((c, index) => { const firstIndex = prev.indexOf(card); return index !== firstIndex; })); setTimeout(() => { nextTarget(); }, 700); } else { setMessage("ちがうよ!もういちど!"); } }; return (

ひらがなさがしトランプ

おだい

{target || "?"}

スコア:{score}

のこり:{time}秒

{message}

{cards.map((card, index) => ( ))}

ルール

); }