2013-09-26 25 views
0

我現在正在創建一個基於文本的黑手黨遊戲。不,不是其中之一。我只是爲了練習PHP而創建一個。我已經學到了很多東西,但是我遇到了一個問題,在互聯網上我找不到答案,因爲我不知道要搜索什麼,因此我需要您的幫助。關於爲什麼在PHP遊戲中獲得積分的建議

我正在做的功能是某種盜用功能。你可以選擇一個選項,然後你將有一個機會,取決於你的成功排名。如果你成功了,你將獲得「XP」(經驗值)。我會加錢和計時器,所以你不能只是重做它,但這不是問題。假設你是「平民」等級,那麼如果你做到了,那麼你將獲得XP,這是有效的,如果你通過100 XP,你的等級將變爲「Wannabe」。現在,如果你是一個崇拜者,它將會是一樣的,但這次你將不得不擊中250 XP來排名。現在,代碼不起作用。

我明顯地創建了MySQL連接和數據庫選擇,它正在工作。我只是沒有看到在這裏分享的代碼中包含這一點。

$id = $row['id']; 
$rank = $row['rank']; 
$xp  = $row['xp']; 
$theft = $_POST['option']; 
$chance = rand(1,100); 

if ($theft == 1) { 

    if ($rank == 'Civilian') { 

    if ($chance > '60') { 
     echo "You made it."; 
     mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id"); 

    if ($xp > '100') { 
    mysql_query("UPDATE users SET rank = 'Wannabe' WHERE id=$id"); 
     } 

    } else { 
     echo 'You did not make it'; 
    } 
} 

} else if ($rank == 'Wannabe') { 

if ($chance > '50') { 
    echo "You made it."; 
     mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id"); 

    if ($xp > '250') { 
      mysql_query("UPDATE users SET rank = 'Thief' WHERE id=$id"); 
    } 

} else { 
     echo 'You did not make it'; 
    } 
} 

我完全知道這可能不是編程這個最好的方法,雖然這可能是我現在可以做的最好的方法。這是什麼,在我的代碼不起作用?無論如何,我可以使它工作?有更好的解決方案嗎?

我非常感謝任何答覆。即使它只是某種領先,所以我可以進步。

編輯:這些只是表格中第一個選項的前兩個等級。你有四種不同的犯罪行爲,那就是$theft == 1。還有三個。還有大約5個等級。所以我認爲這是不好的編碼。我只是不知道我能做得更好。

+0

PHP的遊戲。有趣。 – Mark

+1

什麼是不工作? xp是否被添加到數據庫? – Jason

+1

您正在比較rand()的結果$ chance變量。 rand()返回一個int值,而你正在比較字符串:'$ chance>'50''應該是'$ chance> 50'。總的來說,你似乎太依賴PHP的類型雜耍了。 –

回答

1

不直接回答你的問題,但考慮在你的邏輯上面使用switch語句。當你添加其他行列時,它會減少混亂。

例如:

<?php 
$rank = "civillian"; 

switch ($rank){ 
    case "wannabe": 
     dostuff(); 
     break; 
    case "civillian": 
     doOtherStuff(); 
     break; 
} 
?> 
+0

謝謝,我知道我已經忘記了那樣簡單的事情。但我仍然不知道爲什麼我的代碼無法工作。但是,如果我將其與案例切換出來,它可能會正常工作。 –

2

那麼,一個問題,我看到了蝙蝠的權利:

您正在閱讀的當前XP值:

$xp = $row['xp']; 

然後,成功,更新DB值:

mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id"); 

但你然後測試XP值使用進展成功預值

if ($xp > '100')... 

所以你沒有考慮到新的50點...

上的成功,讓你的$ xp = $ xp + 50

然後設置數據庫值。

此外,我同意100%與@ PiX06 - 查看switch陳述,他們是你的朋友在這裏!另外,考慮將所有XP更新內容放在一個單獨的函數中,並在必要時調用它,因爲該邏輯只是反覆重複。無論何時您看到您多次輸入相同的代碼,現在都是尋找重構方式的時候了。

+0

謝謝老兄。我會檢查一下:) –