2014-09-10 106 views
0

如何生成存儲卡遊戲的(x,y)座標?比方說,我可以設置卡片,行和列的數量。我的for循環如何看起來像?存儲卡遊戲的座標生成

我的總體思路是:

final int ROWS = 4; 
final int COLUMNS = 5; 

for(int i = 0; i<ROWS; i++){ 

    for(int j = 0; j<COLUMNS; j++){ 
     //calculate X coordinate 
     int index = some_calculation 
     MemoryCard memoryCard = new MemoryCard(x, y, index); 
    } 
    //calculate y coordinate 
} 

不過,我有一個問題在這裏創建我的對象。上述循環對i來說是4次,對j來說是5次。所以總共有20個物體在那裏。但是,我如何得到我的對象的索引? 比方說,我有我的對象的數組列表:

private ArrayList<MemoryCard> objects = new ArrayList<MemoryCard>(); 
//parameters for MemoryCard object are (float x, float y, Texture frontImage) 

有沒有辦法讓這個充滿活力?如果我將ROWS的數量設置爲3並將COLUMS設置爲6,可以使程序生成適當的位置?或者其他任何偶對。

回答

2

可以翻譯容易...

public int getIndexOf(int x, int y){ 
    return x + y * ROWS; 
} 

和恢復,以及...

public int getXFromIndex(int index){ 
    return index%ROWS; 
} 

public int getYFromIndex(int index){ 
    return index/ROWS; 
} 
+0

謝謝,最終我選擇了這個解決方案,它似乎工作! – 2014-09-10 11:30:55

+0

我很高興我可以幫助 - 我整天使用這種轉換,用於存儲到稀疏陣列中的大瓦片地圖... – 2014-09-10 11:31:43

2

馬丁弗蘭克已經提供了正確的回答你的問題,但我想提出另一種解決方案。爲什麼不使用2D數組,而不是將行和列序列化到一維數組列表中?

MemoryCard[][] cards = new MemoryCard[ROWS][COLUMNS]; 

然後你就可以在行x和y列訪問您的卡就像這樣:

MemoryCard card = cards[x][y]; 
+0

我會嘗試這樣做。直到現在,我甚至都不知道2D陣列 – 2014-09-10 11:01:07

1

聽起來這將是更好地使用二維數組,這將是更容易維護和可視化位置,像

Objects[][] memoryCards; 

然後填充它,你只需使用你的循環。