Игра
Логин
Я уже сделал две обучающие программы на самой игре, так что я не буду повторять здесь ничего. Посмотрите на них сначала, чтобы видеть, как они построены. Эта версия на самом деле урезанная версия второй, как я сделал общие улучшения в дизайне для размещения двигателя АИ (над первой версией). Сказав это, я вырвал двигателя АИ полностью, так как в этом нет необходимости, когда основная цель данного учебника является два игрока играют друг против друга.
Новый начальная схема теперь экран Войти. Это, в основном состоит из TextBox для игрока ввести свои псевдоним и кнопку OK, чтобы начать. Все макеты теперь есть область состояния, которая обеспечивает только основную информацию о статусе.
Первое мероприятие просто устанавливает графический интерфейс, а затем подтверждает, что мультиплеер не поддерживается. Когда кнопка ОК пресса, мы переходим к Вступить макета.
Регистрация
Присоединяйтесь макет были мы показываем все сверстниками в настоящее время в лобби, и позволит игроку подобрать другого игрока, чтобы начать игру с. Как игроки присоединяются к лобби, они автоматически заносятся в список. То текущий игрок выбирает подходящего соперника и нажимает кнопку воспроизведения. Там какая-то регистрация текст и две кнопки отладки также.
Лист eJoin событие имеет весь код клиента / боковой лобби соединения, а также основного кода игра соединения.Код разбивается на 5 основных групп, и код GUI.
На старте можно настроить элементы интерфейса, активировать LobbyRoom группу и отключить MainRoom группу и начать подключение к серверу сигнализации. Вполне возможно, что мы уже подключен, и / или вошедшего в, если мы перезапустили Регистрация макет, мы декодировать наш текущее состояние и сделать наиболее подходящий призыв подключения / регистрация заезда / присоединения.
На сигнализации подключен - мы войти в, если не сделано уже. Это вне какой-либо группы, как действие является общим как для фойе и игры.
LobbyRoom Группы
На сигнализации, входил в систему - мы присоединяемся к "лобби" комнаты.
На сигнализации соединены номер - если мы вернемся, как хозяин, мы должны выйти из комнаты, как в режиме реального лобби не был запущен, и мы должны немедленно уехать. В противном случае, мы просто флаг, который мы клиент.
На равных подключен - клиент подключается к лобби. Мы очистить список GUI и наш словарь.Список GUI показывает другим игрокам.Словарь является лишь быстрый поиск конвертировать из псевдонима ID. C2 поддерживает конвертирование из ID для псевдонима (PeerAliasFromID), но не наоборот, так что это просто быстрый способ сделать это. Теперь мы восстановить наши списки, соблюдая осторожность, чтобы не включать себя, или в лобби.
На равных сообщения "GameRequest" - это ключевое сообщение, которое получает все прокатки. Это сообщение проходит в GameRoomName, который мы храним, и тогда мы декодировать PeerIDs X и O от этого. Мы деактивировать LobbyRoom группу, как мы будем ногами из вестибюля. Здесь я добавил небольшую задержку перед активацией группе Хостинг и выезде (лобби) комнату. Это, чтобы сообщение завершить свою обработку и доложить клиенту.
На сигнализации вышел из комнаты - мы должны иметь дело с различными сценариями сверстников покинет. Если хозяин один уходит, и мы находимся в комнате, отключите из комнаты, в противном случае просто отключить LobbyRoom и активировать LostConnectionToLobby группу, чтобы вымыться. Если не хозяин, если мы действительны клиент, пропустите курок, в противном случае просто жалуются, что не лобби не было найдено и заблокировать графический интерфейс пользователя.
На равных отключен - если хозяин отключен, и мы в комнате, оставьте место, в противном случае просто отключить LobbyRoom и активировать LostConnectionToLobby группу, чтобы вымыться.
На ногами - сделать то же самое, что и "отключено".
Hosting Группы
Это код, переходящих для выезда в Лобби и готовится к переходу в основную комнату для игры. Там может быть несколько сценариев здесь, поэтому мы должны иметь дело с различными комбинациями, чтобы нас полностью из контекста лобби, чтобы мы могли начать контекст игры.
На сигнализации вышел из комнаты - здесь мы проверяем, если мы все еще в комнате. Уйти не так же, как отключиться. Либо отключите, или просто активировать группу SwitchRooms.
На равных отключен - то же самое - если мы все еще в комнате, после отключения, выйти из комнаты. В противном случае, просто активировать группу SwitchRooms.
SwitchRooms
Это просто очищает наш лобби состояние, отключение всех лобби / переходных групп, активизирует MainRoom и присоединяется к основной комнаты с экземпляром нашего двойного игрока игры. Примечание: Это делается так как вы не можете присоединиться к новой комнате, пока вы не полностью из любой предыдущей комнате.Регистрация не может быть вызван непосредственно из левой комнаты или отключенных триггерах так как есть еще контекста в старой комнате. Делая старый активный / деактивировать группа управляет этим.
MainRoom Группы
Мы должны иметь дело с не в холле больше, но в нашем маршевых игровой комнате. Мы вернулись к обычной процедуре одного партнера будучи принимающей стороной и другой клиенту., Таким образом, мы должны иметь дело с обоих случаях.
На сигнализации соединены номер - мы просто войти некоторое состояние здесь.
На равных подключен - мы посылаем приветственное сообщение здесь, только для отладки. Войти некоторое состояние. Если этот экземпляр игры состоит в том X, позвоните SetupGame () с соответствующими деталей, чтобы создать реальную игровой движок с этим коллегиальному X и друга, как O, или наоборот. И, наконец, мы идем к макету игра!
LostConnectionToLobby
Это просто регистрирует некий статус, ждет 5 секунд, а затем перезапускает тот же макет.
ButtonPlay: На перешедших сделок с выбором делаются и позволяет кнопку воспроизведения.
При нажатии кнопки Play, мы деактивировать LobbyRoom, включите хостинг комнату, и установить некоторые глобальные переменные. Затем мы отправим сообщение StartGameWithClient с нашей кодированного сообщения и выйти из комнаты. Это пинает весь механизм отпуск--лобби-и-переключатель-To-The-игры выше.
Следующие несколько событий, предназначены только для тестирования.
RebuildJoinList
Опять мы имеем дело с обработкой изменение триггера, которые не могут быть полностью переработаны после возвращения триггера. Отключите RebuildJoinList группу и просто очистить наш временный списков и построить их обратно снова из списка подключенных сверстников. Мы исключаем себя и хозяина.