Add contradiction detection
Implement logic to detect contradictory answers in the computer's question-answering mode. If contradictions are found, the game will abort and prompt the user to restart.
This commit is contained in:
parent
d6f1449d23
commit
c25a17a74a
1 changed files with 42 additions and 2 deletions
|
|
@ -18,7 +18,7 @@ interface GuessingGameProps {
|
||||||
type GameMode = 'user-guesses' | 'computer-asks';
|
type GameMode = 'user-guesses' | 'computer-asks';
|
||||||
type UserGuessingMode = 'standard' | 'questions';
|
type UserGuessingMode = 'standard' | 'questions';
|
||||||
type ComputerStrategy = 'random' | 'linear' | 'binary';
|
type ComputerStrategy = 'random' | 'linear' | 'binary';
|
||||||
type GameState = 'setup' | 'playing' | 'won' | 'lost';
|
type GameState = 'setup' | 'playing' | 'won' | 'contradiction';
|
||||||
|
|
||||||
interface Question {
|
interface Question {
|
||||||
text: string;
|
text: string;
|
||||||
|
|
@ -240,7 +240,8 @@ const GuessingGame: React.FC<GuessingGameProps> = ({ showSocialShare = true }) =
|
||||||
if (!currentQuestion) return;
|
if (!currentQuestion) return;
|
||||||
|
|
||||||
const questionText = `${currentQuestion.text} → ${answer ? 'Yes' : 'No'}`;
|
const questionText = `${currentQuestion.text} → ${answer ? 'Yes' : 'No'}`;
|
||||||
setQuestionsAsked([...questionsAsked, questionText]);
|
const newQuestionsAsked = [...questionsAsked, questionText];
|
||||||
|
setQuestionsAsked(newQuestionsAsked);
|
||||||
setUserScore(userScore + 1);
|
setUserScore(userScore + 1);
|
||||||
|
|
||||||
let newPossibleNumbers = [...possibleNumbers];
|
let newPossibleNumbers = [...possibleNumbers];
|
||||||
|
|
@ -278,6 +279,12 @@ const GuessingGame: React.FC<GuessingGameProps> = ({ showSocialShare = true }) =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for contradictions - if no numbers remain, the answers are contradictory
|
||||||
|
if (newPossibleNumbers.length === 0) {
|
||||||
|
setGameState('contradiction');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setPossibleNumbers(newPossibleNumbers);
|
setPossibleNumbers(newPossibleNumbers);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -555,6 +562,39 @@ const GuessingGame: React.FC<GuessingGameProps> = ({ showSocialShare = true }) =
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{gameState === 'contradiction' && (
|
||||||
|
<div className="text-center space-y-4">
|
||||||
|
<div className="space-y-2">
|
||||||
|
<XCircle className="w-16 h-16 text-destructive mx-auto" />
|
||||||
|
<h3 className="text-2xl font-bold text-destructive">Contradiction Detected!</h3>
|
||||||
|
<p className="text-lg">
|
||||||
|
Your answers are contradictory - no number can satisfy all the conditions you've given.
|
||||||
|
</p>
|
||||||
|
<div className="text-sm text-muted-foreground space-y-1">
|
||||||
|
<p>Please check your answers in the question history below.</p>
|
||||||
|
<p>You may have accidentally given incorrect responses.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{questionsAsked.length > 0 && (
|
||||||
|
<div className="space-y-2 text-left">
|
||||||
|
<h4 className="font-semibold text-center">Your Answer History:</h4>
|
||||||
|
<div className="space-y-1 max-h-40 overflow-y-auto border rounded-lg p-3 bg-muted/30">
|
||||||
|
{questionsAsked.map((question, index) => (
|
||||||
|
<div key={index} className="text-sm p-2 bg-card rounded border">
|
||||||
|
{question}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<Button onClick={resetGame} size="lg" className="w-full">
|
||||||
|
Start Over
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{gameState === 'won' && (
|
{gameState === 'won' && (
|
||||||
<div className="text-center space-y-4">
|
<div className="text-center space-y-4">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue