Я создал простую консольную игру Scrabble с использованием Python. Я попытался максимально инкапсулировать игровую модель из ввода-вывода, то есть я создал несколько классов для описания игры с ее правилами и текущим состоянием. В основном я придумал следующие классы:
LetterSet
: для описания плиток в игре (счет, общая сумма и т. Д.) Board
: представление доски с ее плитками и вспомогательными элементами functions Player
: виртуальный класс для создания подкласса реальных классов, таких как Human или Bot, получил один метод play ()
, который должен возвращать ход игрока Game
: Ну .. .Все работает нормально, используя простой линейный и синхронный поток с моим консольным приложением.
Но оказалось, что не так просто перенести эту концепцию на Qt. Я создал все необходимые виджеты, такие как перетаскиваемая доска, общие визуальные элементы, описывающие состояние игры, и простые кнопки, такие как «Пройти», «Продолжить», «Обмен».
Проблема в том, что я не знаю, как это сделать. обработать метод play ()
, который может использовать созданный мной интерфейс Qt для генерации допустимого хода. Это не проблема для бота
, который просто ищет ход без какого-либо взаимодействия.
Моя текущая идея - создать локальный цикл событий, как описано здесь , и дождаться кнопки для нажатия в моем методе play ()
, определенном в Human (Bot)
. Это довольно уродливо, поэтому мне интересно, есть ли лучший способ сделать это.
Я бы хотел, чтобы основная логика была такой же, например, класс Player
обслуживает метод play ()
, который генерирует ход и возвращает его. Таким образом, должно быть возможно создание любого типа Player
, например сетевых игроков или ботов. Этот синхронный способ сделать это не очень хорошо работает с основанным на Qt способом работы с сигналами / слотами. Надеюсь, у кого-то есть отличная идея решить мою проблему.
Резюме: Как сгенерировать ход Player
внутри его метода play ()
и вернуть его как простой move = player.play (game)
вызов?
Изменить: Снимок, чтобы понять, о чем я говорю:
(источник: b52 на reaktor42.de )
Edit2: Это довольно давно, и я успешно выполнил задание около двух лет назад. Тем не менее, я подумал, что это может быть полезно для других, если я опубликую результаты через github .
Заранее спасибо, Оли