PHP控制台版Hangman游戏错误计数异常问题求助
解决Hangman游戏错误计数异常问题
你的代码核心问题在于:每次用户提交猜测后,会遍历秘密单词的所有字母,每遇到一个不匹配的字母就给$playerErrors加1。比如秘密单词有5个字母,一次错误猜测会触发5次else分支,直接让错误数+5,导致玩家很快达到失败阈值。
修正后的代码
<?php $playerErrors = 0; // 假设这里已经初始化了$secretArray(秘密单词拆成的数组)和$displayedLetters(初始全为_的数组) $shwWord = implode(' ', $displayedLetters); while ($playerErrors < 6) { if (strpos($shwWord, '_') === false){ echo "You won! Congratulations!\n"; break; } $guess = readline('Guess a letter: '); $correctGuess = false; // 标记本次猜测是否命中 for ($g = 0; $g < count($secretArray); $g+=1) { if ($guess === $secretArray[$g]){ $displayedLetters[$g] = $guess; $correctGuess = true; // 命中字母,标记为正确猜测 } } // 只有当本次猜测完全没命中时,才增加错误数 if (!$correctGuess) { $playerErrors += 1; echo "Errors: " . $playerErrors . "\n"; } $shwWord = implode(' ', $displayedLetters); echo "\n $shwWord \n\n"; } if ($playerErrors >= 6) { echo "you lost" . PHP_EOL; } ?>
关键改动说明
- 新增
$correctGuess变量,用来跟踪本次猜测是否命中秘密单词中的任何字母 - 移除循环内的错误计数逻辑,只在循环结束后判断:如果
$correctGuess仍为false,说明这次猜测完全错误,才给$playerErrors加1 - 确保一次错误猜测只会增加1次错误数,符合Hangman游戏的规则
内容的提问来源于stack exchange,提问作者MrDurpy
相关产品推荐
相关产品推荐

