我创建了一个这样的网格(一些间隙有障碍,但对于这个问题并不重要):
SELECT *
,LEAD(created) OVER (ORDER BY created) as next_created
,LEAD(created) OVER (ORDER BY created) < projected_end as was_skipped
FROM [your_table]
因此,初始位置是一个数组:
private function newGrid()
{
$grid = array();
for ($i = 0; $i < 10; $i++) {
for ($j = 0 ; $j < 10; $j++) {
$grid[$i][$j] = ['obstacle' => rand(0,1)];
}
}
return $grid;
}
例如,如果我移动到x方向,我想从网格的一个边缘包裹到另一个边缘(如球体)。 (前进和后退)
当我向前迈进时,我使用的模数如下:
$loc = array('x' => 1, 'y' => 3);
但是,如果我想做同样的事情,但是倒退,这是更好的方法吗?当x变为0时,转到位置x = 9
有什么建议吗?
答案 0 :(得分:1)
为了向后退,你可以这样做:
$loc['x'] = ($loc['x'] + 9) % 10 ;
如果你有动态的方向&#34;变量可以取值1(前进)和-1(后退),然后:
$loc['x'] = ($loc['x'] + 10 + $direction) % 10 ;
这可能是一个实用的功能:
function move($loc, $deltaX, $deltaY) {
$loc['x'] = ($loc['x'] + 10 + $deltaX) % 10;
$loc['y'] = ($loc['y'] + 10 + $deltaY) % 10;
return $loc;
}