在java中随机播放2D数组的顺序

时间:2015-01-03 16:13:30

标签: java arrays shuffle

我正在创建自己的记忆游戏。到目前为止,一切进展顺利。只是为了让你知道我正在使用Java处理。我创建了一个2暗淡的PImage数组。这是填充2D数组的代码:

int g = 0;
for(int i = 0; i < 4; i++) {
 for (int j = 0; j < 6; j++) {
  if (j % 2 == 0) {
    kaart[i][j] = loadImage( g + ".jpg" );
    kaart[i][j].resize(vlakGrootte - 1, vlakGrootte - 1);
    g++;
  } else if (j % 2 == 1) {
    kaart[i][j] = kaart[i][j-1];
  }
 }
}

我想要洗牌这个数组中的项目。似乎java集合不支持对2D PImage数组进行洗牌?如果我错了请纠正我。

感谢大家帮助我。

2 个答案:

答案 0 :(得分:2)

1) .Shuffle per - outter索引:

 YourType [][] kaart = new YourType [..][..];

     List <YourType[]> list = (List<YourType[]> ) Arrays.asList(kaart);
     Collections.shuffle(list);
     kaart = (YourType[][]) list.toArray(new YourType[0][]);//convert back to a array 

     // just for checking 
     for(YourType[] k:kaart ){System.out.println(Arrays.toString(k));}

YourType替换为kaart的类型。

<强> 2)即可。每次随机播放 - Outter+Inner索引:

YourType[][] kaart = new YourType[..][..];

     List<YourType[]> temp = new ArrayList<>();

     for(YourType[] k:kaart ){
         List <YourType> list = (List<YourType> ) Arrays.asList(k);
         Collections.shuffle(list);//shuffle  
         YourType[] tempArray = (YourType[]) list.toArray();
         temp.add(tempArray);

     }
     Collections.shuffle(temp);
     kaart= (YourType[][]) temp.toArray(new YourType[0][]);//convert back to a array 

         // just for checking 
     for(YourType[] k:kaart ){System.out.println(Arrays.toString(k)); }

YourType替换为kaart的类型。

第3)即可。在The easiest way中随机播放:

只需将所有元素放入一个List,然后调用Collections.shuffle()

答案 1 :(得分:1)

我会像在现实世界中处理这些卡片一样。首先你洗牌:

ArrayList<Integer> pieces = new ArrayList<Integer>();
for (int i = 0; i < 4 * 6 / 2; i++) {
    for (int j = 0; j < 2; j++) {
        pieces.add(i);
    }
}
Collections.shuffle(pieces);

然后你从洗牌后的牌中发牌:

for(int i = 0; i < 4; i++) {
 for (int j = 0; j < 6; j++) {
    int g = pieces.remove(pieces.size()-1);
    kaart[i][j] = loadImage( g + ".jpg" );
    kaart[i][j].resize(vlakGrootte - 1, vlakGrootte - 1);
 }
}