存储卡游戏的坐标生成

时间:2014-09-10 10:49:24

标签: java android coordinates andengine

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

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

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

然后你可以在第x行和第y列访问你的卡片,如下所示:

MemoryCard card = cards[x][y];

答案 2 :(得分:1)

听起来好像使用2D阵列会更容易维护和可视化位置,例如

Objects[][] memoryCards;

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