2010-06-05 59 views
0

我正在研究像Mafia Wars這樣的遊戲,並且我試圖讓戰鬥系統正常工作,但我一直在努力解決誰將贏得戰鬥並且仍然需要知道如果統計數據接近,那麼他們就會隨機獲得勝利。Php&MYSQL中的Fighing系統

$strength = $my_strength; 
$otherplayerinfo = mysql_query("SELECT * FROM accounts WHERE id='$player_id'"); 
$playerinfo = mysql_fetch_array($otherplayerinfo); 
$players_strength = $playerinfo['stre']; 
$players_speed = $playerinfo['speed']; 
$players_def = $playerinfo['def']; 

if($players_strength > $strength){ 
$strength_point_player = 1; 
$strength_point_your = 0; 
}else{ 
$strength_point_your = 1; 
$strength_point_player = 0; 
} 

我正在嘗試一個積分系統,但我仍然無法做到這一點。

+0

你的問題是什麼? – 2010-06-05 19:46:09

回答

2

您需要制定一個公式/算法來確定誰獲勝。我建議先考慮一下,先用簡單的語言或僞代碼寫出來,然後再將它翻譯成PHP。

這可能是一些像

「比較每個球員的力量,速度 和防禦。通過從其他實力減去一個人的 國防和 由速度/ 10相乘計算整體 優勢。如果整體 得分在5%以內,挑選贏家在 隨機「

例如。或許

「比較每個統計,看看它是否是 大於,等於或 其他玩家的統計的5%以內。分數是1,如果 優越,0,如果足夠接近,-1,如果 低。如果是0,勝者是隨機的,否則得分越高。「

從那裏你可以把它翻譯成你的編程語言的邏輯。

+0

好說。使它像runescape或什麼與盔甲,盾牌,抵抗和東西。這將是一個有趣的項目:) – ggfan 2010-06-06 03:32:44

2

我正在嘗試點系統,但我仍然無法做到這一點。

我強烈建議你研究一下游戲機制應該先做什麼。一旦你可以描述戰鬥應該如何在幾句話中工作,那麼你可能會得到更好的幫助,以便如何實現它。

1

首先,mysql_fetch_array只返回字符串。因此,爲了防萬一,當將它們分配給局部變量時,一定要將每個字段投射到(int)。它使得比較的行爲和預期一樣,並且更容易在代碼中挑出應該發生的事情。

其次,你需要一個else if($players_strength === $strength) {/* do something random */}在那裏。否則,如果統計數據相同或更大,戰鬥勝利將永遠留在你身上。第三,如果只比較每個屬性的一方是否大於另一方,那麼不需要統計所有屬性之間的比較。只需在每個球員身上總計所有數據,然後對兩個總數進行最終比較。否則,如果你確實有特殊的比較對每個人的統計數據進行比較,並且會進行統計比較,你需要增加勝利的標誌,而不僅僅是反覆地將它們分配給1或0:

 
$strength_point_your += 1; 
$strength_point_player += 0; // you don't even need this line, just for show 
  • 順便提一下,這些只是非常簡單的解決方案。你可以做更多的事情來完善你的代碼,但重點是從一開始就讓它實際運行。
+1

注意:mysql_fetch_array()可以返回NULL值而不是字符串。 – Wrikken 2010-06-05 23:50:50

+0

@Wrikken是正確的,但在這些情況下字段值只會被轉換爲0。即使如此,這個函數只能返回'false',所以需要添加一組全新的代碼來處理這種情況。 – 2010-06-06 00:17:03