尝试让它循环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']--;
}
?>
答案 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']--;
}