我挑战自己通过做一些单独的项目来提高我的技能,现在我被困在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,但我需要它来学习,任何改进算法的想法或技巧都将受到高度赞赏。