我有一个矩形地图,存储为多维数组(即$map [row] [col]),我必须追踪玩家看到哪些方块,放在这张地图上的任何位置.
玩家可见性是圆形的,半径未知(但在运行时给出)我只需要整数解.
我知道周长公式是
x^2 + y^2 <= r^2
但我怎么能存储一切?
我需要这些值,因为那时我可以“揭示”地图方块.
最好的是多维数组(即__ $sol [x] [y] __).
这是我正在使用的一段代码.它没有得到纠正,因为它假设视觉是正方形而不是圆形.
计算平方
$this->vision_offsets_2 = array();
//visibility given as r^2
$mx = (int)(sqrt($this->viewradius2));
$mxArr = range($mx * -1, $mx + 1);
foreach ($mxArr as $d_row)
{
foreach ($mxArr as $d_col)
{
$this->vision_offsets_2[] = array($d_row, $d_col);
}
}
这是我如何应用它
foreach($player as $bot)
{
foreach($visibility as $offset)
{
$vision_row = $offset[0] + $bot[0];
$vision_col = $offset[1] + $bot[1];
if(isset($map[$vision_row][$vision_col]))
{
if( $map[$vision_row][$vision_col] == UNSEEN) {
$map[$vision_row][$vision_col] = LAND; }
}
}
}
在这里你可以找到机器人视图:你可以看到一个非完美的圆圈.
我该如何追踪?顺便说一下,在这个例子中,半径^ 2是55,橙色圆圈是玩家,棕色方块是可见的.