我做了一个8-puzzle游戏。我发现我的争夺方法有一些问题,但我不知道如何解决它。 有没有人可以帮助我的代码?这是争夺方法代码。我的代码问题是,在我点击了加扰按钮后,数字只会是两个数字图片,然后再点击加扰,它只显示9个按钮中的一个数字。
public void scramble()
{
for(int i = 0; i <SHUFFLE_NUM; i++)
{
int x1 = rand.nextInt(BOARD_SIZE);
int x2 = rand.nextInt(BOARD_SIZE);
int y1 = rand.nextInt(BOARD_SIZE);
int y2 = rand.nextInt(BOARD_SIZE);
Piece temp = board[x1][y1];
board [x1][y1] = board[x2][y2];
board[x1][y2] = temp;
}
}
的更新 的
在这里我发现另一个错误,在我点击重置按钮后,当我尝试移动我的数字按钮时,移动步骤是错误的。在这里我附上我的移动方法和重置方法
public boolean move(int _x, int _y)
{
boolean valid = false;
if(_x == currentCol-1 && _y == currentRow ) // on the left of empty one
valid = true;
else if(_x == currentCol+1&&_y == currentRow) //on the right of empty one
valid = true;
else if(_x == currentCol&&_y == currentRow-1) // on the top of empty one
valid = true;
else if(_x == currentCol &&_y == currentRow +1) // on the bottom of empty one
valid = true;
if(valid)
{
Piece temp;
temp = board[_x][_y];
board[_x][_y] = board[currentCol][currentRow];
board[currentCol][currentRow] = temp;
currentCol = _x;
currentRow = _y;
}
return valid;
}
这里是重置方法
public void reset()
{
for(int i =0; i<BOARD_SIZE; i++)
for(int j =0; j<BOARD_SIZE; j++)
{
int value = i*BOARD_SIZE+j+1 ;
String filePath;
if(value!= BOARD_SIZE*BOARD_SIZE)
filePath = "Piece" + value +".jpg"; //what is this mean?
else
filePath = "blank piece.jpg";
board[i][j]= new Piece(new ImageIcon(filePath),i, j, value);
}
}
如果我没有点击重置按钮,移动是正确的工作..
答案 0 :(得分:5)
虽然我相信答案很明显,但我真的不想告诉你。
相反,我建议你学习如何调试。
拥有像Eclipse这样的现代IDE,要么有单元测试,要么有一点应用程序。打开调试模式,然后运行你的代码。
在for循环中添加一个断点,逐步执行它,并检查变量和board
的变化。你很容易知道答案。
答案 1 :(得分:3)
board[x1][y2] = temp;
不应该是
board[x2][y2] = temp;
<强>更新强>
在您调用reset()
方法后,您的currentCol
和currentRow
变量将出错;你需要更新它们以指向新的空白部分。在退出方法之前添加它:
currentCol = BOARD_SIZE - 1;
currentRow = BOARD_SIZE - 1;
答案 2 :(得分:2)
您的交换代码有点不对......
Piece temp = board[x1][y1];
board [x1][y1] = board[x2][y2];
board[x1][y2] = temp; // You're mapping the wrong x position here
应该阅读
Piece temp = board[x1][y1];
board [x1][y1] = board[x2][y2];
board[x2][y2] = temp;