Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Сокобан / Сокобан - Игра - На двоих по сети

  • На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих.
    Мы будем использовать телефонный класс Phone с прошлого урока.
  • Дата отправки отчёта: 24 августа 2015 г.
  • Задание выполнено: за 1 час. 30 мин.
  • Чему научился: Передавать данные по сети. Общаться из программы с консолью
  • Что было сложным: Сфотографировать два компьютера)
  • Комментарии: Или это я пропустил, или это сделано преподавателем намеренно - но я не увидел объяснения, как непосредственно соединить два РАЗНЫХ компьютера по сети. Во всех сетевых уроках мы работали на IP 127.0.0.1 (т.е. на localhost'е). Поэтому для разных компьютеров я придумал решение сам(скорее всего дико неоптимальное) - при инициализации сервера программа открывает консоль и посылает туда запрос "ipconfig", считывает ответ, находит строку, в которой написан IP-адрес, вытаскивает его из этой строки и вставляет в текстовое поле. Далее при нажатии на кнопку запуска игры появляется сообщение о том, какой IP-адрес нужно сообщить клиенту. Как-то так.
    P.S. Не очень получилась фотография двух компьютеров.
  • Оценка видео-уроку:
Отчёт от 4362 за Сокобан / Сокобан - Игра - На двоих по сети


Отчёт от 4362 за Сокобан / Сокобан - Игра - На двоих по сети




Оцени работу

 
Сохранить страницу:

1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Сергей  # Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 21:39

Сергей, ты первый :)
Да ещё и с таким анализом, у меня даже в мыслях не было - таким способом подсказывать пользователю айпи адрес :)


24. --
Олюшка
Олюшка
ответить
→  Сергей  # Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 22:57

Сергей, ты классно придумал, у меня проще немного было, я только посмотрела айпи компа и вставила его вместо нашего, и заработало, хотя признаюсь тоже ведь когда я пыталась сделать свою виртуальную машину сервером и прописывала на втором ноуте клиента айпи виртуальной машины, не заработал, а когда обычный ноют стал сервером все классно, видемо особенности моей виртуальной машины.
Молодец!


2146. --
Иван
Иван
ответить
→  Сергей  # Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 23:18

Здорово! Было бы здорово этот "костыль" показать. Здорово, что все получилось. Я вообще не представляю, как считать ответ из консоли в программу, да еще и отпарсить его правильно. Может можно какой-нибудь скриншотик с кодом этого дела? Думаю все будут признательны.


4362. --
Сергей
Сергей
ответить
# Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 23:44

Да, конечно можно, вот код, который этим делом занимается (пример работы с консолью я нашел на каком-то форуме и адаптировал его под свои нужды, а до этого тоже не знал, как "общаться" с консолью) :
         
            //Создание процесса
            ProcessStartInfo psiOpt = new ProcessStartInfo(@"cmd.exe", @"/C ipconfig /all");

            //Установка скрытого режима (чтобы окно консоли с запросом не выводилось на экран и не мешало работать)
            psiOpt.WindowStyle = ProcessWindowStyle.Hidden;

            //Это, честно говоря, не помню что такое)
            psiOpt.UseShellExecute = false;

            //Разрешение перенаправления выходного потока данных (ответа от консоли)
            psiOpt.RedirectStandardOutput = true;

            // запускаем процесс
            Process procCommand = Process.Start(psiOpt);

            // получаем ответ запущенного процесса
            StreamReader srIncoming = procCommand.StandardOutput;
            string stringg = srIncoming.ReadToEnd();

            //Преобразуем ответ в массив строк
            string[] st = stringg.Split('\n');

            // закрываем процесс
            procCommand.WaitForExit();
            foreach (var s in st)
            {
                //Ищем строчку, в которой указан наш IP (в ней есть фраза "IPv4")
                if (s.Contains("IPv4"))
                {
                    //Вытаскиваем из нее сам IP адрес
                    string ss = s.Substring(s.IndexOf(":") + 2, s.IndexOf("(") - s.IndexOf(":") - 2);
                    Console.WriteLine(string.Format("Сообщите IP {0} своему коллеге-клиенту", ss));
                    host = ss;
                    break;
                }
            }


4362. --
Сергей
Сергей
ответить
→  Олюшка  # Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 23:51

А разве IP виртуальной машины и самого компьютера не должны совпадать? Железо же одно)


24. --
Олюшка
Олюшка
ответить
→  Сергей  # Игра Сокобан / Сокобан - Игра - На двоих по сети / 2015-08-24 23:56

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



Начинаем практику по языку C#





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

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Передавать данные по сети. Общаться из программы с консолью
Трудности: Сфотографировать два компьютера)
Или это я пропустил, или это сделано преподавателем намеренно - но я не увидел объяснения, как непосредственно соединить два РАЗНЫХ компьютера по сети. Во всех сетевых уроках мы работали на IP 127.0.0.1 (т.е. на localhost'е). Поэтому для разных компьютеров я придумал решение сам(скорее всего дико неоптимальное) - при инициализации сервера программа открывает консоль и посылает туда запрос "ipconfig", считывает ответ, находит строку, в которой написан IP-адрес, вытаскивает его из этой строки и вставляет в текстовое поле. Далее при нажатии на кнопку запуска игры появляется сообщение о том, какой IP-адрес нужно сообщить клиенту. Как-то так. P.S. Не очень получилась фотография двух компьютеров.


Научился: Очень интересно исследовать, как работают классы между собой.
Трудности: Так писать программу - совсем просто. Но так все соединить вместе - очень сложно. Интересно придумано с синхронной сменой уровней!
Ух! Вот это урок! Столько всего важного и интересного. Удивительно, что класс phone передает всего то по одному байтику. А наши человечки бегают уже вместе! Спасибо за замечательный курс. Все очень понравилось!