在PHP中计算一堆结果

时间:2015-05-07 17:33:28

标签: php mysql

我正在寻找一些见解。艺术创意和数据更是我的强项,而不是数学。

假设我有一个基于mmo风格的文本浏览器游戏,我正在搞乱。关卡系统可能是无限的,但随着人们的水平上升,它将变得越来越难以达到一个新的水平。我想要的是它开始相当容易。我设定了达到2级所需的基本目标经验值数量。但是我的问题就在这里。我想知道一些可行的选项是什么设置水平未来。我的想法是制作一个我在游戏创建时运行一次的脚本。它将从以下开始:

$base_xp = 100;

这将是达到二级所需的经验值。然后对于之后的每个级别,我只希望每个级别增加之前的级别的百分比。也许比之前的水平高3或5%。该脚本将以

运行
i=1;

然后运行foreach look或while循环,并在数据库中插入一个列出每个级别的表,它的经验点要求现在可能达到1000级。

对我来说,这看起来真的很乏味。但手动输入

也是如此
$level2 = 100;
$level3 = 205
$level4 = 310;

等等......可能有数千个级别。

我能想到的另一件事就是运行每个脚本执行的数学公式,看看他们是否满足了下一级别的要求。但是我对如何编写这样一个在数学方面有点糟糕的公式有点模糊。

任何想法都将不胜感激。如果我不得不提出一个明确的问题,那就是:

动态或静态创建关卡及其xp要求列表的有效方法是什么?

如果我为它创建一个SQL表并将它们全部插入。我可以只查询一次并用APC或其他东西存储这些要求,以便在游戏过程中更快地进行检索,而不是每次都查询数据库中有一千行或更多行的表。

3 个答案:

答案 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之间的差异。