我之前已经问过这个问题了,但我只想用一种新的分级格式对其进行编码。我想做的是,用户将获得exp,一旦他们升级,他们以前的经验将被添加到他们的当前exp。
因此,在一个场景中,它是这样的: User1在1级,exp_needed为1000,达到2级。他获得了1,000的经验,所以他现在在2级,current_exp为1,000,并且需要1,400。或者,如果User1获得了1,100的经验,那么他就在2级,current_exp为1,100和1,400。依此类推,取决于算法。但如果用户获得1,100 exp,则得到-900/1,400的结果。
以下代码如下:
while($user->curr_exp >= $user->exp_needed){
$user->curr_exp -= ($user->exp_needed) + $user->prev_exp;
$user->prev_exp = $user->exp_needed;
if($user->level <= 19){
$user->exp_needed = $user->prev_exp * 1.4;
}
elseif($user->level >= 20 && $user->level <= 39){
$user->exp_needed = $user->prev_exp * 1.1;
}
elseif($user->level >= 40 && $user->level <= 59){
$user->exp_needed = $user->prev_exp * 1.05;
}
elseif($user->level >= 60 && $user->level <= 79){
$user->exp_needed = $user->prev_exp * 1.04;
}
elseif($user->level >= 80 && $user->level <= 99){
$user->exp_needed = $user->prev_exp * 1.03;
}
elseif($user->level == 100){
$user->exp_needed = $user->exp_needed * 0;
}
$user->level += 1;
$user->save();
}
有什么办法处理这件事吗?谢谢。
发布于 2019-05-16 02:13:02
我认为你的水准系统不必要的复杂,因为它使水准的阈值取决于玩家当前的经验。
首先,我建议设定固定的水准阈值,由你事先决定。例如,前20层需要1000
exp,1400
exp,1960
exp .诸若此类。例如,可以将它们保存在数组上。
现在假设玩家在1级,100级,并且需要900
exp达到2级。他获得1000
exp,现在他在1100
exp,因此它被提升到2级。例如,达到3级的阈值设置为1400
。
您可以通过两种方式进行:
1300
就可以到达1000+1400=2400
exp。0
,现在他需要到达1400
exp才能达到第3级。第二个解决方案的缺点是,你失去了实际的总经验球员所做的,因为你是放弃任何额外的经验,他得到的水平上升。为此,您可以使用永远不会重置的第二个变量curr_total_exp
。
发布于 2019-05-15 22:59:13
100级别是最大的,所以我们添加了一个检查,以防止无限循环。
while ($user->curr_exp >= $user->exp_needed && $user->level < 100) {
仅减去升级所需的XP:
$user->curr_exp -= $user->exp_needed;
将XP从此级别添加到以前的XP中:
$user->prev_exp += $user->exp_needed;
if ($user->level < 20) {
$user->exp_needed = $user->prev_exp * 1.4;
}
如果级别小于20,则不需要检查它是大于还是等于,因为我们有else
elseif ($user->level < 40) {
$user->exp_needed *= 1.1;
}
elseif ($user->level < 60) {
$user->exp_needed *= 1.05;
}
elseif ($user->level < 80) {
$user->exp_needed *= 1.04;
}
elseif ($user->level < 100) {
$user->exp_needed *= 1.03;
}
else {
$user->exp_needed = 0;
}
$user->level += 1;
$user->save();
}
我们不修改exp_needed
基于prev_exp
,因为我们需要一个可预测的指数序列: 1000,1400,1960,2744.而不是1000,1400,3360.
如果您想要根据所有已获得的XP计算它,请保留代码原样。
https://gamedev.stackexchange.com/questions/171991
复制