0

我正在根据您在网站上的经验制作一个调平系统。我已经弄清楚了所有的经验,以及我想如何进行练级,但我需要一种更有效的方法来做到这一点。我知道这可能会使用数组来实现,但我真的不知道如何去做。够啰嗦了,不过,这就是我想要做的......

级别 1 将是任何低于 150 的经验 然后我将乘以 1.5,所以级别 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,但就像我之前所说的那样,我真的不知道它是如何工作的。

*更多信息..我在每个页面上都包含一个会话文件,并且每次获得新经验时我都会检查查询,并且此代码将用于自动更新数据库上的级别。

4

4 回答 4

4

尝试

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

这需要xp/100 的以1.5为底的对数(即,您必须将 100 乘以得到 $xp 的次数),然后加一(因为如果 $x 是 log($x, 1.5) 则小于一小于 1.5)。该min(max(..., minLevel), maxLevel)构造允许您将级别限制在 1 和 之间$maxLevel,同时避免负级别的任何问题(如果$xp足够小于 150)。

于 2012-09-17T02:33:42.200 回答
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
    {
    } 
    ?>
于 2012-12-05T03:09:19.890 回答
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';
于 2012-09-17T02:34:55.493 回答
0

现在,一旦您获取用户 exp,您就可以将该代码块作为一个函数来不断检查 exp 级别的变化,但使用范围语句

 if($xp < 150){
     $level = "1";
  }elseif($xp > 150 && $xp < 225 ){
    $level = "2";
  }elseif($xp > 225 && $xp < 337.5){
    $level = "3";
  }
于 2012-09-17T02:44:56.647 回答