Я делаю приложение викторины PHP.Как сделать так, чтобы вопросы задавались только один раз? - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть массив из десяти вопросов и ответов.Я использовал arry_rand и shuffle для рандомизации вопросов и перемешивания ответов.Как сделать так, чтобы вопросы задавались только один раз.После прохождения всех десяти вопросов я хочу, чтобы игра была закончена.Спасибо за помощь! :) Вот то, что я пока имею.

 include ("inc/questions.php");
 session_start();

$pageTitle = "Math Quiz: Addition";

$_SESSION["score"]= 0;
if ((isset($_SESSION["score"]) && $choices[0]["correctAnswer"])){
   $_SESSION["score"] += 1;
}
echo $_SESSION["score"];

$rand = array_rand($questions,1);
shuffle($questions);

$choices = [
  $questions[0]["correctAnswer"],
  $questions[0]["firstIncorrectAnswer"],
  $questions[0]["secondIncorrectAnswer"],
];
shuffle($choices);


if ((!isset($_SESSION["counter"]) || $_SESSION["counter"] >9)){
  $_SESSION["counter"] = 1;
} else {
    $_SESSION["counter"] += 1;
}

?>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><?php echo "$pageTitle";?> </title>
    <link href='https://fonts.googleapis.com/css?family=Playfair+Display:400,400italic,700,700italic' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/styles.css">
</head>
<body>
    <div class="container">
        <div id="quiz-box">

            <p class="breadcrumbs"> <?php echo "Question Number "  . $_SESSION["counter"] . " of " . "10"; ?>
            <p class="quiz"><?php echo "What is " . $questions[0]["leftAdder"] . " + " . $questions[0]["rightAdder"];?></p>
            <form action="index.php" method="post">
                <input type="hidden" name="id" value="0"/>
                <input type="submit" class="btn" name="answer1" value="<?php echo $choices[0];?>" />
                <input type="submit" class="btn" name="answer2" value="<?php echo $choices[1];?>" />
                <input type="submit" class="btn" name="answer3" value="<?php echo $choices[2];?>" />
            </form>

        </div>
    </div>
</body>
</html>

Вот Массив вопросов и ответов ...

$questions[] =
    [
        "leftAdder" => 3,
        "rightAdder" => 4,
        "correctAnswer" => 7,
        "firstIncorrectAnswer" => 8,
        "secondIncorrectAnswer" => 10,
    ];
$questions[] =
    [
        "leftAdder" => 16,
        "rightAdder" => 32,
        "correctAnswer" => 48,
        "firstIncorrectAnswer" => 52,
        "secondIncorrectAnswer" => 61,
    ];
$questions[] =
    [
        "leftAdder" => 45,
        "rightAdder" => 12,
        "correctAnswer" => 57,
        "firstIncorrectAnswer" => 63,
        "secondIncorrectAnswer" => 55,
    ];
$questions[] =
    [
    "leftAdder" => 42,
    "rightAdder" => 18,
    "correctAnswer" => 60,
    "firstIncorrectAnswer" => 69,
    "secondIncorrectAnswer" => 57
    ];
$questions[] =
    [
    "leftAdder" => 96,
    "rightAdder" => 20,
    "correctAnswer" => 116,
    "firstIncorrectAnswer" => 120,
    "secondIncorrectAnswer" => 110
    ];
$questions[] =
    [
    "leftAdder" => 44,
    "rightAdder" => 85,
    "correctAnswer" => 129,
    "firstIncorrectAnswer" => 132,
    "secondIncorrectAnswer" => 126
    ];
$questions[] =
    [
    "leftAdder" => 51,
    "rightAdder" => 35,
    "correctAnswer" => 86,
    "firstIncorrectAnswer" => 96,
    "secondIncorrectAnswer" => 82
    ];
$questions[] =
    [
    "leftAdder" => 5,
    "rightAdder" => 61,
    "correctAnswer" => 66,
    "firstIncorrectAnswer" => 65,
    "secondIncorrectAnswer" => 74
    ];
$questions[] =
    [
    "leftAdder" => 26,
    "rightAdder" => 19,
    "correctAnswer" => 45,
    "firstIncorrectAnswer" => 40,
    "secondIncorrectAnswer" => 39
    ];
$questions[] =
    [
    "leftAdder" => 26,
    "rightAdder" => 35,
    "correctAnswer" => 61,
    "firstIncorrectAnswer" => 59,
    "secondIncorrectAnswer" => 51
    ];s the Array...

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Этого можно добиться, перетасовывая вопросы только один раз за сеанс и сохраняя эту перемешанную версию в переменной сеанса, каждый раз выталкивая один вопрос.

Некоторые другие проблемы:

  • Вы сбрасываете счет каждый раз в ноль.
  • Чтобы проверить, что пользователь отправил правильный ответ, вам нужно заглянуть в массив $_POST[]

Вы можете использовать этот код:

// Check submitted answer is correct:
if (isset($_SESSION["correctAnswer"]) && isset($_POST[$_SESSION["correctAnswer"]])) {
    $_SESSION["score"] += 1;
}

if (!isset($_SESSION["score"]) {
    $_SESSION["score"] = 0;
    $_SESSION["counter"] = 0;
    shuffle($questions);
    $_SESSION["questions"] = $questions;
}

echo "score = " . $_SESSION["score"];

if (count($_SESSION["questions"]) == 0) {
    // Here you should navigate to a game-over page that 
    // displays the score and allows to start again (clearing the session).
    die ("No more questions");
}

// Get next question
$currQuestion = array_pop($_SESSION["questions"]);
$_SESSION["correctAnswer"] = $currQuestion["correctAnswer"];

$choices = [
    $currQuestion["correctAnswer"],
    $currQuestion["firstIncorrectAnswer"],
    $currQuestion["secondIncorrectAnswer"],
];
shuffle($choices);

$_SESSION["counter"] += 1;

В остальной части кода заменить вхождение $questions[0] на $currQuestion.

0 голосов
/ 22 декабря 2018

Вместо:

$rand = array_rand($questions,1);
shuffle($questions);

до

<div class="container">
        <div id="quiz-box">
<?php

    shuffle($questions); 
    for($i=0; $i<count($questions); $i++) {
?>
            <p class="breadcrumbs"> <?php echo "Question Number "  . $i . " of " . "10"; ?>
            <p class="quiz"><?php echo "What is " . $questions[$i]["leftAdder"] . " + " . $questions[$i]["rightAdder"];?></p>
            <form action="index.php" method="post">
                <input type="hidden" name="id" value="0"/>
                <input type="submit" class="btn" name="answer1" value="<?php echo $choices[$i][0];?>" />
                <input type="submit" class="btn" name="answer2" value="<?php echo $choices[$i][1];?>" />
                <input type="submit" class="btn" name="answer3" value="<?php echo $choices[$i][2];?>" />
            </form>

        </div>
    </div>
<?php

    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...