2012-09-17 44 views
0

我正在根據您在網站上的經驗製作校平系統。我已經掌握了所有的經驗知識,以及我想如何進行練級,但我需要一種更有效的方法來完成練習。我知道這可能會使用一個數組來實現,但我真的不知道該怎麼做。夠張口閉口,雖然,這就是我想要做下150經驗 然後我會用1.5乘以那個......高效調平系統

1級將是什麼,所以 2級將是225下的任何 等級3將是337.5以下的任何等等。這是我要做的低效率的方式。

if($xp < 150){ 
$level = "1"; 
}elseif($xp < 225){ 
$level = "2"; 
}elseif($xp < 337.5){ 
$level = "3"; 
} 

我可以使用1.5($number*1.5)的數量和多變量,但就像我之前說的,我不知道這是怎麼會工作。

*更多信息.. 我有一個會話文件包含在每個頁面上,我有查詢會檢查每次有新的經驗賺取和這個代碼將被用來自動更新數據庫上的級別。

+1

你不需要把變量放在引號中。 '如果($ xp <150)'可以工作。阻止PHP必須執行幾種類型的凝聚... –

+0

我不知道爲什麼我這樣做,哈哈,感謝 – iHeff

回答

4

嘗試

$level = min(max((int)(log($xp/100, 1.5) + 1), 1), $maxLevel); 

,是以數底XP/100(即你必須乘以100得到$ XP的次數),然後添加一個(因爲日誌的1.5 ($ x,1.5)小於1,如果$ x小於1.5)。 min(max(..., minLevel), maxLevel)構造可以讓您將等級限定在1到$maxLevel之間,也可以避免任何負等級問題(如果$xp足夠小於150)。

+0

+ +1的數學無限可擴展方法。如果需要,會建議提及'min()'來限制關卡。 –

+0

太棒了,謝謝!我注意到的唯一的事情是,如果有人在150以下的經驗,他們的水平是負面的。我可以做'if($ level <0){$ level =「1」}'並修復它。另外,爲了防止其他人使用它,我將它更改爲'$ level = round(log($ xp/100,1.5))+ 1;'這樣才能存儲更好的數字。這不應該對它產生負面影響,對嗎?但再次感謝! – iHeff

+0

我已經調整了我的答案,以避免負面價值並提供等級上限。感謝您的建議! – nneonneo

0

我同意。對象或數組都是最好的。

喜歡的東西:

$array = array(
    array(
     'xp_required' => 150, 
     'level' => 1 
    ), 
    array(
     'xp_required' => 225, 
     'level' => 2 
    ), 
    array(
     'xp_required' => 337.5, 
     'level' => 3 
    ) 
); 
$current_xp = 155; 
foreach($array as $reqs){ 
    if($current_xp > $reqs['xp_required']){ 
     $level = $reqs['level']; 
    } 
} 
echo $level'; 
+0

如果數字是你處理的唯一事情,我會與@nneonneo一起去。如果還有其他需要設置的東西,這個解決方案會更好。例如,授予用戶某些級別的權力。每個級別都需要模塊化控制。 –

+0

您也可以稍後做特殊情況下的測試,例如'如果($ level> 5)grantSuperPowers();' – nneonneo

+0

我這樣做的唯一問題是我不想爲50+級別做這件事。感謝您的回覆! – iHeff

0

以及在目前,一旦你抓住用戶的實驗值,你可以有一個代碼塊的功能,不斷爲您在EXP水平的變化,但使用範圍語句

if($xp < 150){ 
    $level = "1"; 
    }elseif($xp > 150 && $xp < 225){ 
    $level = "2"; 
    }elseif($xp > 225 && $xp < 337.5){ 
    $level = "3"; 
    } 
1

以下是我如何完成自己的關卡系統。這是一個更先進的技能點..

<?php 
    $level_up = ($level + 1); 
if ($exp >= $max_exp) 
    { 
    $sql = "UPDATE users SET level=(level + 1) , max_exp=(exp * 1.05) , skill_points=(skill_points + 3) WHERE id='".$id."' LIMIT 1"; 
    $res = mysql_query($sql); 
if ($exp >= $max_exp) 
     echo '<div class="Leveled">' . 'You sucessfully leveled up to ' . $level_up . '!' . ' As a reward you were given 3 skill points!' . '</div>'; 
    } 
    else 
    { 
    } 
    ?>