Как мне управлять взаимодействием между потоками ИИ и основным игровым циклом?

Я работаю над пошаговой стратегической игрой на Java (в среде Android). Следуя структуре в Beginning Android Games, у меня есть поток рендеринга и поток пользовательского интерфейса. Поток рендеринга неоднократно обновляет состояние мира, а затем перерисовывает мир. Когда пользователь взаимодействует с экраном, графический интерфейс отправляет в мир действия (шаблон команды). Сейчас я добавляю ИИ-игроков, и вот мой план:

У каждого ИИ-игрока будет ИИ, который работает в отдельном потоке.

Когда мир обновляется на ходу ИИ, он проверяет, есть ли отложенное действие. Если так, он его выполняет. Затем он запрашивает у ИИ-игрока свое следующее действие.

ИИ-игрок отправит запрос на действие в поток ИИ, а затем вернется.

В конце концов, ИИ предложит действие и отправит его обратно в мир, который увидит его в следующем обновлении.

Два вопроса:

1) Кажется ли этот дизайн правильным?

2) Как мне управлять обменом данными в потоке AI и из него? Если у меня есть вызов AI-потока world.queueAction (action), похоже, что он будет работать, но если поток визуализации вызывает ai.chooseAction (world), который будет запускать действие, выбирающее в потоке визуализации, а это не то, что я хочу .

5
задан BRPocock 9 December 2011 в 17:14
поделиться