2011-09-05 68 views
2

我试图在php中为我的用户构建一个关卡系统。到目前为止,我只有在我的用户面板中的MySQL表...Level系统PHP?

id/xp (default 0)/xp_needed (default 5)/level (default 1) 

我也有一个酒吧,说明需要多少XP,$细节是MySQL表列的一个阵列。

$xp_needed = ($details['xp']/$details ['xp_needed']) * 100; 

echo'<p>XP Needed:</p><div class="bar Tooltip" title="' . $details['xp'] . '/' . 
$details['xp_needed'] . '"><span style="width: ' . $xp_needed . '%;"></span></div>'; 

我不能工作是检查的功能,如果XP是在需要的XP,如果是更新水平到下一个整数,更新需要5 *级的XP和结转如果有任何xp_需要新的xp_needed?

感谢您的耐心

回答

3

写一个函数xpIncrease($amount),到处都叫它你增加用户的XP。

它应该是这样的:

function xpIncrease($amount) { 
if ($amount>=$details['xp_needed']) { 
    $amount-=$details['xp_needed']; 
    $details['xp_needed']=$newValue; //user leveled up, update xp_needed 
    xpIcrease($amount); //call it again because user may level up twice or more... 
} else { 
    //just add it with SQL 
} 
} 
+0

好的,谢谢你,这让我重新思考我该怎么做:) – carlgcode

+0

在角落的情况下要谨慎,用户获得足够的XP来升级多个级别。我的代码涵盖了这一点,只是警告。 –

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 
    { 
    } 
    ?> 
0

每次experience变得比experienceneeded多,人的水平了然后设置experienceneeded * 1,2

<?php include 'Style/database.php'; ?> 
<?php include 'Style/functions.php'; ?> 
    <?php include'logged_in.php'; ?>  
<?php $randomnummer=rand(0,100); ?> 

<?php $sql = "SELECT * FROM users WHERE id = '$users[id]' LIMIT 1"; 
    if ($result = $mysqli->query($sql)) {$user = $result->fetch_array();} ?> 



<?php if(isset($_POST['train'])) 
     { $msg="You are training!<br>" ; 
$allowed = mysqli_query($mysqli," UPDATE users SET experience = experience+$randomnummer WHERE username = '$users[username]' "); 
$level_up = mysqli_query($mysqli," UPDATE users SET experience = experience-experienceneeded ,level=level+1 WHERE username = 

$users[username]' "); 


if ($users['experience'] >= $users['experienceneeded']) 
{ 
$res = mysqli_query($mysqli,"UPDATE users SET level = (level + 1) WHERE id = '$users[id]' LIMIT 1"); 
$res = mysqli_query($mysqli,"UPDATE users SET experienceneeded = experienceneeded * 1.2 WHERE id = '$users[id]'LIMIT 1"); 
$res = mysqli_query($mysqli,"UPDATE users SET credit = credit + 3 WHERE id = '$users[id]'LIMIT 1"); 
      } 
    if ($users['experience'] >= $users['experienceneeded']) 
    { echo  '<div class="Leveled">'. 
      'You sucessfully leveled up to ' 
      . $level_up . '!'. 
      ' As a reward you were given 3 credit points!' 
        .'</div>';}} 
?> 


<div class="content"> 
<center> 

<form method="post" action="user_train.php"> 
<?php echo "$msg" ; ?> 
    <button type="submit" name="train" id="train">train for <?php echo $users['username'] ; ?></button> 
</form></center> 
</div> 
+0

请解释你的代码的作用,以及它与其他答案的不同之处。 –

+0

每次体验得到更多的经验,然后根据需要 人水平高达 然后设置需要经验* 1,2 ... 如果人们想了解,他们要看看更接近代码,所以后来他们知道为什么以及如何一切都是这样的 –