游戏中的随机问题

时间:2011-02-20 19:58:38

标签: php

我在一个可以向用户显示随机问题的游戏中工作,所有工作进展顺利,但问题是同一个用户有可能在同一个会话中获得相同的问题,我不想要它,这是我的代码

$runs     = $_REQUEST['runs'];
$query    = "SELECT max(id) FROM question$runs";
$result1  = db_execute($query);
$ans      = mysql_fetch_array($result1);
$max      = $ans['0'];
$rand_no  = mt_rand(0,$max);
$query1   = "SELECT * FROM question$runs WHERE id='$rand_no'";

现在我如何在同一会话中避免来自同一用户的同一问题 任何想法?PLZ分享比Q全部

5 个答案:

答案 0 :(得分:3)

创建一个包含先前问题ID的数组,并将其存储到$ _SESSION中。 生成新的随机数时检查它是否已存在。如果这样重新生成随机数

答案 1 :(得分:3)

正如Voooza所说,商店在会议中提出问题。这样的事情可以解决问题:

session_start();
$runs     = $_REQUEST['runs'];
$query    = "SELECT max(id) FROM question$runs";
$result1  = db_execute($query);
$ans      = mysql_fetch_array($result1);
$max      = $ans['0'];
$valid_question = false;
while (!$valid_question) {
    $rand_no = mt_rand(0,$max);
    if (!in_array($rand_no, $_SESSION['questions'])) {
        $valid_question = true;
    }
}
$_SESSION['questions'][] = $rand_no;
$query1   = "SELECT * FROM question$runs WHERE id='$rand_no'";

答案 2 :(得分:1)

拥有包含特定问题期间提出的问题的数据结构。每次创建一个容器时,都会向该容器添加新问题;每次检查容器以确保不出现新问题。如果是,请寻找另一个。

答案 3 :(得分:0)

如果内存是一个问题,并且您无法存储每个活动会话应答的每个问题,那么您可以在每个会话中存储一个随机种子,并回答#个问题。对于每个回答的问题,使用shuffle算法(即随机排列)并返回序列中的下一个项目。

[更新]

另一种选择是......如果你不介意每个人都有相同的问题顺序,那么只需为每个问题分配一个随机数,然后按顺序返回,按随机数排序。

答案 4 :(得分:0)

我认为这里不需要会议。

function avoid_random_repeat($r)
     $rand           = mt_rand(0,$max);
     $unique         = avoid_random_repeat($rand);

   if(in_array($r,$testing)){
      $rand_no  = mt_rand(0,$max);
      avoid_random_repeat($rand_no);
      }
     else{
   array_push($testing,$r);
     return;
      }
  }