Сочетание пигмеев и витых - PullRequest
3 голосов
/ 05 декабря 2011

После вчерашнего дня плохо выбранный вопрос, который я пытаюсь повторить.

У меня есть программа Tic Tac Toe в работах исключительно с целью изучения сетевой игры.

Насколько я понимаю, в витой форме мне нужно, чтобы класс сервера управлял реактором, а затем каждый игрок подключался к нему в качестве клиента (сервер был отдельной сущностью).Учитывая комментарии в моем последнем вопросе, я подозреваю, что я поступаю об этом совершенно неправильно.

Что я должен делать, и на какие учебники или документацию мне следует обратить внимание?

1 Ответ

12 голосов
/ 05 декабря 2011

Сложность комбинирования пигмеев с витыми заключается в том, кто контролирует основной цикл. Обычно это приводит к желанию объединить основной вид интерфейса UI (GTK, Tkinter и т. Д.) С Twisted, и PyGame ничем не отличается.

Что я хотел бы предложить, так это то, что поскольку задержка в сети важна и поскольку у twisted очень хорошая структура планирования, то вы позволяете витому реактору работать и контролировать основной цикл, а затем используете LoopingCall, чтобы позволить вам обрабатывать события из Pygame.

На самом базовом:

from twisted.internet.task import LoopingCall

DESIRED_FPS = 30.0 # 30 frames per second

def game_tick():
   events = pygame.events.get()
   for event in events:
      # Process input events
   redraw()

# Set up a looping call every 1/30th of a second to run your game tick
tick = LoopingCall(game_tick)
tick.start(1.0 / DESIRED_FPS)

# Set up anything else twisted here, like listening sockets

reactor.run() # Omit this if this is a tap/tac file

Поначалу это кажется простым, но сопряжено с опасностями. Если вы тратите много времени на обработку игрового тика, то вы рискуете заморозить закрученный реактор, что сделает его неспособным обрабатывать события. Если вам нужны синхронизированные события, не блокируйте, а используйте витые инструменты, такие как reactor.callLater. Чем больше вы сможете избежать блокировок, тем более отзывчивым будет ваше приложение. Это слишком много вещей, чтобы описать их в нескольких параграфах, поскольку программирование для витой - это образ мышления, к которому действительно нужно привыкнуть, если вы никогда не занимались программированием для асинхронных или неблокирующих библиотек.

Для более полного примера, посмотрите " gam3 " для библиотеки игр для взаимодействия с витой (включая мировые часы для событий симуляции) и пример игры, сделанной одним из витых разработчиков, чтобы показать Как интегрировать Twisted и Pygame.

...