@lpinvie

Игра змейка C#(Windows Forms), какую технологию выбрать для взаимодействия игроков по сети?

Всем привет, решил написать змейку на C#(Windows Forms). В игру хочу добавить сетевой режим, т.е. чтобы 2 игрока подключались к серверу и играли вместе. Т.е. на карте будет 2 змейки. Знаю только Sockets, но знания на уровне "передать сообщение". Слышал, что существует WCF, но понятие не имею, что там и как. Так вот, с помощью какой технологии лучше всего реализовать взаимодействие по сети? Сам сервер будет находиться на ОС Ubuntu Server 16.04.
  • Вопрос задан
  • 1422 просмотра
Решения вопроса 1
@kttotto
пофиг на чем писать
Вот я бы tcp не рекомендовал. Вообще в большинстве многопользовательских играх tcp противопоказан, будете получать задержки, фризы. Поле у Вас будет одно на двоих и получите рассинхронизацию, что противник будет съедать яблоко, которое Вы уже съели.
Используете upd протокол, по нему регулярно, раз в какой-то промежуток времени, получаете координаты всего списка змейки от противника и направление движения, а сами, ему же, транслируете свои. На своем экране, у змейки противника никакой логики, только отображение: отобразили все полученные координаты и двигаете ее в полученном направлении, пока не получили новые данные.
Я когда то, как курсовую, сдавал тетрис по сети, только на wpf. Реализация была именно такая как описал. Игра была только в локалке, между компами, без всяких центральных серверов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
Подключение обычные tcp сокеты (в udp пока не лезте, но с ними тоже реально).

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

От сервера передаете изменения содержимого экрана, по объектам, змейки, корм и прочее. Само собой при подключении вместо дельты сервер должен вернуть текущие координаты. При потере связи тогда все будет автоматом восстанавливаться. Разработайте формат сообщений, воспользуйтесь готовыми сериализаторами, не изобретайте паровоз, хотя...

На клиенте перерисовываете все это каждый раз как получаете данные от сервера.

Вся игра должна крутиться на сервере, тогда у вас не будет никаких проблем с расинхронизацией, читерством (кроме автоматизации) и прочим.

Недостаток - у всех пользователей будет небольшой лаг на действия, в зависимости от пингов.

К сожалению не все игры можно так реализовать, но частично да.
Ответ написан
Комментировать
Griboks
@Griboks Куратор тега C#
1) Разработайте протокол взаимодействия по сети.
2) Выберите язык для написания сервера.
3) О чудо! Это же C#! Бегите на msdn и читайте пример про сетевой чат.
4) Уберите из сетевого кода все строки и прочую ерунду.
5) У вас плохой протокол. Улучшите его, залатайте дыры, защититесь от читерства.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы