@Atllantis

Как разделить игровую логику по потокам?

Всем привет.
Я тут немного в ступоре... :)
Не могу придумать, как перенести всю логику игры в потоки.
Пока делал без потоков, просто чтобы сделать быстро и чтобы всё работало. :)
В общем, что есть:
Есть некий класс в котором и осуществляется вся игровая логика. По скольку в игре у меня одновременно в одной "комнате" могут играть до 10 человек, один этот класс и создаёт комнату в которую перемещаются пользователи и осуществляется всё взаимодействие между ними и игровым миром.

Я хотел бы перенести работу этого класса в потоки (в одном потоке может быть запущено несколько (много) данных классов/"комнат").
Но есть проблема:
1. В потоке запустить можно только один класс, иначе придётся запускать каждый класс в отдельном потоке.
2. После запуска классов и выполнения в них начальных действий, поток завершит работу.
3. Чтобы избежать завершения потока и получить возможность запуска сразу нескольких классов - нужно использовать бесконечный цикл (другого пока ничего не придумал). В этом же цикле, запускать выполнение всех действий в комнатах... Но и тут есть проблемы:
4. Все действия пользователя нужно обработать, и, придётся в место передачи напрямую действия в обрабатывающий класс (комнату), ставить все действия в очередь в потоке (от всех пользователей и всех комнат в данном потоке) и выполнять их по очереди, что вероятнее всего скажется на отзывчивости...
5. В каждой комнате есть много таймеров... То же проблема если запускать комнаты в потоках...

В общем не знаю, на сколько понятно объяснил, но надеюсь кто-нибудь что-нибудь подскажет.
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1 игровой мир (=1 комната, в данном случае) ===> 1 серверный игровой цикл: один основной поток и, если необходимо, дополнительные, относящиеся к этому миру.
Несколько комнат ===> несколько серверных игровых циклов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект