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(つまり、$ xpを取得するために100を掛ける必要がある回数)を取り、次に1を加算します($xが1.5未満)。このmin(max(..., minLevel), maxLevel)構成により、レベルを1との間にクランプすることができ$maxLevel、負のレベルの問題も回避できます($xp150未満の場合)。

于 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 に答える