首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP -两个数组之间的计算-键和值

PHP -两个数组之间的计算-键和值
EN

Stack Overflow用户
提问于 2014-05-19 21:23:02
回答 1查看 579关注 0票数 0

网络游戏场景。我们有两栋相连的大楼。第二个是类似于升级的东西,但不完全是这样,没关系,这并不重要。

每一座建筑都有经验层次,这一层次依赖于建筑生产材料的еnt。当我们生产材料时,我们会在建筑物的水平之间进行计算。例句:我们生产2000块黄金,每栋建筑都生产黄金,比如:

B级建筑-建造A级x级黄金

注意到

总是B楼(升级大楼)有更大的优先权,所以它:B级-A级x黄金

生产的黄金在两座建筑上总是一样的。

代码语言:javascript
运行
复制
$building_A = array(4=>2000);
$building_B = array(5=>2000);
  • 建筑A级4 -> 2000金
  • B楼5层-> 2000金

计算值为:5-4 x 2 0 0 0金=1×2 0 0 0

备选案文0.1:其可能的基础建筑升级为一级,第二层建筑为同一级别:数组:

代码语言:javascript
运行
复制
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(5=>2000);

构建А

  • 第4级: 1000金
  • 第5级: 1000金

B楼:

  • 第5级: 2000金

计算:

5 -4 x 1000 =1 x 1000

5 -5 x 1000 =0 x 1000

备选案文0.2:可能的和相反的情况:数组:

代码语言:javascript
运行
复制
$buildingA = array(4=>2000);
$buildingB = array(4=>700,5=>1300);

A楼:

  • 第4级:2000年金

B楼:

  • 第5级: 700金
  • 第6级: 1300金

计算:

5-4 x 700 =1 x 700

6-4 x 1300 =1 x 1300

这是变体0.1和0.2的代码

http://sandbox.onlinephpfunctions.com/code/ef0adce304554392266b8193b292051c0d98bae8

代码语言:javascript
运行
复制
//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

代码语言:javascript
运行
复制
$buildingA = array(4=>500, 5=>1500);
$buildingB = array(4=>1000, 5=>1000);

计算:()

  • 4-4 x 500
  • 4-5 x 500
  • 5-5 x 1000

v.2

代码语言:javascript
运行
复制
$buildingA  = array(4=>1500, 5=>500);
$buildingB = array(4=>1000, 5=>1000);

计算:(B)

  • 4-4x1000
  • 5-4 x 500
  • 5-5 x 500

v.3

代码语言:javascript
运行
复制
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);

计算:(B)

  • 4-4 x 500
  • 5-4 x 500
  • 5-5 x 1000

V.4

代码语言:javascript
运行
复制
$buildingA = array(4=>1400, 5=>600);
$buildingB = array(5=>700, 6=>1300);

计算:(B)

  • 5-4 x 700
  • 6-4 x 700
  • 6-5 x 600

V.5

代码语言:javascript
运行
复制
$buildingA = array(1=>300, 2=>700, 3=>1000);
$buildingB = array(5=>500, 6=>1500);

计算:(B)

  • 5-1 x 300
  • 5-2 x 200
  • 6-2x500
  • 6-3x1500

让我们尝试用v.3解释一下:

代码语言:javascript
运行
复制
$buildingA = array(4=>1000, 5=>1000);
$buildingB = array(4=>500, 5=>1500);

A楼将在4级生产1000枚黄金,然后升到第5级,其余的则在5级。

B楼将在4级生产500枚黄金,然后再升一级,其余将在5级。

所以我们如何计算:

  • "B“- 500黄金按4级计算,我们有4-4 x 500,到目前为止,我们使用的是2000年的500黄金。
  • "B“现在变成5级
  • "A“的lv4和需要500个更多的黄金到5级,所以我们提供5-4x500(它的5,因为"A”级别在那之前),直到现在我们使用(500 + 500)从2000年的黄金。
  • "A“现在是第5级
  • "B“是它的5级,"A”是5级,所以所有其他的黄金-5-5 x 1000,(这是其余的未使用的黄金: 1000)

在这里,我做了一些测试脚本,但是代码看起来不太好,并且它不适用于v.04:http://sandbox.onlinephpfunctions.com/code/6f12fda4877ad781da52f908f3cba79aa0c69f33

我需要计算如何匹配黄金将产生共同的建筑物时,两者的水平上升。我看不出这么简单的方法。有什么建议吗?

我想不出该怎么做了。很难解释得很好,但我希望它写得清楚--请不要对此评头论足:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 12:06:25

一位天才同事为我提供了一个简单的数学解决方案:

代码语言:javascript
运行
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23747453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档