2012-09-17 48 views
0

我正在根据您在网站上的经验制作校平系统。我已经掌握了所有的经验知识,以及我想如何进行练级,但我需要一种更有效的方法来完成练习。我知道这可能会使用一个数组来实现,但我真的不知道该怎么做。够张口闭口,虽然,这就是我想要做下150经验 然后我会用1.5乘以那个......高效调平系统

1级将是什么,所以 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)的数量和多变量,但就像我之前说的,我不知道这是怎么会工作。

*更多信息.. 我有一个会话文件包含在每个页面上,我有查询会检查每次有新的经验赚取和这个代码将被用来自动更新数据库上的级别。

+1

你不需要把变量放在引号中。 '如果($ xp <150)'可以工作。阻止PHP必须执行几种类型的凝聚... –

+0

我不知道为什么我这样做,哈哈,感谢 – iHeff

回答

4

尝试

$level = min(max((int)(log($xp/100, 1.5) + 1), 1), $maxLevel); 

,是以数底XP/100(即你必须乘以100得到$ XP的次数),然后添加一个(因为日志的1.5 ($ x,1.5)小于1,如果$ x小于1.5)。 min(max(..., minLevel), maxLevel)构造可以让您将等级限定在1到$maxLevel之间,也可以避免任何负等级问题(如果$xp足够小于150)。

+0

+ +1的数学无限可扩展方法。如果需要,会建议提及'min()'来限制关卡。 –

+0

太棒了,谢谢!我注意到的唯一的事情是,如果有人在150以下的经验,他们的水平是负面的。我可以做'if($ level <0){$ level =“1”}'并修复它。另外,为了防止其他人使用它,我将它更改为'$ level = round(log($ xp/100,1.5))+ 1;'这样才能存储更好的数字。这不应该对它产生负面影响,对吗?但再次感谢! – iHeff

+0

我已经调整了我的答案,以避免负面价值并提供等级上限。感谢您的建议! – nneonneo

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'; 
+0

如果数字是你处理的唯一事情,我会与@nneonneo一起去。如果还有其他需要设置的东西,这个解决方案会更好。例如,授予用户某些级别的权力。每个级别都需要模块化控制。 –

+0

您也可以稍后做特殊情况下的测试,例如'如果($ level> 5)grantSuperPowers();' – nneonneo

+0

我这样做的唯一问题是我不想为50+级别做这件事。感谢您的回复! – iHeff

0

以及在目前,一旦你抓住用户的实验值,你可以有一个代码块的功能,不断为您在EXP水平的变化,但使用范围语句

if($xp < 150){ 
    $level = "1"; 
    }elseif($xp > 150 && $xp < 225){ 
    $level = "2"; 
    }elseif($xp > 225 && $xp < 337.5){ 
    $level = "3"; 
    } 
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 
    { 
    } 
    ?>