我有一个30x7的字段(见下文),我想替换一个特定的位置。
位置是随机给定的,我想用一个字母替换随机位置(X,Y)。
我已经得到了字段和替换,但这并不是我想要的。
$field=('################################')."n".str_repeat.('# #n', 7)('################################')."n"
'
字段看起来像这样
##############################
# #
# #
# #
# #
# #
# #
# #
##############################
和给定位置的空格应替换为字母。
这是32x9的标签,所以只有空白的空格是实际的字段。
我不知道如何从位置中排除周围的标签,以及如何从x和y中计算实际位置。
$position=($position_x)*($position_y);
$field=substr_replace($field,'O',$position,1);
echo("$field");
我就是这么做的。我知道$的位置是错误的,但我不知道如何解决它。
它甚至可能与我创建字段的方式,还是我应该尝试不同的?
提前感谢您的帮助!
您需要确保您的$field
是正确的。你的代码有一些语法错误。
关键在于计算坐标。
- 左边框增加x + 1
- 为上边框增加y + 1
- 的颜色是+ 3,因为左边框,右边框和换行
- 对于最终位置,将行数乘以列数加上x
$placeField = function (string $char, int $x, int $y): string {
$cols = 30;
$rows = 7;
$topBottomFrame = str_repeat('#', $cols + 2) . "n";
$centerFrame = '#' . str_repeat(' ', $cols) . "#n";
$field = $topBottomFrame . str_repeat($centerFrame, $rows) . $topBottomFrame;
if ($x < 0 || $x >= $cols || $y < 0 || $y >= $rows) {
return "Invalid coordinatesn";
}
$x++;
$y++;
return substr_replace($field, $char, $y * ($cols + 3) + $x, 1);
};
echo $placeField("A", 0, 0);
echo $placeField("B", 29, 6);
echo $placeField("C", 15, 3);
输出################################
#A #
# #
# #
# #
# #
# #
# #
################################
################################
# #
# #
# #
# #
# #
# #
# B#
################################
################################
# #
# #
# #
# C #
# #
# #
# #
################################