Java 2D пошаговое программирование: обработка 2 клика мышью на игрока - PullRequest
3 голосов
/ 13 марта 2010

Итак, предположим, что я разрабатываю шахматную программу с использованием Java Swing. Я добавил MouseListener для обработки пользовательского ввода. Чтобы сделать ход, пользователь должен щелкнуть действительный фрагмент, а затем щелкнуть действительное место. Какой лучший способ отследить 2 щелчка мышью за ход? Я подумываю использовать какую-то переменную для записи, если это первый щелчок хода или второй.

Ответы [ 2 ]

5 голосов
/ 13 марта 2010

Вы должны различать два игровых состояния, хорошо использовать переменную. Вы также можете подумать о чем-то, как предлагается в комментарии 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;
  }
}
2 голосов
/ 13 марта 2010

Ой, я ответил слишком быстро. Да, структура, которая кодирует местоположение щелчка, ищет промежуточные события движения и затем записывает второй щелчок. Должно быть инициированное состояние, состояние принятия, и оно, вероятно, должно записывать состояние прерывания (возможно, нажатие ESC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...