You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP猜数字游戏:如何让随机数在游戏结束前保持不变

解决PHP猜数字游戏随机数每次重置的问题

嘿,这个问题其实很典型——你现在的代码每次页面加载(包括提交表单/按回车)都会重新执行$randomNum = rand(0, 150);,所以随机数自然每次都变,用户根本没法猜对。咱们用**会话(Session)**就能搞定,把随机数存在会话里,直到用户猜对再重置。

核心思路

会话可以在用户的多个请求之间保存数据,所以我们只需要:

  • 第一次加载页面时生成随机数并存入会话
  • 后续请求直接从会话里取这个随机数
  • 用户猜对后,清除会话里的随机数,下次加载就会生成新的

修改后的完整代码

<?php
session_start(); // 必须在输出任何HTML之前启动会话

// 初始化随机数:只有会话里没有的时候才生成
if (!isset($_SESSION['randomNum'])) {
    $_SESSION['randomNum'] = rand(0, 150);
}
$randomNum = $_SESSION['randomNum'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Guess Gaming</title>
</head>
<body>
<h1>Guess the correct Number</h1>
<p>
<?php 
if(empty($_GET["guess"])){ 
    echo "Missing guess parameter."; 
} else {
    $guess = $_GET["guess"];
    if(is_numeric($guess)){
        // 注意用==而不是===:GET参数是字符串,$randomNum是整数,严格相等会不匹配
        if((int)$guess == $randomNum){ 
            echo "Congratulations-- You are right";
            unset($_SESSION['randomNum']); // 猜对后清除会话,下次生成新数
        } elseif((int)$guess < $randomNum){ 
            echo "Your guess is too low."; 
        } else { 
            echo "Your guess is too high."; 
        }
    } else { 
        echo htmlspecialchars($guess) . " isn't numeric."; 
    } 
} 
?>
</p>
<p>
<!-- 这里可以注释掉,不然用户直接看到答案啦 😄 -->
<!-- <?php echo $randomNum; ?> -->
</p>
</body>
</html>

几个关键细节说明

  1. session_start()的位置:必须放在所有HTML输出之前,否则会报错,因为会话需要发送HTTP头。
  2. 类型转换:把$_GET["guess"]转成整数(int)$guess,再和$randomNum比较,避免字符串和整数的类型问题(比如用户输入"10",和整数10用是相等的,但用=就不相等)。
  3. htmlspecialchars():输出用户输入的内容时加上这个,防止XSS攻击,是好习惯哦。
  4. 隐藏答案:原代码里直接输出$randomNum,用户一眼就看到答案了,建议注释掉或者删掉~

这样修改后,随机数会一直保持到用户猜对,之后刷新页面就会生成新的随机数,完美解决你的问题!

内容的提问来源于stack exchange,提问作者user2613041

火山引擎 最新活动