Felix Zieger commited on
Commit
8606349
·
1 Parent(s): 8ec33d8

fix guessing bug

Browse files
src/components/GameContainer.tsx CHANGED
@@ -20,6 +20,7 @@ const normalizeWord = (word: string): string => {
20
  return word.normalize('NFD')
21
  .replace(/[\u0300-\u036f]/g, '')
22
  .toLowerCase()
 
23
  .trim();
24
  };
25
 
@@ -180,11 +181,11 @@ export const GameContainer = () => {
180
  const sentenceString = finalSentence.join(' ');
181
  const guess = await guessWord(sentenceString, language);
182
  setAiGuess(guess);
183
-
184
  // Save game result in the background
185
  saveGameResult(finalSentence, guess, guess.toLowerCase() === currentWord.toLowerCase())
186
  .catch(error => console.error('Background save failed:', error));
187
-
188
  setGameState("showing-guess");
189
  } catch (error) {
190
  console.error('Error getting AI guess:', error);
@@ -300,6 +301,7 @@ export const GameContainer = () => {
300
  sessionId={sessionId}
301
  currentTheme={currentTheme}
302
  onHighScoreDialogChange={setIsHighScoreDialogOpen}
 
303
  />
304
  )}
305
  </motion.div>
 
20
  return word.normalize('NFD')
21
  .replace(/[\u0300-\u036f]/g, '')
22
  .toLowerCase()
23
+ .replace(/[^a-z]/g, '') // just match on lowercase chars, remove everything else
24
  .trim();
25
  };
26
 
 
181
  const sentenceString = finalSentence.join(' ');
182
  const guess = await guessWord(sentenceString, language);
183
  setAiGuess(guess);
184
+
185
  // Save game result in the background
186
  saveGameResult(finalSentence, guess, guess.toLowerCase() === currentWord.toLowerCase())
187
  .catch(error => console.error('Background save failed:', error));
188
+
189
  setGameState("showing-guess");
190
  } catch (error) {
191
  console.error('Error getting AI guess:', error);
 
301
  sessionId={sessionId}
302
  currentTheme={currentTheme}
303
  onHighScoreDialogChange={setIsHighScoreDialogOpen}
304
+ normalizeWord={normalizeWord}
305
  />
306
  )}
307
  </motion.div>
src/components/game/GuessDisplay.tsx CHANGED
@@ -26,6 +26,7 @@ interface GuessDisplayProps {
26
  sessionId: string;
27
  currentTheme: string;
28
  onHighScoreDialogChange?: (isOpen: boolean) => void;
 
29
  }
30
 
31
  export const GuessDisplay = ({
@@ -40,6 +41,7 @@ export const GuessDisplay = ({
40
  sessionId,
41
  currentTheme,
42
  onHighScoreDialogChange,
 
43
  }: GuessDisplayProps) => {
44
  const [showConfirmDialog, setShowConfirmDialog] = useState(false);
45
  const [hasSubmittedScore, setHasSubmittedScore] = useState(false);
@@ -54,7 +56,7 @@ export const GuessDisplay = ({
54
  setShowConfirmDialog(show);
55
  };
56
 
57
- const isGuessCorrect = () => aiGuess.toLowerCase() === currentWord.toLowerCase();
58
 
59
  const handleScoreSubmitted = () => {
60
  setHasSubmittedScore(true);
@@ -70,17 +72,17 @@ export const GuessDisplay = ({
70
  animate={{ opacity: 1 }}
71
  className="text-center relative space-y-6"
72
  >
73
- <RoundHeader
74
- successfulRounds={currentScore}
75
  onBack={onBack}
76
  showConfirmDialog={showConfirmDialog}
77
  setShowConfirmDialog={handleSetShowConfirmDialog}
78
  />
79
 
80
  <WordDisplay currentWord={currentWord} />
81
-
82
  <GuessDescription sentence={sentence} aiGuess={aiGuess} />
83
-
84
  <GuessResult aiGuess={aiGuess} isCorrect={isGuessCorrect()} />
85
 
86
  <ActionButtons
 
26
  sessionId: string;
27
  currentTheme: string;
28
  onHighScoreDialogChange?: (isOpen: boolean) => void;
29
+ normalizeWord: (word: string) => string;
30
  }
31
 
32
  export const GuessDisplay = ({
 
41
  sessionId,
42
  currentTheme,
43
  onHighScoreDialogChange,
44
+ normalizeWord,
45
  }: GuessDisplayProps) => {
46
  const [showConfirmDialog, setShowConfirmDialog] = useState(false);
47
  const [hasSubmittedScore, setHasSubmittedScore] = useState(false);
 
56
  setShowConfirmDialog(show);
57
  };
58
 
59
+ const isGuessCorrect = () => normalizeWord(aiGuess) === normalizeWord(currentWord);
60
 
61
  const handleScoreSubmitted = () => {
62
  setHasSubmittedScore(true);
 
72
  animate={{ opacity: 1 }}
73
  className="text-center relative space-y-6"
74
  >
75
+ <RoundHeader
76
+ successfulRounds={currentScore}
77
  onBack={onBack}
78
  showConfirmDialog={showConfirmDialog}
79
  setShowConfirmDialog={handleSetShowConfirmDialog}
80
  />
81
 
82
  <WordDisplay currentWord={currentWord} />
83
+
84
  <GuessDescription sentence={sentence} aiGuess={aiGuess} />
85
+
86
  <GuessResult aiGuess={aiGuess} isCorrect={isGuessCorrect()} />
87
 
88
  <ActionButtons
src/i18n/translations/de.ts CHANGED
@@ -12,6 +12,7 @@ export const de = {
12
  aiDelayed: "Die KI ist derzeit beschäftigt. Bitte versuche es gleich noch einmal.",
13
  invalidWord: "Ungültiges Wort",
14
  cantUseTargetWord: "Verwende nicht das geheime Wort",
 
15
  lettersOnly: "Bitte nur Buchstaben verwenden",
16
  singleWordOnly: "Bitte nur ein Wort eingeben",
17
  leaveGameTitle: "Spiel verlassen?",
 
12
  aiDelayed: "Die KI ist derzeit beschäftigt. Bitte versuche es gleich noch einmal.",
13
  invalidWord: "Ungültiges Wort",
14
  cantUseTargetWord: "Verwende nicht das geheime Wort",
15
+ shorterWord: "Verwende ein kürzeres Wort",
16
  lettersOnly: "Bitte nur Buchstaben verwenden",
17
  singleWordOnly: "Bitte nur ein Wort eingeben",
18
  leaveGameTitle: "Spiel verlassen?",
src/i18n/translations/es.ts CHANGED
@@ -12,6 +12,7 @@ export const es = {
12
  aiDelayed: "La IA está ocupada en este momento. Por favor, inténtalo de nuevo en un momento.",
13
  invalidWord: "Palabra inválida",
14
  cantUseTargetWord: "No uses la palabra secreta",
 
15
  lettersOnly: "Por favor, usa solo letras",
16
  singleWordOnly: "Por favor, ingresa solo una palabra",
17
  leaveGameTitle: "¿Salir del juego?",
 
12
  aiDelayed: "La IA está ocupada en este momento. Por favor, inténtalo de nuevo en un momento.",
13
  invalidWord: "Palabra inválida",
14
  cantUseTargetWord: "No uses la palabra secreta",
15
+ shorterWord: "Usa una palabra más corta",
16
  lettersOnly: "Por favor, usa solo letras",
17
  singleWordOnly: "Por favor, ingresa solo una palabra",
18
  leaveGameTitle: "¿Salir del juego?",
src/i18n/translations/fr.ts CHANGED
@@ -11,6 +11,7 @@ export const fr = {
11
  aiDelayed: "L'IA est actuellement occupée. Veuillez réessayer dans un moment.",
12
  invalidWord: "Mot invalide",
13
  cantUseTargetWord: "N'utilisez pas le mot secret",
 
14
  lettersOnly: "Veuillez utiliser uniquement des lettres",
15
  singleWordOnly: "Veuillez entrer un seul mot",
16
  leaveGameTitle: "Quitter le jeu ?",
 
11
  aiDelayed: "L'IA est actuellement occupée. Veuillez réessayer dans un moment.",
12
  invalidWord: "Mot invalide",
13
  cantUseTargetWord: "N'utilisez pas le mot secret",
14
+ shorterWord: "Utilisez un mot plus court",
15
  lettersOnly: "Veuillez utiliser uniquement des lettres",
16
  singleWordOnly: "Veuillez entrer un seul mot",
17
  leaveGameTitle: "Quitter le jeu ?",
src/i18n/translations/it.ts CHANGED
@@ -12,6 +12,7 @@ export const it = {
12
  aiDelayed: "L'IA è attualmente occupata. Riprova tra un momento.",
13
  invalidWord: "Parola non valida",
14
  cantUseTargetWord: "Non usare la parola segreta",
 
15
  lettersOnly: "Usa solo lettere",
16
  singleWordOnly: "Inserisci una sola parola",
17
  leaveGameTitle: "Lasciare il gioco?",
 
12
  aiDelayed: "L'IA è attualmente occupata. Riprova tra un momento.",
13
  invalidWord: "Parola non valida",
14
  cantUseTargetWord: "Non usare la parola segreta",
15
+ shorterWord: "Usa una parola più corta",
16
  lettersOnly: "Usa solo lettere",
17
  singleWordOnly: "Inserisci una sola parola",
18
  leaveGameTitle: "Lasciare il gioco?",