Java 如何找到一个圆、一个网格中的所有块?
我正在尝试为流行的独立游戏Minecraft创建一个服务器插件。到目前为止,我所拥有的是一种非递归的方法,它可以找到距离玩家位置2个空格以外的所有块。我希望创建一种方法来有效地做到这一点。我希望能够指定距离。以下是我目前的情况:Java 如何找到一个圆、一个网格中的所有块?,java,game-development,minecraft,Java,Game Development,Minecraft,我正在尝试为流行的独立游戏Minecraft创建一个服务器插件。到目前为止,我所拥有的是一种非递归的方法,它可以找到距离玩家位置2个空格以外的所有块。我希望创建一种方法来有效地做到这一点。我希望能够指定距离。以下是我目前的情况: Block b = player.getLocation().getBlock(); b.getRelative(BlockFace.NORTH).getRelative(BlockFace.NORTH).setType(Material.FIRE); b.getRel
Block b = player.getLocation().getBlock();
b.getRelative(BlockFace.NORTH).getRelative(BlockFace.NORTH).setType(Material.FIRE);
b.getRelative(BlockFace.NORTH).getRelative(BlockFace.EAST).setType(Material.FIRE);
b.getRelative(BlockFace.EAST).getRelative(BlockFace.EAST).setType(Material.FIRE);
b.getRelative(BlockFace.EAST).getRelative(BlockFace.SOUTH).setType(Material.FIRE);
b.getRelative(BlockFace.WEST).getRelative(BlockFace.WEST).setType(Material.FIRE);
b.getRelative(BlockFace.SOUTH).getRelative(BlockFace.SOUTH).setType(Material.FIRE);
b.getRelative(BlockFace.SOUTH).getRelative(BlockFace.WEST).setType(Material.FIRE);
b.getRelative(BlockFace.NORTH).getRelative(BlockFace.WEST).setType(Material.FIRE);
你能帮我吗?谢谢。如果我正确理解了这个问题,您需要一个非递归算法来查找二维正方形网格上距离原点给定曼哈顿距离
d
的所有点。这些点位于平铺的正方形上,可以很容易地按顺序生成。例如:
public class Points {
public static void points(int d) {
int px = d;
int py = 0;
int dx = -1, dy = 1;
int n = d * 4;
for( int i = 0; i < n; i++ ) {
if( px == d && dx > 0 ) dx = -1;
else if( px == -d && dx < 0 ) dx = 1;
if( py == d && dy > 0 ) dy = -1;
else if( py == -d && dy < 0 ) dy = 1;
px += dx;
py += dy;
doSomething(px, py);
}
}
private static void doSomething(int px, int py) {
System.out.printf("(%2d,%2d)\n", px, py);
// do whatever you need
}
public static void main(String[] args) {
points(2);
}
}
根据传递的坐标,您只需在
doSomething()
内编码您的操作。属于stackoverflow,我认为它非常适合,因为问题本身与游戏无关。您是想得到一个圆还是一个正方形?最好将其定义为带换行符的ASCII字符串,然后对其进行解析(使用块类型的符号)。这样会更清楚:)谢谢。这正是我要找的。我会在我的国防部给你应得的学分。
( 1, 1)
( 0, 2)
(-1, 1)
(-2, 0)
(-1,-1)
( 0,-2)
( 1,-1)
( 2, 0)