Я пытаюсь сделать многопользовательскую сетевую игру. Каждый игрок представлен прямоугольником на экране. Я использую OpenGL для графики, а также пользовательский ввод (такие команды, как MOVE-LEFT, MOVE-RIGHT и т. Д.) Будет обрабатываться им (или GLUT или сумма).
У меня есть следующая архитектура для игры.
В игре 4 игрока (узла). Каждый игрок отправляет и получает данные, используя UDP. Каждый игрок может отправить данные любому другому игроку.
Данные должны быть отправлены игроком, если есть какие-либо данные от соответствующего пользователя. (Например, команда MOVE-LEFT и т. Д.).
Всякий раз, когда игрок (скажем, p1) получает какие-либо данные от любого другого игрока (например, p2) (например, новую позицию игрока p2 на экране), экран игрока p1 должен обновляться немедленно.
Я думаю о следующих строках:
Создайте один поток для обработки графики.
Создайте еще 2 потока, по одному для получения и отправки данных, используя UDP.
Всякий раз, когда графический поток получает ввод для «myposition» от пользователя, он обновляет общую глобальную переменную «myposition». Поток сетевой отправки, который ожидает эту переменную, активируется и сообщает каждому другому игроку о своей новой позиции.
Аналогичным образом, всякий раз, когда обновления «позиции» поступают от любого другого игрока «i», поток приема в сети обновляет глобальную переменную player [i] .position. Графический поток теперь будет перерисовывать сцену с обновленными позициями.
Является ли этот дизайн правильным. Если да, насколько хорош этот дизайн и как я могу его улучшить