import React, { useState, useEffect } from ‘react’;
import { Trophy, Star, Clock, CheckCircle, AlertCircle, Award, Brain, XCircle } from ‘lucide-react’;
const MathVerificationApp = () => {
const [stage, setStage] = useState(‘menu’);
const [currentLevel, setCurrentLevel] = useState(1);
const [userAnswer, setUserAnswer] = useState(”);
const [verifyAnswer, setVerifyAnswer] = useState(”);
const [selectedTrap, setSelectedTrap] = useState(null);
const [timeSpent, setTimeSpent] = useState(0);
const [minTimeReached, setMinTimeReached] = useState(false);
const [score, setScore] = useState(0);
const [slowBadges, setSlowBadges] = useState(0);
const [attempts, setAttempts] = useState(0);
const [showHint, setShowHint] = useState(false);
const questions = [
{
id: 1,
question: “一个水池,用甲管单独注满需要4小时,用乙管单独注满需要6小时。现在两管同时注水,需要多少小时注满?”,
answer: “2.4”,
verifyQuestion: “如果两管同时注水2.4小时注满,请计算:甲管每小时注入几分之几?乙管每小时注入几分之几?两管合计每小时注入几分之几?”,
verifyAnswer: “1/4+1/6=5/12”,
verifyDetail: “2.4小时=12/5小时,5/12×12/5=1”,
type: “工程问题”,
traps: [
{ text: “甲管和乙管速度相加:4+6=10小时”, correct: false, reason: “错误:不能直接相加时间,应该相加工作效率” },
{ text: “取平均值:(4+6)/2=5小时”, correct: false, reason: “错误:工程问题不能简单取平均” },
{ text: “计算效率:1/4+1/6=5/12,时间=1÷5/12=2.4小时”, correct: true, reason: “正确:先算每小时完成的工作量,再求总时间” },
{ text: “用较快的管子时间减去较慢的:6-4=2小时”, correct: false, reason: “错误:逻辑混乱,两管同时工作不是做减法” }
],
hints: [“工程问题关键是计算工作效率”, “总工作量可以看作1”, “多个人或管子同时工作,效率相加”]
},
{
id: 2,
question: “一件商品打八折后售价240元,这件商品的原价是多少元?”,
answer: “300”,
verifyQuestion: “如果原价是300元,请验证:打八折后的价格是否为240元。写出计算过程。”,
verifyAnswer: “300×0.8=240”,
verifyDetail: “或者 300×(1-0.2)=240”,
type: “折扣问题”,
traps: [
{ text: “240÷0.8=300元”, correct: true, reason: “正确:现价除以折扣率等于原价” },
{ text: “240×0.8=192元”, correct: false, reason: “错误:这是把现价又打了一次折,而不是求原价” },
{ text: “240+240×0.2=288元”, correct: false, reason: “错误:这个算法的逻辑有问题,0.2不是原价的20%” },
{ text: “240÷0.2=1200元”, correct: false, reason: “错误:混淆了折扣率,八折是0.8不是0.2” }
],
hints: [“八折表示现价是原价的80%”, “已知现价和折扣率,求原价用除法”, “可以用方程思考:原价×0.8=240”]
},
{
id: 3,
question: “一个长方体的长是8分米,宽是5分米,高是4分米。它的表面积是多少平方分米?”,
answer: “184”,
verifyQuestion: “如果表面积是184平方分米,请列出6个面的面积计算,并验证总和。”,
verifyAnswer: “8×5×2+8×4×2+5×4×2”,
verifyDetail: “40×2+32×2+20×2=80+64+40=184”,
type: “几何计算”,
traps: [
{ text: “8×5×4=160平方分米”, correct: false, reason: “错误:这是体积公式,不是表面积” },
{ text: “(8×5+8×4+5×4)×2=184平方分米”, correct: true, reason: “正确:三个不同面的面积之和乘以2” },
{ text: “8+5+4=17分米”, correct: false, reason: “错误:把长宽高相加了,毫无意义” },
{ text: “(8+5+4)×2=34平方分米”, correct: false, reason: “错误:表面积不能这样算,混淆了周长概念” }
],
hints: [“长方体有6个面,相对的两个面面积相等”, “表面积是所有面的面积之和”, “注意单位是平方分米”]
},
{
id: 4,
question: “小华从家到学校,去时速度是每分钟60米,用了15分钟。回来时用了10分钟,回来时的速度是每分钟多少米?”,
answer: “90”,
verifyQuestion: “如果回来速度是每分钟90米,用10分钟,请计算路程。这个路程是否等于去时的路程?”,
verifyAnswer: “60×15=900”,
verifyDetail: “90×10=900,两次路程相等”,
type: “行程问题”,
traps: [
{ text: “60+15-10=65米/分钟”, correct: false, reason: “错误:速度、时间、距离不能这样混合运算” },
{ text: “60×15=900米,900÷10=90米/分钟”, correct: true, reason: “正确:先算总路程,再用路程除以时间” },
{ text: “60÷15×10=40米/分钟”, correct: false, reason: “错误:计算逻辑混乱” },
{ text: “15÷10=1.5,60×1.5=90米/分钟”, correct: true, reason: “正确:时间比例法,去时是回时的1.5倍,速度也是1.5倍” }
],
hints: [“去时和回时路程相同”, “速度=路程÷时间”, “可以先算出总路程”]
},
{
id: 5,
question: “一个三角形的面积是24平方厘米,底是6厘米,高是多少厘米?”,
answer: “8”,
verifyQuestion: “如果高是8厘米,底是6厘米,请用三角形面积公式验证面积是否为24平方厘米。”,
verifyAnswer: “6×8÷2=24”,
verifyDetail: “三角形面积=底×高÷2”,
type: “三角形面积”,
traps: [
{ text: “24÷6=4厘米”, correct: false, reason: “错误:忘记三角形面积公式中的÷2” },
{ text: “24×2÷6=8厘米”, correct: true, reason: “正确:从面积公式推导,面积×2÷底=高” },
{ text: “24÷6×2=8厘米”, correct: true, reason: “正确:先除以底,再乘以2” },
{ text: “6×24=144厘米”, correct: false, reason: “错误:计算毫无逻辑,单位也错了” }
],
hints: [“三角形面积公式:底×高÷2”, “已知面积求高,需要逆向运算”, “注意除以2这个关键步骤”]
},
{
id: 6,
question: “某数的3/5是30,这个数的2/3是多少?”,
answer: “100/3”,
acceptableAnswers: [“100/3”, “33.33”, “33又1/3”],
verifyQuestion: “如果答案是100/3(约33.33),请先求出某数是多少,再验证2/3的结果。”,
verifyAnswer: “30÷3/5=50”,
verifyDetail: “50×2/3=100/3”,
type: “分数应用”,
traps: [
{ text: “30÷3×5=50,50×2÷3=100/3”, correct: true, reason: “正确:先求某数,再求2/3” },
{ text: “30×2÷3=20”, correct: false, reason: “错误:直接用30算了,没有先求出某数” },
{ text: “30×5÷3=50”, correct: false, reason: “错误:这只是求出了某数,没有继续求2/3” },
{ text: “30×(2/3÷3/5)=30×10/9=100/3”, correct: true, reason: “正确:用比例法一步计算” }
],
hints: [“先求出某数是多少”, “某数的3/5是30,求某数用除法”, “再用某数乘以2/3″]
}
];
const currentQuestion = questions[currentLevel – 1];
useEffect(() => {
let timer;
if (stage === ‘question’ || stage === ‘answer’) {
timer = setInterval(() => {
setTimeSpent(prev => {
const newTime = prev + 1;
if (newTime >= 45) {
setMinTimeReached(true);
}
return newTime;
});
}, 1000);
}
return () => clearInterval(timer);
}, [stage]);
const handleStartLevel = () => {
setStage(‘question’);
setUserAnswer(”);
setVerifyAnswer(”);
setSelectedTrap(null);
setTimeSpent(0);
setMinTimeReached(false);
setAttempts(0);
setShowHint(false);
};
const handleSubmitAnswer = () => {
if (!minTimeReached) {
alert(‘请仔细思考,至少需要45秒沉淀时间。’);
return;
}
if (!selectedTrap) {
alert(‘请先选择一个解题思路进行分析。’);
return;
}
setStage(‘verify’);
};
const checkAnswer = (answer) => {
if (currentQuestion.acceptableAnswers) {
return currentQuestion.acceptableAnswers.some(acceptable =>
answer.trim().replace(/\s/g, ”) === acceptable.replace(/\s/g, ”)
);
}
return answer.trim() === currentQuestion.answer;
};
const handleVerifyAnswer = () => {
const isAnswerCorrect = checkAnswer(userAnswer);
const isTrapCorrect = selectedTrap?.correct === true;
const isVerifyCorrect = verifyAnswer.includes(currentQuestion.verifyAnswer.replace(/\s/g, ”));
if (isAnswerCorrect && isTrapCorrect && isVerifyCorrect) {
let points = 100;
if (timeSpent >= 90) {
points = 150;
setSlowBadges(prev => prev + 1);
}
setScore(prev => prev + points);
setStage(‘result’);
} else {
setAttempts(prev => prev + 1);
let errorMsg = ‘验证失败!’;
if (!isAnswerCorrect) errorMsg += ‘ 答案不正确。’;
if (!isTrapCorrect) errorMsg += ‘ 解题思路有误。’;
if (!isVerifyCorrect) errorMsg += ‘ 反向验证过程不完整。’;
errorMsg += ` 这是第${attempts + 1}次尝试。`;
alert(errorMsg);
if (attempts >= 2) {
setStage(‘question’);
setUserAnswer(”);
setVerifyAnswer(”);
setSelectedTrap(null);
setTimeSpent(0);
setMinTimeReached(false);
}
}
};
const handleNextLevel = () => {
if (currentLevel < questions.length) {
setCurrentLevel(prev => prev + 1);
handleStartLevel();
} else {
setStage(‘complete’);
}
};
return (
关卡进度
{currentLevel} / {questions.length}
{stage === ‘menu’ && (
反向验证闯关
培养细致思考,避开常见陷阱
每题至少思考45秒,识别错误思路,完成反向验证
)}
{stage === ‘question’ && (
{currentQuestion.type}
= 45 ? “text-green-500” : “text-orange-500”} size={20} />
= 45 ? “text-green-500” : “text-orange-500”}`}>
{timeSpent}秒
第 {currentLevel} 题
{currentQuestion.question}
{showHint && (
思考提示:
{currentQuestion.hints.map((hint, idx) => (
{hint}
))}
)}
{!showHint && timeSpent >= 20 && (
)}
{!minTimeReached && (
请再思考 {45 – timeSpent} 秒,不要着急作答
)}
)}
{stage === ‘answer’ && (
{currentQuestion.question}
setUserAnswer(e.target.value)}
className=”w-full border-2 border-gray-300 rounded-lg p-4 text-lg focus:border-blue-500 focus:outline-none”
placeholder=”在这里输入答案…”
/>
{currentQuestion.traps.map((trap, idx) => (
setSelectedTrap(trap)}
className={`border-2 rounded-lg p-4 cursor-pointer transition ${
selectedTrap === trap
? ‘border-blue-500 bg-blue-50’
: ‘border-gray-300 hover:border-gray-400’
}`}
>
{trap.text}
{selectedTrap === trap && (
已选择此项
)}
))}
{minTimeReached ? (
) : (
还需要思考 {45 – timeSpent} 秒才能提交
)}
)}
{stage === ‘verify’ && (
反向验证环节
你的答案是:
{userAnswer}
你选择的解题思路:
{selectedTrap?.text}
现在请完成反向验证:
{currentQuestion.verifyQuestion}
提示:反向验证要求你从答案倒推回题目条件,确保每一步逻辑严密。
)}
{stage === ‘result’ && (
闯关成功
本关成绩:
+{timeSpent >= 90 ? 150 : 100}分
{timeSpent >= 90 && (
获得深度思考徽章
用时{timeSpent}秒,深度思考,额外奖励50分
)}
解题分析:
正确思路:
{currentQuestion.traps.find(t => t.correct)?.text}
验证详解:
{currentQuestion.verifyDetail}
常见错误提醒:
{currentQuestion.traps.filter(t => !t.correct).map((trap, idx) => (
))}
本关数据:
用时:{timeSpent}秒
验证次数:{attempts + 1}次
)}
{stage === ‘complete’ && (
完成所有关卡
总分:{score}分
深度思考徽章 × {slowBadges}
你已经掌握的能力:
- 认真审题,识别题目类型
- 辨别常见错误思路
- 反向验证,确保逻辑严密
- 深度思考,避免粗心大意
)}
);
};
export default MathVerificationApp;