C++ 在网格游戏中找到所有可射击的单元格

C++ 在网格游戏中找到所有可射击的单元格,c++,algorithm,game-engine,C++,Algorithm,Game Engine,我正在制作简单的网格,游戏网格是矩阵128x128,矩阵中填充了0和1,1子弹可以通过,0子弹不能通过,不能继续移动,我还有子弹射程32个单元格。 例如,我站在位置32,89。有谁能给我推荐一种计算所有可射击场的有效算法吗?我知道用简单的方法计算,简单地检查范围内的每个字段,但我想知道是否有更好的方法。不幸的是,没有更好的方法了 这将是可能的,如果你将拍摄的点在列表中的位置。在这种情况下,可以通过从列表中删除其他元素来消除一些检查 如果网格未更改,则可以对每个位置进行评估,并保存以备将来使用。

我正在制作简单的网格,游戏网格是矩阵128x128,矩阵中填充了0和1,1子弹可以通过,0子弹不能通过,不能继续移动,我还有子弹射程32个单元格。
例如,我站在位置32,89。有谁能给我推荐一种计算所有可射击场的有效算法吗?我知道用简单的方法计算,简单地检查范围内的每个字段,但我想知道是否有更好的方法。不幸的是,没有更好的方法了

这将是可能的,如果你将拍摄的点在列表中的位置。在这种情况下,可以通过从列表中删除其他元素来消除一些检查

如果网格未更改,则可以对每个位置进行评估,并保存以备将来使用。 这将使用128*128*2pi*范围内存,大约4MB。
如果是这种情况,您可以为每个可能的角度保存它,结果是最大2pi*范围=202个位置,然后执行202次检查,而不是以前需要的102432*32。

不幸的是,没有更好的方法

这将是可能的,如果你将拍摄的点在列表中的位置。在这种情况下,可以通过从列表中删除其他元素来消除一些检查

如果网格未更改,则可以对每个位置进行评估,并保存以备将来使用。 这将使用128*128*2pi*范围内存,大约4MB。
如果是这种情况,您可以为每个可能的角度保存它,结果是最大2pi*范围=202个位置,然后执行202次检查,而不是以前需要的102432*32。

有一个更有效的算法。Eric Lippert写了一个关于网格游戏中阴影投射的优秀系列。如果我理解正确,这正是你需要的


有一种更有效的算法。Eric Lippert写了一个关于网格游戏中阴影投射的优秀系列。如果我理解正确,这正是你需要的


子弹是否只在离散的方向上移动?你只能以90°或45°的角度射击吗?子弹只能以离散的方向飞行吗?你只能以90°或45°的角度拍摄吗?