高效的调平系统

时间:2012-09-17 02:29:19

标签: php

我正在根据您在网站上的经验制作一个调平系统。我已经掌握了所有经验,以及我想如何进行练级,但我需要一种更有效的方法来完成它。我知道这可能会使用数组实现,但我真的不知道如何去做。但是,这就是我要做的事情......

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 个答案:

答案 0 :(得分:4)

尝试

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

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

答案 1 :(得分: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
    {
    } 
    ?>

答案 2 :(得分: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';

答案 3 :(得分:0)

当你抓住用户exp时,你可以将该代码块作为一个函数来不断检查exp级别的变化,但是使用一个远程语句

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