Php游戏中的循环迭代

时间:2011-02-03 22:30:58

标签: php javascript

尝试让它循环3次,在第3次之后(如果没有猜到的话)显示正确的答案。

目前 - 它经历了猜测,但没有显示剩下多少猜测(应该每次尝试扣除每个)。

任何?如果你能告诉我我在哪里出错了。

<style type="text/css">
input {border:1px solid #ADD8E6; font-size:1.2em;}
input.spec {background-color:#ddd;}
</style>
<?php
    echo "<fieldset><h1><legend>Testing your Academy Award Trivia</h1>";
    $ages['Casablanca'] = "1943";
    $ages['Around The World in 80 Days'] = "1956";
    $ages['Patton'] = "1970";
    $ages['Annie Hall'] = "1977";
    $ages['Chariots of Fire'] = "1981";
    $ages['Dances With Wolves'] = "1990";
    $ages['Crash'] = "2005";
    $ages['The Departed'] = "2006";

    $rand_keys = array_rand($ages, 1);

    $guesses = 3;

?>
<form method='post' name="inputyear" onsubmit="return validate(this);">
Give the year below won academy award<br><br>
<Strong>Movie:</strong> <input type='text' name='movie' class="spec" value='<?= $rand_keys ?>'     readonly='readonly' /><br><br>
<Strong>Year it Won the Oscar:</Strong> <input type='text' name='year' size="30" /><br/><br>
<strong>You have: </strong> <?php $guesses; ?> guesses left<br><br>
<input type='submit' name='submit' value="Get Result" onClick="makeGuess()" />
</form>

<?php
$movie = isset($_POST['movie']) ? $_POST['movie'] : false;
$guessedYear = isset($_POST['year']) ? (int) $_POST['year'] : false;
if ($movie && $guessedYear) {
    $realyear = $ages[$movie];
}
@$_SESSION[$movie]['$guesses']++;
if ($realyear && $_SESSION[$movie]['$guesses'] < 3) {

    if ($guessedYear == $realyear) {
        echo "Correct! " . "during year " . $realyear;
    }
    if ($guessedYear < $realyear) {
        echo "Wrong, year too low";
        $guesses--;
    }
    if ($guessedYear > $realyear) {
        echo "Wrong, year too high";
        $guesses--;
    }

} elseif ($_SESSION[$movie]['$guesses'] >= 3) {
    echo "Sorry, too many tries. the answer was " . $realyear;
} else {
    echo "Sorry, You managed not to pick a year. Please try again";
    $_SESSION[$movie]['guesscount']--;
}
?>

5 个答案:

答案 0 :(得分:2)

return语句离开循环和脚本

摆脱两个返回语句

DC

继续您对...的重复问题的评论 Allowing 3 attempts at game - php

这个问题似乎是一个“家庭作业”问题,事实上,所有问题都没有人给你完整答案,我认为也不应该。我们都希望提出问题的人能够自行调查并理解给出的答案。

现在,对于您的问题,您似乎缺少关于HTTP如何工作的重要信息(http是驱动所有网页和互联网许多其他部分的协议)。

http被认为是无状态协议,即当您单击网页中的链接并转到另一个网页(甚至是同一个网页)时,新网页会认为您是一个全新的访问者。它实际上已经忘记了你。

因为这引入了诸如购物车(和PHP游戏)之类的问题,所以发明了cookie。这使得浏览器可以随身携带一些关于您的信息,这样Web服务器或应用程序就会记住您。这已经扩展到这里的受访者呼叫会话。

会话(通常)是存储标识符的cookie。该标识符告诉您,在这种情况下是PHP,您之前在那里以及在哪里可以找到有关您的信息。 PHP可以加载这些信息,并让程序员可以使用它。

每次加载页面都会发生这种情况。

现在PHP不知道在这个'会话'中要存储什么,程序员需要决定需要存储哪些信息。你需要告诉PHP在下次加载页面时保存这些信息。

在您的情况下,由您来决定需要记住的内容。考虑将页面重新加载为循环的新“迭代”。这应该会引导你得到一些明显的结论,说明需要从一次迭代传递到下一次迭代。

你去吧。我没有为你写过答案,但希望能够为你提供足够的色彩。

DC

答案 1 :(得分:1)

我认为你的问题在于这一行$rand_keys = array_rand($ages, 1);。每次用户提交答案时,无论提交的答案是什么,都会选择新的$rand_keys并将其输入下拉列表。

因此,您需要检查是否存在答案(否则,这是第一次加载页面)。如果答案是正确的,则显示恭喜消息并生成新的电影ID。

if($_POST['submit']) {
  $movie = $_POST['movie'];
  $guessedYear = $_POST['year'];
  if ($guessedYear == $ages[$movie]) {
    // well done you got it right, next movie
    $rand_keys = array_rand($ages, 1);
  }
  else if ($guessedYear == $ages[$movie] && $_POST['tries'] >= 3) {
    // took over 3 tries and didn't get it right, next movie
    $rand_keys = array_rand($ages, 1);
  }
  else {
    // find $movie index from $ages and use that
  }
  // you have one less try
  $tries = $_POST['tries'] - 1;
}
else {
  $rand_keys = array_rand($ages, 1);
  $tries = 3;
}

然后在表单中发送$tries变量以及其他变量,或者正如此处的其他人所说的那样将变量放入会话变量中。有了这个,我认为你应该能够完全删除while循环。

答案 2 :(得分:0)

在修复了DeveloperChris所说的内容后,你仍然需要将guesscount放入session或form字段中,并在每次尝试时递增。

答案 3 :(得分:0)

    if($guesscount < 3 && $guessedYear > $realyear){
        echo "Wrong, year too high";
    }
    if($guesscount < 3 && $guessedYear > $realyear){
        echo "Wrong, year too high";
    }

那里有重复的代码。我认为你正在寻找{...}否如果{..}其他如果{...}其他{...}

你的问题与javascript无关。

答案 4 :(得分:0)

也许核心逻辑更像这样?

$movie = isset($_POST['movie']) ? $_POST['movie'] : false;
$guessedYear = isset($_POST['year']) ? (int) $_POST['year'] : false;
if ($movie && $guessedYear) {
    $realyear = $ages[$movie];
}
@$_SESSION[$movie]['guesscount']++;
if ($realyear && $_SESSION[$movie]['guesscount'] < 3) {

    if ($guessedYear == $realyear) {
        echo "Correct! " . "during year " . $realyear;
    }
    if ($guessedYear < $realyear) {
        echo "Wrong, year too low";
    }
    if ($guessedYear > $realyear) {
        echo "Wrong, year too high";
    }

} elseif ($_SESSION[$movie]['guesscount'] >= 3) {
    echo "Sorry, too many tries. the answer was " . $realyear;
} else {
    echo "Sorry, You managed not to pick a year. Please try again";
    $_SESSION[$movie]['guesscount']--;
}