我正在寻找一些见解。艺术创意和数据更是我的强项,而不是数学。
假设我有一个基于mmo风格的文本浏览器游戏,我正在搞乱。关卡系统可能是无限的,但随着人们的水平上升,它将变得越来越难以达到一个新的水平。我想要的是它开始相当容易。我设定了达到2级所需的基本目标经验值数量。但是我的问题就在这里。我想知道一些可行的选项是什么设置水平未来。我的想法是制作一个我在游戏创建时运行一次的脚本。它将从以下开始:
$base_xp = 100;
这将是达到二级所需的经验值。然后对于之后的每个级别,我只希望每个级别增加之前的级别的百分比。也许比之前的水平高3或5%。该脚本将以
运行i=1;
然后运行foreach look或while循环,并在数据库中插入一个列出每个级别的表,它的经验点要求现在可能达到1000级。
对我来说,这看起来真的很乏味。但手动输入
也是如此$level2 = 100;
$level3 = 205
$level4 = 310;
等等......可能有数千个级别。
我能想到的另一件事就是运行每个脚本执行的数学公式,看看他们是否满足了下一级别的要求。但是我对如何编写这样一个在数学方面有点糟糕的公式有点模糊。
任何想法都将不胜感激。如果我不得不提出一个明确的问题,那就是:
动态或静态创建关卡及其xp要求列表的有效方法是什么?
如果我为它创建一个SQL表并将它们全部插入。我可以只查询一次并用APC或其他东西存储这些要求,以便在游戏过程中更快地进行检索,而不是每次都查询数据库中有一千行或更多行的表。
答案 0 :(得分:0)
这里有两个想法。第一个是我的评论。
您的游戏中存储的号码始终是您增加上限的号码。我会做一些事情greater than 3%
所以以后可能会很难。但我会说maybe 6% being the cap
。我不会说这会更大,但如果其他人可以提供更好的数字,那就没问题了。这样当价值达到您CAP
CAP = CAP * x + CAP
时就会$cap = 100;
for($i = 0;$i < 10000000;$i++){
$cap = $cap * $i + $cap
// insert data
}
,现在您的上限增加了。没问题..
但是,如果你想告诉某人你可以在X级别达到50级,或者级别1000,10000000000。你可能想要一个表格用于那些实例。在这种情况下,我将创建一个仅存储到具有自动递增ID的数据库的循环并存储预期的XP。您需要确定XP的数据类型,但也许int不够好。
{{1}}
然后是的。当你查询他们当前的级别,然后上升到接下来的5个级别,这样你就可以保持XP运行的可能性。或者查询他们所有你的电话。在某些时候,内存将耗尽。
我可能会考虑只达到100级,直到有人达到50级,然后转到200,300等等,直到你对你的游戏等级上限感到满意为止。如果只有200的上限,总是阻止此人达到201。
答案 1 :(得分:0)
您是否只想生成下一个级别所需的点数,而下一个级别仅为4%(例如,如您所述)高于下一级别?不要存储任何东西,只需计算它:
<?php
function check_level($lvl) {
$percent_increase = 0.04;
$ret = 100;
if ($lvl == 1)
return 0;
for ($i=3; $i <= $lvl; $i++)
$ret = $ret + ($ret * $percent_increase);
return $ret;
}
for( $x=1; $x <= 20; $x++)
echo "$x: ".check_level($x).PHP_EOL;
?>
输出:
1: 0
2: 100
3: 104
4: 108.16
5: 112.4864
6: 116.985856
7: 121.66529024
8: 126.5319018496
9: 131.59317792358
10: 136.85690504053
11: 142.33118124215
12: 148.02442849183
13: 153.94540563151
14: 160.10322185677
15: 166.50735073104
16: 173.16764476028
17: 180.09435055069
18: 187.29812457272
19: 194.79004955563
20: 202.58165153785
虽然增长缓慢但仍为4%。可能想要使用更大的东西,或更可能的东西,指数
答案 2 :(得分:0)
如果将来可以帮助任何人......这就是我得出的结论。
$level = $currentlevel;
$nextlevel = $level+1;
$cap = 50;
for($i = $level;$i < $nextlevel;$i++){
$percent = 8;
$percentage = $percent / 100;
$sum1 = $percentage * $cap;
$sum2 = $sum1 + $cap;
$sum3 = $sum2 * $i;
echo "level $i: $sum3<br>";
}
我实际上并没有在数据库中存储任何东西。我只是想进行动态生成。上面的公式只计算未来的下一个级别。但我也根据凯西和迈克的推荐制作了以下公式,可以生成任意数量无限量级别的列表。以下示例将显示最高级别1,000和xp要求。
$cap = 50;
for($i = 2;$i < 1001;$i++){
$percent = 8;
$percentage = $percent / 100;
$sum1 = $percentage * $cap;
$sum2 = $sum1 + $cap;
$sum3 = $sum2 * $i;
echo "level $i: $sum3<br>";
}
Example Output:
level 2: 108
level 3: 162
level 4: 216
level 5: 270
level 6: 324
level 7: 378
level 8: 432
level 9: 486
level 10: 540
level 11: 594
level 12: 648
level 13: 702
level 14: 756
level 15: 810
level 16: 864
level 17: 918
level 18: 972
level 19: 1026
level 20: 1080
这样才有意义。每个级别之间所需的xp量似乎很小,但随着你的升级,你的xp被擦除,你必须达到该级别列出的全部xp,而不仅仅是说级别3和级别2之间的差异。