1

私は今配列を持っています、

    static int[][] map = new int[WIDTH][HEIGHT];

このコードは、マップ上にタイルを配置します。

for (int y = 18; y < HEIGHT; y++) {
        for (int x = 0; x < WIDTH; x++) {
            map[x][y] = STONE;
        }

    }

    for (int y = 18; y < 19; y++) {
        for (int x = 0; x < WIDTH; x++) {
            map[x][y] = GRASS;
        }

    }

    for (int y = 19; y < 20; y++) {
        for (int x = 0; x < WIDTH; x++) {
            map[x][y] = DIRT;
        }

    }

そして、これが私がそれらをレンダリングする方法です:

for (int x = 0; x < WIDTH; x++) {
        for (int y = 0; y < HEIGHT; y++) {
            switch (map[x][y]) {
            case CLEAR:
                air.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
                break;
            case STONE:
                stone.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
                break;
            case GRASS:
                grass.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
                break;
            case DIRT:
                dirt.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
                break;
            }
        }
    }

このコードを変換して、配列マップを 2 次元の配列リストに置き換えて、Minecraft のようにこれらのタイルを削除するにはどうすればよいですか?

4

2 に答える 2

3

試す

ArrayList<ArrayList<Integer>> map = new ArrayList<ArrayList<Integer>>();

基本的に、整数のリストである配列リストの配列リストを作成します。

于 2012-11-10T00:34:09.130 に答える
1

個人的には、これを単一Listの で行い、計算を使用してどのタイルを見ているかを判断します。

List<Integer> map = new ArrayList<Integer>(WIDTH * HEIGHT);

興味のあるインデックスを見つけるには、次のようにします。

//note that this is 0 based

//find (0,0)
map.get(0 * WIDTH  + 0);

//find (0,1)
map.get(0 * WIDTH  + 1);

//find (1,0)
map.get(1 * WIDTH  + 0);

//In general
//find (x,y)
map.get(x * WIDTH  + y);

次に、同じ計算を利用して、 に値を設定できますList

map.set(x * WIDTH + y, STONE);
于 2012-11-10T00:39:03.800 に答える