Как совместить прослушиватели событий с запросом на событие?
Я написал простую игру с маленькими лабиринтами для терминала, который неоднократно просит пользователя что-то сделать (например, «В каком направлении вы хотели бы пойти? [N / E / S / W]»). У меня есть метод navigate()
запущенный в цикле, который устраняет эти вопросы, сохраняет ответы и делает что-то в зависимости от ответа.
public enum Dir (N, E, S, W); public void navigate() { Dir nextDir = utils.askDirection("Which way do you want to go?"); // Do stuff with answer, like changing position of user in maze }
Теперь я написал простой графический интерфейс для своей игры. Я намеренно помещаю все ссылки на терминал в classе ConsoleUtils
который реализует интерфейс Utils
(у этого есть методы, такие как askQuestion()
) – идея состоит в том, что я мог бы создать class GuiUtils
и иметь свою игру либо как терминальную игру, либо как GUI-игра.
Проблема заключается в том, что метод navigate
задает пользователю вопрос и затем «ждет» ответа, который class Utils
дает ему, используя Scanner
для чтения последней строки ввода. Однако, если я использую Listen Listers для новых кнопок N / E / S / W в моем графическом интерфейсе, они запускают события независимо от того, запросил ли метод navigate
один или нет. -> Изображение GUI
- Выбор нескольких строк в JTable
- Доступ к компонентам GUI из другого classа
- Безопасно ли создавать виджеты Swing / AWT NOT на тему Dispatch Event?
- Как я могу улучшить внешний вид приложения для Android?
- Как обновить текстовое поле в графическом интерфейсе из другого streamа
Есть ли способ объединить это или мне нужно написать новый метод navigate
для графического интерфейса?
(Честно говоря, я также не совсем уверен, должен ли мой class GUI создавать экземпляр classа game
, и в этом случае логика navigate
может в конечном итоге оказаться в GUI-методе или должна ли игра иметь графический интерфейс. t написал какой-либо код для прослушивателя событий еще, так как я не уверен, какой class должен называть это. Это, вероятно, отдельный вопрос.)
- Создать редактор гитарных аккордов в WPF (из RichTextBox?)
- java - Как бы я динамически добавлял компонент swing в gui при нажатии?
- Возможно ли программирование графического интерфейса?
- Как сделать фотокамеру доступным?
- как изменить пользовательский интерфейс в зависимости от выбора поля со списком
- Repeater, ListView, DataList, DataGrid, GridView ... Что выбрать?
- process.WaitForExit () асинхронно
- Переместить макеты, когда отображается мягкая клавиатура?
В вашей текстовой игре есть цикл, который неоднократно задает вопросы для сбора пользовательского ввода. Swing предоставляет этот цикл для вас, постоянно выполняя Runnable
блоки кода, которые были отправлены в EventQueue
. Например, когда пользователь нажимает кнопку с надписью E , код отправляется в очередь, которая вызывает вашу реализацию ActionEvent
чтобы обрабатывать интерпретацию вашей игрой команды move east
.
Для справки здесь рассматривается полный пример очень простой игры угадывания. В псевдокоде соответствующая текстовая игра может выглядеть так:
initialize loop prompt "Guess what color!" get chosenColor if chosenColor = actualColor say "You win!" reset game else say "Keep trying." end loop
Более сложная игра, в которой он цитируется, включает исходный источник на основе текста.