我正在制作一个基于你在网站上的经验的水平系统。我已经弄清楚了所有的经验,以及我想如何做水平,但我需要一个更有效的方式来做到这一点。我知道这可能会使用数组来实现,但我真的不知道如何去做。别再胡扯了,这就是我要做的……
级别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),但就像我之前说过的那样,我真的不知道这是如何工作的。
*更多信息..我有一个会话文件包括在每个页面上,我有查询,将检查每一次有新的经验获得,这段代码将用于更新的水平,在数据库中自动。
发布于 2012-09-17 10:33:42
试一试
$level = min(max((int)(log($xp / 100, 1.5) + 1), 1), $maxLevel);这需要xp/100的对数底1.5 (即必须乘以100才能得到对数的次数),然后加1(因为如果$x小于1.5,则$xp($x,1.5)小于1)。min(max(..., minLevel), maxLevel)构造允许您将级别限制在1和$maxLevel之间,还可以避免负级别的任何问题(如果$xp足够小于150)。
发布于 2012-12-05 11:09:20
这是我如何完成我的关卡系统的。这是一个更高级的特点,有技能点数。
<?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-09-17 10:34:55
我同意。对象或数组都是最好的。
类似于:
$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';https://stackoverflow.com/questions/12452500
复制相似问题