2011-02-03 80 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']--; 
}