Android游戏 - 尝试创建阵列失败?

时间:2013-04-27 20:30:29

标签: java android arrays object grid

我目前正在开始使用Java。因此,当我一直在尝试开发一些扫雷应用程序时,我注意到,当尝试将坐标添加到“Mines []”数组时,调试窗口打开,我的应用程序不会继续显示目标的Minefield。

这就是我的代码:

package com.ochs.minesweeper;

public class MineField {

public Mine[] mines;

public MineField(int xMines, int yMines) {
    mines = new Mine[xMines*yMines];
    int xCounter = 0;
    int yCounter = 0;
    for(int i = 0; i < yMines; i++) {
        for(int j = 0; j < xMines; j++) {
            mines[i*j].setX(xCounter);
            mines[i*j].setY(yCounter);
            xCounter += 100;
        }yCounter += 100;
    }
}   
}

即使我只是尝试这样的事情:

for(int i = 0; i < xMines*yMines; i++) {
    mines[i].setX(2);
} 

或类似的东西似乎我不能在我的数组中使用for循环的变量来处理......

有谁知道我做错了什么?我只想让我的MineField拥有它的Mine []数组。这个地雷都是在具有不同坐标的for循环中创建的,因此它们可以在我的surfaceview上的网格中显示。 有没有人有想法?或者也许是另一种解决方案,我可以在我的示例矿山中创建一个简单的对象网格?

提前致谢!

2 个答案:

答案 0 :(得分:1)

为什么不使用二维数组?您可以定义Mine[][] mines,然后在循环中定义:

 for(int i = 0; i < yMines; i++) {
        for(int j = 0; j < xMines; j++) {
            mines[i][j].setX(xCounter);
            mines[i][j].setY(yCounter);
            xCounter += 100;
        }yCounter += 100;
    }

答案 1 :(得分:1)

在这段代码中设置坐标的位置存在问题:

mines[i*j].setX(xCounter);
mines[i*j].setY(yCounter);

例如,坐标(x = 2,y = 3)和(x = 3,y = 2)指的是网格上的不同位置,但是2 * 3 = 6和3 * 2 = 6。你需要稍微复杂的逻辑来获得每个坐标的唯一索引(semihyagcioglu的方法要好得多):

public MineField(int xMines, int yMines) {
mines = new Mine[xMines*yMines];
int xCounter = 0;
int yCounter = 0;
for(int i = 0; i < yMines; i++) {
    for(int j = 0; j < xMines; j++) {
        mines[i+(j*yMines)].setX(xCounter);
        mines[i+(j*yMines)].setY(yCounter);
        xCounter += 100;
    }yCounter += 100;
}
}  

应用程序崩溃的原因是您需要在Mine[]数组中实例化每个我的对象,然后再尝试在其上调用setX()setY()

for (int i=0; i< (xMines*yMines); i++)
  Mine[i] = new Mine();