我正在根据您在网站上的经验制作一个调平系统。我已经掌握了所有经验,以及我想如何进行练级,但我需要一种更有效的方法来完成它。我知道这可能会使用数组实现,但我真的不知道如何去做。但是,这就是我要做的事情......
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
),但就像我之前所说的那样,我真的不知道它是如何工作的。
*更多信息.. 我有一个会话文件包含在每个页面上,我有查询,每次有新的经验,将检查此代码将用于自动更新数据库上的级别。
答案 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";
}