我本质上是在尝试制作一个程序来决定在10x10网格上放置一块(俄罗斯方块式)的最佳位置。我通过空位的数量确定给定游戏状态中的最佳位置(越多越好)。完整的行和列清除。我的方法insertPiece(grid,piece,x,y)似乎在我的findBestMove方法中改变了网格变量,因为下一次迭代包含了这个部分。
public static int[][] findBestMove(int[][] grid,Piece piece){
int mostEmpty = 0;
int bestX = 0;
int bestY = 0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(isPlaceable(grid,piece,i,j)){
int[][] temp = insertPiece(grid,piece,i,j);
if(countEmpty(temp)>mostEmpty){
bestX = i;
bestY = j;
}
}
}
}
int[][] temp = insertPiece(grid,piece,bestX,bestY);
return clearRows(temp);
}
public static int[][] insertPiece(int[][] grid, Piece piece, int x, int y){
printGrid(grid);
int[][] pieceGrid = piece.getGrid();
for(int i=0;i<pieceGrid.length;i++){
for(int j=0;j<pieceGrid[i].length;j++){
try {
if (grid[i + x][j + y] < pieceGrid[i][j]) {
grid[i + x][j + y] = pieceGrid[i][j];
} else if (grid[i + x][j + y] == 1) {
break;
}
}
catch(Exception e){
// break;
}
}
}
printGrid(grid);
return grid;
}
这是最终印刷品的样子
0000000000
0100100100
1111111110
0100100100
1111111110
0100100100
1111111110
0100100100
1111111110
0000000000
这是插件
int[][] gridPyramid = {{0,0,0},
{0,1,0},
{1,1,1}};
我遗漏了大量的代码以避免使帖子混乱,如果您需要任何澄清,请告诉我
答案 0 :(得分:0)
您实际上正在更改网格:
grid[i + x][j + y] = pieceGrid[i][j];