На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока.
Дата отправки отчёта:
23 декабря 2016 г.
Задание выполнено: за
3 час. 00 мин.
Чему научился:
Обмену пакетами по сети (Сервер-Клиент)
Что было сложным:
найти время
Комментарии:
В класс Phone добавил метод Stop() для завершения сетевой активности и разрыва связи, если выйти в игровое меню для выбора повторной сессии или поиграть одному/вдвоём на одном ПК. В меню настроек добавил чекбоксы для настройки режима игры (радиобаттон не использовал, так как хватило 3 чекбоксов и 2 окна для ввода порта и адреса сервера). В тайтле информация о том, в каком режиме запущенна игра: Одиночный, На двоих, По сети (Сервер), По сети (Клиент). Модернизировал отрисовку игрового поля, чтобы оно рисовалось быстрее и по центру формы. Так же добавил отступы со всех сторон игрового поля, эдакий бордюр аля ZX-Spectrum (идею по его использованию отложил для финального видео-отчёта). При смене уровня, ресайзе формы и т.д. динамический изменяется и само игровое поле не нарушая пропорции и центровку. Запуск режимов игры реализовал по своей, логическое продолжение наработок с прошлых уроков (не создавал доп. конструкторы). При передаче пакетов о смене уровня, сервер ожидает ответа от клиента о успешном завершении данного деяния, чтобы отправить пакет о сбросе уровня, малоли, вдруг клиент успел уже побегать, чтобы устранить рассинхрон. В связи со своими наработками так же и управление по сети реализовано по своему, дабы минимизировать изменение кода для поддержки всех игровых режимов. Добавлена проверка при отправку/получение на предмет ПРАВ: менять уровни и делать сброс может только сервер. Незначительно изменив код, активировал поддержку управления персонажами при помощи мыши с возможностью автоходов по сети (каждый игрок автоматически управлять только своим персонажем при помощи мыши). Для получения/обработки пакетов особой сложности (типо смена уровня и т.д.) реализовал с использованием буфера из которого полученные пакеты достаются в порядке добавления.
Научился: Передавать данные по сети. Общаться из программы с консолью Трудности: Сфотографировать два компьютера) Или это я пропустил, или это сделано преподавателем намеренно - но я не увидел объяснения, как непосредственно соединить два РАЗНЫХ компьютера по сети. Во всех сетевых уроках мы работали на IP 127.0.0.1 (т.е. на localhost'е). Поэтому для разных компьютеров я придумал решение сам(скорее всего дико неоптимальное) - при инициализации сервера программа открывает консоль и посылает туда запрос "ipconfig", считывает ответ, находит строку, в которой написан IP-адрес, вытаскивает его из этой строки и вставляет в текстовое поле. Далее при нажатии на кнопку запуска игры появляется сообщение о том, какой IP-адрес нужно сообщить клиенту. Как-то так.
P.S. Не очень получилась фотография двух компьютеров.
Научился: Очень интересно исследовать, как работают классы между собой. Трудности: Так писать программу - совсем просто. Но так все соединить вместе - очень сложно.
Интересно придумано с синхронной сменой уровней! Ух! Вот это урок! Столько всего важного и интересного. Удивительно, что класс phone передает всего то по одному байтику. А наши человечки бегают уже вместе! Спасибо за замечательный курс. Все очень понравилось!