PHP猜数字游戏Bug:无法触发猜数提示功能
PHP猜数字游戏运行异常修复
问题现象
开发的PHP猜数字游戏仅输出初始引导语:I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly?,无法显示"Make your guess..."的输入提示,也无法完成10轮游戏的需求。
项目需求
PHP数字猜谜游戏
"在这个项目中,你需要创建一个数字猜谜游戏。程序会生成1到10之间的随机数。你要运行游戏10次,并向用户展示他们的猜谜能力相关信息。"
问题代码
$play_count = 0; $correct_guesses = 0; $guess_high = 0; $guess_low = 0; echo "I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly? "; function guessNumber() { global $play_count,$correct_guesses,$guess_high,$guess_low; $play_count++; $num = rand(1,10); echo " Make your $guess... "; $guess = intval(readline(">>")); //$guess = intval($guess); echo "Round: $play_count my number: $num, Your guess: $guess"; if ($guess === $num) { $correct_guesses++; } if ($guess > $num) { $guess_high++; } if ($guess < $num){ $guess_low++; } echo guessNumber(10); echo guessNumber(12); $percent_correct = $correct_guesses/$play_count * 100; echo " After $play_count rounds, here are some facts about your guessing: You guessed the number correctly $percent_correct% of the time. " ; if ($guess_high > $guess_low){ echo "When you guessed wrong, you tended to guess high."; } else { echo "When you guessed wrong, you tended to guess low." ; } }
问题分析与修复点
- 函数未触发执行:仅定义了
guessNumber()函数,但没有调用它,程序只执行开头的echo语句就结束了。 - 递归调用错误:函数内部重复调用
guessNumber(10)和guessNumber(12),会导致无限递归,且函数本身无参数接收逻辑,传参完全无效。 - 变量错误:提示语里的
$guess变量此时未定义,应改为固定文本Make your guess...。 - 轮次逻辑错误:需求是运行10次游戏,需用循环控制轮次,而非递归调用函数。
修复后的完整代码
$play_count = 0; $correct_guesses = 0; $guess_high = 0; $guess_low = 0; echo "I'm going to think of numbers between 1 and 10 (inclusive). Do you think you can guess correctly?\n"; // 循环执行10轮游戏 for ($i = 0; $i < 10; $i++) { $play_count++; $num = rand(1, 10); echo "\nMake your guess...\n"; $guess = intval(readline(">> ")); echo "Round: $play_count\nMy number: $num\nYour guess: $guess\n"; if ($guess === $num) { $correct_guesses++; echo "You guessed correctly!\n"; } elseif ($guess > $num) { $guess_high++; echo "Your guess was too high!\n"; } else { $guess_low++; echo "Your guess was too low!\n"; } } // 计算并输出统计信息 $percent_correct = round(($correct_guesses / $play_count) * 100, 2); echo "\nAfter $play_count rounds, here are some facts about your guessing:\n"; echo "You guessed the number correctly $percent_correct% of the time.\n"; if ($guess_high > $guess_low) { echo "When you guessed wrong, you tended to guess high.\n"; } elseif ($guess_low > $guess_high) { echo "When you guessed wrong, you tended to guess low.\n"; } else { echo "When you guessed wrong, you had an even split between high and low guesses.\n"; }
修复说明
- 用
for循环控制10轮游戏,替代错误的递归调用 - 修正提示语中的变量错误,改为正确的文本提示
- 增加每轮游戏的结果反馈(猜对/猜高/猜低)
- 优化统计信息输出,增加平局判断逻辑
- 移除不必要的全局变量和无效函数调用
内容的提问来源于stack exchange,提问作者deda
相关产品推荐
相关产品推荐

