Это не так уж плохо. Одна вещь, которую вы могли бы сделать - отделить вход для чтения от игры на основе этого ввода:
private static class GameMove {
int x;
int y;
boolean switchFlagPlacingMode;
}
private GameMove readNextMove() {
// read in using the scanner
// and validate the coordinates
}
Другое дело - while(true)
определенно является запахом кода, как и число continue
, break
, и return
операторов, которые у вас есть - они затрудняют отслеживание кода. Рассмотрим что-то вроде
boolean gameOver = false;
while(!gameOver) {
boolean isMoveValid = false;
GameMove nextMove = readNextMove();
while(!isMoveValid) {
// validate, set isMoveValid
// if invalid: nextMove = readNextMove();
}
// process the move
if (isWin()) {
this.win();
gameOver = true;
}
// similar for loss
}