对不起“半模糊”的标题,但我想不出更好的标题。
无论如何,我正在使用 PHP 构建一种 RP 游戏,现在我正在尝试弄清楚如何提升用户级别并保持经验值的“溢出”并可能再次提升他们的级别。
所以假设我的角色是 1 级,我需要 400 exp 才能达到 2 级。目前我所拥有的是,当我达到 400 或更高时,它会提高我的等级并重置我的 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"]);
这提高了我的等级,一切正常,唯一的问题是,如果我获得如此多的经验,我将不止一次前进,那么它只会在每次刷新时增加。所以假设我是 1 级并且我获得了 1320 exp,这足以让我升到 3 级(1 级 = 400,2 级 = 920)。但为了跟上变化,我必须刷新页面两次。
所以我假设你必须构建某种递归函数。比如,当我当前的 exp 大于或等于到下一个级别的 exp 量时,提升我的级别。但是,并不是那么简单,while 循环将被执行数百次,我只需要它执行两次(在这种情况下)。我该怎么做呢?
希望这是有道理的,并且您了解我要完成的工作,如果您需要更多信息,请告诉我。
提前致谢。