【问题标题】:Level system PHP?关卡系统PHP?
【发布时间】:2011-11-10 20:00:41
【问题描述】:

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

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

我的用户面板中还有一个显示需要多少 xp 的栏,$details 是 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,如果是,则将级别更新为下一个整数,将所需的 xp 更新为 5 * 级别并结转剩余部分(如果有)的 xp_needed 到新的 xp_needed?

感谢您的耐心等待

【问题讨论】:

    标签: php mysql sql system


    【解决方案1】:

    很简单:

    while(currentExp >= expNeededNextLevel) {
    currentExp -= expNeededNextLevel
    levelUp();
    }
    

    【讨论】:

      【解决方案2】:

      每当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>
      

      【讨论】:

      • 我知道这很愚蠢..顺便说一句,你所做的很肮脏,,让我无法发帖......
      【解决方案3】:

      我就是这么干的..

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

      【讨论】:

        【解决方案4】:

        写一个函数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
        }
        }
        

        【讨论】:

        • 好的,谢谢你,这让我重新思考我应该怎么做:)
        • 在极端情况下要小心,在这种情况下,用户可以获得足够的 XP 来升级多个级别。我的代码涵盖了这一点,只是警告。
        猜你喜欢
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2020-10-10
        • 2020-12-26
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多