我正在制作游戏。在游戏中有一个由单元格填充的网格。每个细胞都有一个伙伴(相同类型的细胞)。总共应该有 24 个单元格,这意味着 12 对不同的单元格。例如,一个单元格可以是类型 1,网格上将有两个类型 1 的单元格。 一直到12型。 我试图用我的代码实现的是随机生成一行和一列,然后在其上放置一个类型 1 的单元格。再次,生成随机行和列并在其上放置类型 1 单元格。 然后增加类型。
现在我正在苦苦挣扎的是确保我的整个网格完全填充单元格的条件。 还有一个条件,确保一旦一个单元格被放置在网格上的一个点上,它就不能被另一个单元格替换。
这是我现在想出的代码。
int type =1;
int row=0;
int column=0;
board[row][column] = new Cell(this, type, row, column);
while(board[row][column] != null){
if(type <=12){
row = generator.nextInt(4);
column = generator.nextInt(6);
board[row][column] = new Cell(this, type, row, column);
type++;
if (type < 13){
row = generator.nextInt(4);
column = generator.nextInt(6);
board[row][column] = new Cell(this, type, row, column);
row = generator.nextInt(4);
column = generator.nextInt(6);
board[row][column] = new Cell(this, type, row, column);
add(board[row][column]);} //Adding a Cell object **board is a 2d array of type Cell**
}
}
}
尽量用最简单的语言解释问题
最佳答案
比随机添加项目更好的方法是以直接的方式填充数组,然后将其随机化,但没有简单的方法可以做到这一点。
您可以做一件等效的事情:创建一个包含所有必需值的 List
,randomly shuffle
List
,然后从中填充您的数组,将 List 中的条目映射到数组中的行和列:
List<Integer> list = new ArrayList<Integer>(24);
for (int type = 1; type <= 12; type++) {
//Add each type twice
list.add(type);
list.add(type);
}
Collections.shuffle(list);
int[][] board = new int[4][6];
for (int row = 0; row < 4; row++) {
for (int column = 0; column < 6; column++) {
int type = list.get(row + column * 4);
board[row][column] = new Cell(this, type, row, column);
}
}
行和列到 List 条目的映射并不是那么重要,只要您只使用洗牌后的 List 中的每个条目一次即可,因此您可以这样做:
Iterator<Integer> i = list.iterator();
for (int row = 0; row < 4; row++) {
for (int column = 0; column < 6; column++) {
int type = i.next();
board[row][column] = new Cell(this, type, row, column);
}
}
关于JAVA需要一个条件判断整个二维数组是否满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461166/