Skip to content

Commit 34c4ca1

Browse files
committed
feat: display an explanation
1 parent 8b9cdcc commit 34c4ca1

File tree

1 file changed

+53
-12
lines changed

1 file changed

+53
-12
lines changed

src/components/openEHRQuest.tsx

+53-12
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,18 @@ import {
1717
TooltipTrigger,
1818
} from '@/components/ui/tooltip';
1919
import HealthBar from '@/components/HealthBar';
20-
import useSoundEffects from '@/hooks/useSoundEffects.ts';
20+
import useSoundEffects from '@/hooks/useSoundEffects';
2121
import ConfettiCelebration from '@/components/ConfettiCelebration';
22-
import { levels as levelsData } from '@/lib/levels.ts';
22+
import { levels as levelsData } from '@/lib/levels';
2323

2424
interface GameState {
2525
currentLevel: number;
2626
score: number;
2727
playerHealth: number;
2828
badges: string[];
2929
hintUsed: boolean;
30+
answerSelected: boolean;
31+
isCorrect: boolean;
3032
}
3133

3234
const OpenEHRQuest: React.FC = () => {
@@ -36,6 +38,8 @@ const OpenEHRQuest: React.FC = () => {
3638
playerHealth: 100,
3739
badges: [],
3840
hintUsed: false,
41+
answerSelected: false,
42+
isCorrect: false,
3943
});
4044
const [soundEnabled, setSoundEnabled] = useState(true);
4145
const { playCorrectSound, playWrongSound, playCompletionSound } =
@@ -60,28 +64,41 @@ const OpenEHRQuest: React.FC = () => {
6064

6165
const handleAnswer = (selectedIndex: number) => {
6266
const currentLevel = levels[gameState.currentLevel];
63-
if (selectedIndex === currentLevel.correctAnswer) {
67+
const isCorrect = selectedIndex === currentLevel.correctAnswer;
68+
69+
if (isCorrect) {
6470
if (soundEnabled) playCorrectSound();
6571
setGameState((prevState) => ({
6672
...prevState,
6773
score: prevState.score + (prevState.hintUsed ? 50 : 100),
68-
currentLevel: prevState.currentLevel + 1,
69-
hintUsed: false,
70-
badges: [
71-
...prevState.badges,
72-
`Level ${prevState.currentLevel + 1} Master`,
73-
],
74+
answerSelected: true,
75+
isCorrect: true,
7476
}));
7577
} else {
7678
if (soundEnabled) playWrongSound();
7779
setGameState((prevState) => ({
7880
...prevState,
7981
playerHealth: Math.max(0, prevState.playerHealth - 20),
80-
hintUsed: false,
82+
answerSelected: true,
83+
isCorrect: false,
8184
}));
8285
}
8386
};
8487

88+
const nextLevel = () => {
89+
setGameState((prevState) => ({
90+
...prevState,
91+
currentLevel: prevState.currentLevel + 1,
92+
hintUsed: false,
93+
answerSelected: false,
94+
isCorrect: false,
95+
badges: [
96+
...prevState.badges,
97+
`Level ${prevState.currentLevel + 1} Master`,
98+
],
99+
}));
100+
};
101+
85102
const useHint = () => {
86103
setGameState((prevState) => ({ ...prevState, hintUsed: true }));
87104
};
@@ -93,6 +110,8 @@ const OpenEHRQuest: React.FC = () => {
93110
playerHealth: 100,
94111
badges: [],
95112
hintUsed: false,
113+
answerSelected: false,
114+
isCorrect: false,
96115
});
97116
};
98117

@@ -155,6 +174,7 @@ const OpenEHRQuest: React.FC = () => {
155174
</div>
156175
);
157176
}
177+
158178
const currentLevel = levels[gameState.currentLevel];
159179

160180
return (
@@ -196,17 +216,38 @@ const OpenEHRQuest: React.FC = () => {
196216
onClick={() => handleAnswer(index)}
197217
className="w-full justify-start text-left whitespace-normal h-auto"
198218
variant="outline"
219+
disabled={gameState.answerSelected}
199220
>
200221
{option}
201222
</Button>
202223
))}
203224
</div>
225+
{gameState.answerSelected && (
226+
<Alert
227+
className={`mt-4 ${
228+
gameState.isCorrect ? 'bg-green-100' : 'bg-red-100'
229+
}`}
230+
>
231+
<AlertTitle>
232+
{gameState.isCorrect ? 'Correct!' : 'Incorrect'}
233+
</AlertTitle>
234+
<AlertDescription>{currentLevel.explanation}</AlertDescription>
235+
</Alert>
236+
)}
237+
{gameState.answerSelected && (
238+
<Button onClick={nextLevel} className="w-full mt-4">
239+
Next Level
240+
</Button>
241+
)}
204242
<div className="mt-4 space-y-4">
205243
<div className="flex justify-between items-center">
206244
<TooltipProvider>
207245
<Tooltip>
208246
<TooltipTrigger asChild>
209-
<Button onClick={useHint} disabled={gameState.hintUsed}>
247+
<Button
248+
onClick={useHint}
249+
disabled={gameState.hintUsed || gameState.answerSelected}
250+
>
210251
<Zap className="mr-2 h-4 w-4" /> Use Hint
211252
</Button>
212253
</TooltipTrigger>
@@ -227,7 +268,7 @@ const OpenEHRQuest: React.FC = () => {
227268
))}
228269
</div>
229270
</div>
230-
{gameState.hintUsed && (
271+
{gameState.hintUsed && !gameState.answerSelected && (
231272
<Alert>
232273
<AlertTitle>Hint</AlertTitle>
233274
<AlertDescription>{currentLevel.hint}</AlertDescription>

0 commit comments

Comments
 (0)