Вы должны различать два игровых состояния, хорошо использовать переменную. Вы также можете подумать о чем-то, как предлагается в комментарии NomeN, и использовать двух разных слушателей, меняя их местами.
Ваш случай довольно прост, но в целом формализм, который вы используете для обработки этих вещей, является своего рода конечным автоматом , который описывает состояния вашей игры и способ перехода от одного к другому.
В этом случае вы можете иметь несколько состояний, таких как:
- игрок 1 ход
- игрок 2 хода
- главный экран
- экран паузы
- дополнительный экран
и вы решаете, как и когда переходить из одного состояния в другое, например
- после перемещения игрока1 вы переходите на ход игрока2
- после того, как игрок2 переместится, вы вернетесь к игроку 1 ход
- при запуске игры вы переходите на главный экран
- если вы начинаете новую игру, то вы переходите к игроку 1 ход
- если вы нажмете кнопку паузы во время игры, вы перейдете от экрана к повороту на паузу, а когда закроетесь, вернетесь к повороту, который шел до паузы
Это просто для того, чтобы дать вам представление, например, ваш MouseListener
может заботиться о состояниях:
enum State { TURN_P1, TURN_P2, MAIN, PAUSE, ... }
public State gameState
...
public void mouseClicked(MouseEvent e)
{
if (gameState == TURN_P1)
{
...
if (move_is_legal and so on)
gameState = TURN_P2;
}
else if (gameState == TURN_P2)
{
...
if (move_is_legal and so on)
gameState = TURN_P1;
}
}