网络游戏场景。我们有两栋相连的大楼。第二个是类似于升级的东西,但不完全是这样,没关系,这并不重要。
每一座建筑都有经验层次,这一层次依赖于建筑生产材料的еnt。当我们生产材料时,我们会在建筑物的水平之间进行计算。例句:我们生产2000块黄金,每栋建筑都生产黄金,比如:
B级建筑-建造A级x级黄金
注意到:
总是B楼(升级大楼)有更大的优先权,所以它:B级-A级x黄金
生产的黄金在两座建筑上总是一样的。
$building_A = array(4=>2000);
$building_B = array(5=>2000);
计算值为:5-4 x 2 0 0 0金=1×2 0 0 0
备选案文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)
v.3
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);
计算:(B)
V.4
$buildingA = array(4=>1400, 5=>600);
$buildingB = array(5=>700, 6=>1300);
计算:(B)
V.5
$buildingA = array(1=>300, 2=>700, 3=>1000);
$buildingB = array(5=>500, 6=>1500);
计算:(B)
让我们尝试用v.3解释一下:
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);
A楼将在4级生产1000枚黄金,然后升到第5级,其余的则在5级。
B楼将在4级生产500枚黄金,然后再升一级,其余将在5级。
所以我们如何计算:
在这里,我做了一些测试脚本,但是代码看起来不太好,并且它不适用于v.04:http://sandbox.onlinephpfunctions.com/code/6f12fda4877ad781da52f908f3cba79aa0c69f33
我需要计算如何匹配黄金将产生共同的建筑物时,两者的水平上升。我看不出这么简单的方法。有什么建议吗?
我想不出该怎么做了。很难解释得很好,但我希望它写得清楚--请不要对此评头论足:
发布于 2014-05-21 12:06:25
一位天才同事为我提供了一个简单的数学解决方案:
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);
https://stackoverflow.com/questions/23747453
复制相似问题