мой первый вопрос здесь, поэтому, пожалуйста, не будьте резкими, если что-то пошло не так:)
В настоящее время я учусь на CS (из Германии, если эта информация имеет какое-либо применение;)), и мы получили бесплатное выбираемое задание по программированию, которое мы должны написать в приложении C ++ / CLI для Windows Forms.
Моя команда, двое других и я решили пойти на совместимый с сетью порт настольной игры Risk.
Мы разделили работу на 3 части, а именно: пользовательский интерфейс, игровая логика и сеть. Теперь мы находимся в той части, где нам нужно, чтобы все работало вместе, и главный вопрос в том, как синхронизировать клиентов друг с другом?
Наш подход на данный момент заключается в том, что каждый клиент имеет всю информацию, необходимую для расчета и / или выполнения всех возможных действий. На самом деле у клиентов есть вся доступная информация, за исключением фазы инициализации игры (добавление игроков, выбор карты и т. Д.), Для которой нужен один «супер-клиент» с некоторыми дополнительными элементами для управления вещами.
Это стандартный сценарий нашего подхода:
- игрок выполняет действие, действие действует и выполняется на клиенте игрока
- действие отправлено по сети
- действие выполняется на других клиентах
Дизайн (то есть, нет или код), который мы придумали до сих пор, является чем-то вроде следующей диаграммы псевдопоследовательности.
Gui, Controller и Network реализуют все возможные действия (то есть все действия, которые изменяют данные) как методы из интерфейса. Таким образом, каждая часть может реализовать метод таким образом, чтобы выполнить свою работу.
Пример с действием ():
На стороне клиента:
Player-->Gui.Action()
Gui-->Controller.Action()
Controller-->Logic.Action
(Logic.Action() == NoError)?
Controller-->Network.Action()
Network-->Parser.ParseAction()
Network.Send(msg)
На всех остальных клиентах:
Network.Recv(msg)
Network-->Parser.Deparse(msg)
Parser-->Logic.Action()
Logic-->Gui.Action()
Вопросы:
Это жизнеспособный подход к нашей задаче?
Есть ли лучший / более простой способ для этого?
Рекомендации, критика?
Наши знания (чтобы вы могли лучше нацелить свой ответ):
Мы находимся на стороне новичка в том, что касается программирования более крупных проектов с небольшой командой.
У всех нас есть некоторый общий опыт программирования и базовое понимание библиотек .Net и Windows Forms.
Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.