【发布时间】:2015-02-07 00:08:53
【问题描述】:
所以,我正在开发一个大型编程项目 1。我不知道如何使用网站上提供的任何其他方式来停止无限 while 循环。以下是涉及玩家移动的所有方法:
public boolean movement(Move m, int moved){
int rowM, colM, row, col;
Player p = m.getPlayer();
if (moved == 0 || moved == 1 || moved == 7)
rowM = -1;
if (moved == 2 || moved == 6)
rowM = 0;
if (moved == 3 || moved == 4 || moved == 5)
rowM = 1;
else
rowM = 0;
if (moved == 5 || moved == 6 || moved == 7)
colM = -1;
if (moved == 0 || moved == 4)
colM = 0;
if (moved == 1 || moved == 2 || moved == 3)
colM = 1;
else
colM = 0;
row = rowM + m.getRow();
col = colM + m.getColumn();
if (!onBoard(row, col) || !getPiece(row, col).opposite(p.getPiece()))
return false;
while ((onBoard(row,col))&&(getPiece(row,col).opposite(p.getPiece()))){
row += rowM;
col += colM;
}
if (onBoard(row, col) && getPiece(row, col).opposite(p.getPiece()))
return true;
return false;
}
private void change(Move m, int moved){
int rowM, colM, row, col;
Player p = m.getPlayer();
if (moved == 0 || moved == 1 || moved == 7)
rowM = -1;
if (moved == 2 || moved == 6)
rowM = 0;
if (moved == 3 || moved == 4 || moved == 5)
rowM = 1;
else
rowM = 0;
if (moved == 5 || moved == 6 || moved == 7)
colM = -1;
if (moved == 0 || moved == 4)
colM = 0;
if (moved == 1 || moved == 2 || moved == 3)
colM = 1;
else
colM = 0;
row = rowM + m.getRow();
col = colM + m.getColumn();
while (getPiece(row, col).opposite(p.getPiece())){
setPiece(p.getPiece(), row, col);
row += rowM;
col += colM;
}
}
public void makeMove(Move move){
Player p = move.getPlayer();
for (int c = 0; c < 8; c++){
if (movement(move, c))
change(move, c);
}
setPiece(p.getPiece(), move.getRow(), move.getColumn());
}
public int handleTurn(Display display){
Move m = display.getMove(this.current);
if (!moveLegal(m)){
display. displayMessage("Illegal Move!");
return 1;
}
makeMove(m);
Player p = getNextPlayer();
if (p == current)
display.displayMessage("Skipped! " + other.getName().toString());
if (gameOver())
return -1;
else {
other = current;
current = p;
}
display.displayStatus(current, "Your Move!");
return 0;
}
【问题讨论】:
-
什么死循环在哪里?你试过调试器吗?
-
我就是这样找到它的。就是运动方式。
-
检查方法 onBoard(row, col) 和 getPiece 这些有什么作用?
标签: java while-loop logic infinite-loop