import React from "react"; export default function KanjiMonsterBattleGame() { const stages = { 1: [ { kanji: "森林", answer: "しんりん" }, { kanji: "海岸", answer: "かいがん" }, { kanji: "勇気", answer: "ゆうき" }, ], 2: [ { kanji: "努力", answer: "どりょく" }, { kanji: "観察", answer: "かんさつ" }, { kanji: "環境", answer: "かんきょう" }, ], 3: [ { kanji: "複雑", answer: "ふくざつ" }, { kanji: "演説", answer: "えんぜつ" }, { kanji: "責任", answer: "せきにん" }, ], }; const [level, setLevel] = React.useState(1); const [monsterHp, setMonsterHp] = React.useState(100); const [playerHp, setPlayerHp] = React.useState(100); const [exp, setExp] = React.useState(0); const [index, setIndex] = React.useState(0); const [input, setInput] = React.useState(""); const [message, setMessage] = React.useState("漢字を読んでモンスターを倒そう!"); const [gameOver, setGameOver] = React.useState(false); const [clear, setClear] = React.useState(false); const currentQuestion = stages[level][index]; const attackMonster = () => { if (gameOver || clear) return; if (input === currentQuestion.answer) { const newMonsterHp = monsterHp - 35; setMonsterHp(newMonsterHp); setMessage("こうげき成功!モンスターにダメージ!"); if (newMonsterHp <= 0) { const gainedExp = exp + 50; setExp(gainedExp); if (index + 1 < stages[level].length) { setIndex(index + 1); setMonsterHp(100); setMessage("モンスターを倒した!次の敵が現れた!"); } else { setClear(true); setMessage("ステージクリア!EXP をゲット!"); } } } else { const newPlayerHp = playerHp - 25; setPlayerHp(newPlayerHp); setMessage("まちがい!ダメージを受けた!"); if (newPlayerHp <= 0) { setGameOver(true); setMessage("ゲームオーバー…"); } } setInput(""); }; const resetGame = () => { setMonsterHp(100); setPlayerHp(100); setExp(0); setIndex(0); setInput(""); setGameOver(false); setClear(false); setMessage("漢字を読んでモンスターを倒そう!"); }; return (
{playerHp}
{monsterHp}
EXP
{exp}
この漢字の読み方は?
{currentQuestion.kanji}
setInput(e.target.value)} placeholder="ひらがなで入力" className="w-full border-2 rounded-xl px-4 py-3 text-center text-xl" />{gameOver ? "ゲームオーバー" : "ステージクリア!"}