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