2013-04-27 60 views
0

我目前開始支持Java。所以當我一直在嘗試開發一些掃雷應用程序時,我注意到當試圖向「Mines []」數組添加座標時,打開調試窗口,我的應用程序不會繼續顯示目標雷區。Android遊戲 - 試圖創建一個數組失敗?

所以這是我的代碼:

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的網格中顯示出來。 有沒有人有想法?或者,也許另一個解決方案,我可以如何創建一個簡單的對象網格,在我的例子礦?

在此先感謝!

+0

'打開調試窗口' - ? – Simon 2013-04-27 20:48:04

回答

1

爲什麼不使用2維數組?您可以定義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

有一個與你在哪裏在該位的代碼設置座標的問題:

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