2

「半ば漠然とした」タイトルで申し訳ありませんが、これ以上のタイトルは思いつきませんでした。

とにかく、私はPHPを使って一種のRPゲームを構築しています。現在、ユーザーレベルを上げ、経験値の「オーバーフロー」を維持し、場合によっては再びレベルを上げる方法を見つけようとしています。

つまり、私のキャラクターがレベル1だとすると、レベル2に到達するには400 expが必要です。現在、400 exp以上に達すると、レベルが1ずつ進み、exp​​がリセットされます。しかし、私がやりたいのは、450 expを獲得すると、レベルが上がり、expがオーバーフロー(この場合は50)にリセットされることです。これは難しいことではありません。トリッキーな部分は、経験値が多すぎて複数回レベルアップする場合です。

現在、私はこのコードを持っています、

    public function advLvl($user) {
        $sql = $this->db->prepare("UPDATE `characters` SET `level` = `level` + 1, `experience` = '0' WHERE `u_name` = :user");
        $sql->execute(array(":user" => $user));
    }

    public function checkLvl($user, $currLvl) {
        $sql = $this->db->prepare("SELECT `experience` FROM `characters` WHERE `u_name` = :user");
        $sql->execute(array(":user" => $user));
        $exp = $sql->fetchColumn();

        if($exp >= $this->expNextLevel($currLvl)) {
            $this->advLvl($user);
        }
    }

    public function expNextLevel($currLvl) {
        if($currLvl == 1) {
            return 400;
        }else {
            $gain = 400 + $this->defaultMobGain($currLvl);
            $expNextLevel = 120 + ($gain * $currLvl);
            return $expNextLevel;
        }
    }

そして、すべての要求で私はこれを行います、

 $alt->checkLvl($_SESSION["username"], $char_info["level"]);

これにより、レベルが上がり、すべてが機能します。唯一の問題は、経験値が多すぎて2回以上進むと、更新ごとに増分するだけになることです。つまり、私がレベル1で、1320 expを獲得したとしましょう。これは、レベル3(レベル1 = 400、レベル2 = 920)に到達するのに十分です。しかし、変更に対応するために、ページを2回更新する必要があります。

したがって、ある種の再帰関数を作成する必要があると思います。私の現在の経験値が次のレベルまでの経験値の量以上である間、私のレベルを進めるようなものです。しかし、それはそれほど単純ではありません。ループは数百回実行されますが、実行する必要があるのは2回だけです(この場合)。どうすればこれを行うことができますか?

うまくいけば、それは理にかなっていて、私が達成しようとしていることを理解してくれます。さらに情報が必要な場合は、私に知らせてください。

前もって感謝します。

4

2 に答える 2

2

ゼロにリセットせずに合計金額を保存します。次に、彼らがどのレベルにいるかに基づいて計算を行います。

これが私が提案していることの例です。各レベルに必要なexpはここでハードコーディングされていますが、実行しているようにその場で計算できます(defaultModGainが何を実行しているかわからないため、ハードコーディングしました)。

function getLevel($exp) {
    $levels = array(0, 400, 920, 1320);

    for ($i = (count($levels) - 1); $i >= 0; $i--) {
        if ($exp >= $levels[$i]) {
            return $i + 1;
        }
    }

    return 1;
}
于 2013-03-24T23:39:45.827 に答える
2

他の人と同じように、レベルアップ後に経験値をリセットするのではなく、合計経験値の差を挿入することをお勧めします-レベル合計。次に、レベルアップに必要な経験を再計算し、その直後に再確認します。達成された経験がレベルアップ要件よりも高い限り、レベルアップが必要です。

于 2013-03-25T13:21:45.670 に答える