网络游戏的场景。我们有两座相连的建筑。第二个是像升级但不完全一样,更不用说这不重要了。
每栋建筑都有经验水平,而这个水平取决于建筑物生产的材料。当我们生产材料时,我们在建筑物的层次之间进行计算。 例如:我们生产2000金,每个建筑都生产金像:
建筑物B级 - 建造A级x生产黄金
备注:
始终建筑物B(升级建筑物)具有更高的优先级,因此其:B级 - A x金级
两座建筑物上生产的黄金总是相同的
$building_A = array(4=>2000);
$building_B = array(5=>2000);
建立A级4级 - > 2000金
B楼5层 - > 2000金
计算方法是:5 - 4 x 2000 gold = 1 x 2000
变式0.1: 它可能的基层建筑升级到第二层和第二层建筑是同一层次: 阵列:
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(5=>2000);
建筑А
B楼:
计算:
5 - 4 x 1000 = 1 x 1000
5 - 5 x 1000 = 0 x 1000
变体0.2: 它可能和相反的情况: 阵列:
$buildingA = array(4=>2000);
$buildingB = array(4=>700,5=>1300);
建筑A:
B楼:
计算:
5-4 x 700 = 1 x 700
6-4 x 1300 = 1 x 1300
这是变体0.1&的代码。 0.2
http://sandbox.onlinephpfunctions.com/code/ef0adce304554392266b8193b292051c0d98bae8
//v.01
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(5=>2000);
//v.02
//$buildingA = array(4=>2000);
//$buildingB = array(4=>700,5=>1300);
if(sizeof($buildingB) == 1)
{
foreach($buildingA as $level_a => $gold)
{
$level_b = array_keys($buildingB);
$level_b = $level_b[0];
$level_diff = $level_b - $level_a;
$tmp['calc'] = $level_b . ' - ' .$level_a.' = '.$level_diff . ' x ' . $gold;
$x[] = $tmp;
}
}
elseif(sizeof($buildingA) == 1)
{
foreach($buildingB as $level_b => $gold)
{
$level_a = array_keys($buildingA);
$level_a = $level_a[0];
$level_diff = $level_b - $level_a;
$tmp['calc'] = $level_b . ' - ' .$level_a.' = '.$level_diff . ' x ' . $gold;
$x[] = $tmp;
}
}
这里的一切都很好,但是当这两座建筑物都增加了它的水平时,它们会变成粪便。我为这个变体制作了几个代码但是它们看起来并且工作得很好。 能有更清醒头脑的人能否给出一些建议,计算差异是多么容易。
V.1
$buildingA = array(4=>500, 5=>1500);
$buildingB = array(4=>1000, 5=>1000);
计算:()
V.2
$buildingA = array(4=>1500, 5=>500);
$buildingB = array(4=>1000, 5=>1000);
计算:(B-A)
V.3
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);
计算:(B-A)
V.4
$buildingA = array(4=>1400, 5=>600);
$buildingB = array(5=>700, 6=>1300);
计算:(B-A)
V.5
$buildingA = array(1=>300, 2=>700, 3=>1000);
$buildingB = array(5=>500, 6=>1500);
计算:(B-A)
让我们尝试用v.3解释:
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);
A楼将在4级产生1000金,然后升级,其余为5级
B楼将在4级产生500金,然后升级,剩下的将在5级
所以我们如何计算:
这里我制作了一些测试脚本,但代码看起来不太好,而且它不适用于v.04: http://sandbox.onlinephpfunctions.com/code/6f12fda4877ad781da52f908f3cba79aa0c69f33
我需要计算当两个等级UP时,匹配金将如何产生建筑物。 我没有看到简单的方法来计算这个。有什么建议吗?
我没有想法如何做到这一点。很难解释它好,但我希望它的写作清楚 - 请不要评价我:)
答案 0 :(得分:0)
一位天才同事为我提供了简单的数学解决方案:
function f ($x1, $x2)
{
foreach ($x2 as $k2 => $v2)
{
if ($v2 == 0)
continue;
foreach ($x1 as $k1 => $v1)
{
if ($v2 == 0 || $v1 == 0)
continue;
$m = ($v2 >= $v1) ? $v1 : $v2;
$v2 -= $m;
$v1 -= $m;
$x2[$k2] = $v2;
$x1[$k1] = $v1;
echo '(' . $k2 . ' - ' . $k1 . ') = ' . ($m) . '<br />';
}
}
}
f($buildingA, $buildingB);