存储卡游戏的坐标生成
问题描述:
如何生成存储卡游戏的(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;
}
答
马丁弗兰克已经提供了正确的回答你的问题,但我想提出另一种解决方案。为什么不使用2D数组,而不是将行和列序列化到一维数组列表中?
MemoryCard[][] cards = new MemoryCard[ROWS][COLUMNS];
然后你就可以在行x和y列访问您的卡就像这样:
MemoryCard card = cards[x][y];
+0
我会尝试这样做。直到现在,我甚至都不知道2D阵列 – 2014-09-10 11:01:07
答
听起来这将是更好地使用二维数组,这将是更容易维护和可视化位置,像
Objects[][] memoryCards;
然后填充它,你只需使用你的循环。
谢谢,最终我选择了这个解决方案,它似乎工作! – 2014-09-10 11:30:55
我很高兴我可以帮助 - 我整天使用这种转换,用于存储到稀疏阵列中的大瓦片地图... – 2014-09-10 11:31:43