改进用PHP开发的2048游戏的求和算法

时间:2017-02-01 22:59:44

标签: php algorithm

我挑战自己通过做一些单独的项目来提高我的技能,现在我被困在2048年。

我有文本文件存储游戏的当前值。

  

128 64 32 16 32 8 8 8 16 4 4 4 8 2 2 2

<?php
$logs = file("logs-2048.txt");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    file_put_contents('logs-2048.txt', '');
    $tableValues = [];

    $arrayLine = explode(" ", $logs[0]);
    for($g=0; $g<4; $g++) {
        $newLine = [];
        for($h=0; $h<4; $h++) {
            array_push($newLine, htmlspecialchars($arrayLine[$g*4+$h]));
        }
        array_push($tableValues, $newLine);
    }

    $direction = $_POST["action-joueur"];
    $string = "";

    if($direction == "^") {
        for($g = 0; $g < 3; $g++) {
            for ($h = 0; $h < 4; $h++) {
                for ($i = 0; $i < 3; $i++) {
                    if ($tableValues[$i][$h] == $tableValues[$i+1][$h] || $tableValues[$i][$h] == 0) {
                        $tableValues[$i][$h] += $tableValues[$i+1][$h];
                        $tableValues[$i+1][$h] = 0;
                    }
                }
            }
        }
    } else if ($direction == "v") {
        //Almost simillar stuff as for ^
    } else if ($direction == "<") {
        //Almost similar stuff as for ^
    } else if ($direction == ">") {
        //Almost similar stuff as for ^
    }

    $arrayEmpty = [];
    for($g = 0; $g < 4; $g++) {
        for($h = 0; $h < 4; $h++) {
            if($tableValues[$g][$h] == 0) {
                array_push($arrayEmpty, [$g, $h]);
            }
        }
    }
    $findRand = mt_rand(0, count($arrayEmpty)-1);
    $tableValues[$arrayEmpty[$findRand][0]][$arrayEmpty[$findRand][1]] = 2;

    for($g = 0; $g < 4; $g++) {
        for ($h = 0; $h < 4; $h++) {
            $string = $string.$tableValues[$g][$h]." ";
        }
    }
    file_put_contents("logs-2048.txt", $string);
}
?>

第一个循环是解析我从文件中获取的数组,并将其转换为二维数组(表)。

问题是在接下来的4个嵌套循环中进行求和,我无法想象我怎么能用其他方式然后只使用另一个循环(每个嵌套循环的第一个循环),如果有的话,它会返回3次数字被卡在某处自我添加(第2列中的EX.2 2 2 2 =&gt; 4 2 2 0 =&gt; 4 4 0 0 =&gt; 8 0 0 0)。

我100%确定求和算法非常低效,但我无法弄清楚我能提供哪些解决方案来使其更快更直观,然后有4个...我也尝试在互联网上查看不同的资源,但它对我来说非常混乱,因为我开始使用php。

  

是的,我知道php不是最好的方法,我会自己做   Javascript,但我需要它来学习,任何改进算法的想法或技巧都将受到高度赞赏。

0 个答案:

没有答案