存储卡游戏的坐标生成

存储卡游戏的坐标生成

问题描述:

如何生成存储卡游戏的(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,可以使程序生成适当的位置?或者其他任何偶对。

可以翻译容易...

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

马丁弗兰克已经提供了正确的回答你的问题,但我想提出另一种解决方案。为什么不使用2D数组,而不是将行和列序列化到一维数组列表中?

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

然后你就可以在行x和y列访问您的卡就像这样:

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

我会尝试这样做。直到现在,我甚至都不知道2D阵列 – 2014-09-10 11:01:07

听起来这将是更好地使用二维数组,这将是更容易维护和可视化位置,像

Objects[][] memoryCards; 

然后填充它,你只需使用你的循环。