2011-02-03 77 views
0

试图让它循环3次,并在第三次后(如果没有猜对)显示正确的答案。在PHP游戏循环迭代

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

有人吗?如果你可以告诉我我要去哪里错了。

<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']--; 
} 
?> 
+1

我敢肯定你正在尝试做的应该在JavaScript来完成。 PHP不是这个最好的语言。如果你想在php中做到这一点,你需要创建一个方法来存储猜测(会话),以便脚本的每个负载都会记住最后一个 – DeveloperChris 2011-02-03 23:19:37

回答

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循环。

+0

这就是在那里生成要放入下拉列表中的电影,会使它失去这个价值。 – Jshee 2011-02-03 23:17:50

+1

@woopie:我不是说你删除它,但你必须检查答案是什么(如果有的话)。见上面的更新。 – 2011-02-04 08:17:29

2

return语句而使循环和脚本

获得在... Allowing 3 attempts at game - php摆脱两个return语句的

DC

而且您的意见对重复的问题

看起来这个问题是一个“家庭作业”问题,事实上与“问题没有人会给你完整的答案,我认为他们应该。我们都期望问这个问题的人会自己去调查和理解给出的答案。

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

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

因为这个引入的问题,比如购物车(和PHP游戏)的cookies被发明出来。这可以让浏览器带走一些关于你的信息,这样Web服务器或应用程序就会记住你。这已经扩展到这里的受访者正在召集的会议。

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

每当页面加载时,都会发生这种情况。

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

在你的情况下,它取决于你决定什么需要记住。考虑将页面重新加载成循环的新“迭代”。这应该引导你得出关于从一次迭代到下一次迭代需要通过什么的明显结论。

你走了。我没有为你写答案,但希望能够为你提供足够的帮助,让你的班级变得更加出色。

DC

0

在修复DeveloperChris说什么,你仍然需要投入guesscount到为每个尝试会话或表单字段和增量。

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

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

和你的问题与JavaScript无关。

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']--; 
}