php - 带循环的 PHP 迷宫生成器
问题描述
我有关于创建迷宫生成器的问题
我有变量 $num = 5,我想要这样的输出:
@ @@@
@ @
@@@ @
@ @
@ @@@
我已经在尝试解决我的问题和这样的输出:
@ @@@
@ @
@@@ @
@ @
@@@ @
如何像我想要的那样使输出正确?我已经像这样在 php 上写了 scipt:
<?php
$num = 5;
$space = $num - 2;
$end = $num - 1;
$left = true;
$mid = false;
$right = false;
$leftCount = 1;
$rightCount = 0;
for ($i = 0; $i < $num; $i++)
{
for ($j = 0; $j < $num; $j++)
{
if ($left) {
$line = ($i % 2 == 0 && $j == 1) ? " ":" 1 ";
($j == $end) ? $left = false:$mid = true;
$leftCount = 0;
$rightCount = 1;
echo $line;
}
else if ($mid)
{
$line = (($i % 2 == 1 && $j == 0) || ($i % 2 == 1 && $j == $end)) ? " 2 ":" ";
($j == $end) ? $mid = false:"";
($rightCount > $leftCount) ? $right = true:$left = false;
echo $line;
}
else if ($right)
{
$line = ($i % 2 == 0 && $j == $space) ? " ":" 3 ";
($j == $end) ? $mid = true:"";
$rightCount = 0;
$leftCount = 1;
echo $line;
}
}
echo "<br>";
}
请需要帮助来改进我的代码,这样我就可以像第一个输出一样打印
解决方案
它似乎有很多代码基本上可以做三件事,把它分解。
画一条有一个孔的线
- 选择孔所在的位置
rand(1, max-1)
- 用墙填充其余部分
- 选择孔所在的位置
在交错线上没有墙
- 用空白空间填充所有内容
包围外墙
- 是第一个还是最后一个
加入所有行/数组并输出。
例子:
<?php
$maze = [];
for($i=0; $i<=8; $i++) {
$hole = rand(1, 6);
$line = [];
for ($ii=0; $ii<8; $ii++)
$line[] = $ii === 0 || $ii === 7 ? '@' : ($ii === $hole || $i % 2 ? ' ' : '@');
$maze[] = join($line).PHP_EOL;
}
echo join($maze);
输出:
@@@@@ @@
@ @
@@@ @@@@
@ @
@@@@@ @@
@ @
@@@ @@@@
@ @
@@@@@@ @
如果$hole = $i % 4 ? 6 : 1;
您希望孔与您的示例一样位于同一位置,请使用。
@ @@@@@@
@ @
@@@@@@ @
@ @
@ @@@@@@
@ @
@@@@@@ @
@ @
@ @@@@@@
编辑:
现在改为5
@ @@@
@ @
@@@ @
@ @
@ @@@