2011-06-29 5 views
1

私は人気のあるインディーズゲームMinecraft用のサーバープラグインを作成しようとしています。私が今まで持っているのは、プレイヤーの位置から2ブロック離れたブロックをすべて見つけるという再帰的な方法ではありません。私はこれを効率的に行う方法を作りたいと考えています。私は距離を指定できるようにしたいと思います。ここに私が現在持っているものがあります:円内のすべてのブロックをグリッド内で見つける方法はありますか?

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); 

私を助けてもらえますか?ありがとうございました。

+0

http://gamedev.stackexchange.com/ – Giann

+3

に所属しています。質問自体はゲーム関連ではないので、stackoverflowにはうまく収まると思います。 – aioobe

+0

サークル、またはスクエアを取得しようとしていますか? – corsiKa

答えて

2

私が問題を正しく理解していれば、原点から与えられたマンハッタン距離dで2次元正方形グリッド上のすべての点を見つける非再帰的アルゴリズムが必要です。これらの点は、タイル状の四角形の上にあり、簡単に順番に生成することができます。たとえば:

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()あなたのアクションの内部でコーディングする必要がある

(1, 1) 
(0, 2) 
(-1, 1) 
(-2, 0) 
(-1,-1) 
(0,-2) 
(1,-1) 
(2, 0) 

を印刷します。

+0

ありがとう。これは私が探していたものです。私はあなたのクレジットをあなたのmodで与えます。 – Ashtheking

関連する問題