| # | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
|---|---|---|---|---|---|
| 1 |
Сокобан - Вступление
|
4 теста |
|||
|
Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры: 1. Создание редактора уровней. 2. Придумывание этих самых уровней. 3. Создание собственно игры. 4. Решение олимпиадной задачки для добавления ИИ. 5. Переделка игры в режим "на двоих". 6. Написание класса Phone для связи двух программ по сети. 7. Создание сетевой версии игры Sokoban. Будет интересно! В конце видео - первое задание: Научиться играть! :) Ссылка на игру Сокобан Отчёт отправил: 18953. Дмитрий Выполнено за 4 час. 15 мин. [Показать отчёт] Научился: Играть в Sokoban. Сложности: Были незначительные сложности с управлением: иногда кладовщик толкал ящик слишком сильно. |
|||||
| 2 |
Сокобан - Подготовка - Картинки и лабиринт
|
1 тест |
|||
|
На этом уроке мы подготовим 6 пиктограмм и две картинки для игры, а также придумаем свой собственный уровень, который запишем в текстовый файл. Отчёт отправил: 18953. Дмитрий Выполнено за 31 мин. [Показать отчёт] Научился: Подготовил картинки и лабиринт. Сложности: Ничто. |
|||||
| 3 | Сокобан - Редактор - Загрузка |
|
|||
|
Мы начинаем создавать редактор уровней для известной логической игры Sokoban. Редактор будет создан за четыре урока. На первом уроке мы создадим класс для загрузки уровня с текстового файла и протестируем его работу. Отчёт отправил: 18953. Дмитрий Выполнено за 4 час. 11 мин. [Показать отчёт] Научился: Загружать уровни из файла :-). Извиняюсь, что поместилась не вся матрица cell. Поймите, экран маленький, и не хочется ради одного отчёта менять кучу настроек, в том числе, и в VS. Тем более, что уроки по созданию редактора уровней простенькие, и не хочется здесь задерживаться надолго, а хочется уже посмотреть программирование логики игры, что, согласитесь, гораздо интереснее. И ещё, я убрал в "switch" методов CharToCell и CellToChar первую ветку (ведь, в "default" и так возвращается Cell.none и ' ' соответственно). Сложности: Решить: менять кучу настроек ради одного отчёта, или нет (см. комментарий). |
|||||
| 4 | Сокобан - Редактор - Интерфейс |
|
|||
|
На этом уроке мы создадим интерфейс программы и сделаем отображение загруженного уровня на экране. Отчёт отправил: 18953. Дмитрий Выполнено за 4 час. 12 мин. [Показать отчёт] Научился: Ничему новому. Подписываться на событие можно не только так: picture.MouseClick += new MouseEventHandler(pictureBox_MouseClick); // полная форма Но и так: picture.MouseClick += pictureBox_MouseClick; // сокращённая форма В этом случае используется техника предположения делегата (её ещё называют групповым преобразованием метода). Заметка к 3 уроку: out и ref - это модификаторы (квалификаторы, спецификаторы) параметров методов, указывающие, что аргументы передаются не по значению, а по ссылке. Сложности: Ничто. |
|||||
| 5 | Сокобан - Редактор - Редактирование |
|
|||
|
На третьем уроке мы сделаем наконец-таки редактирование поля. Также реализуем возможность изменения размера лабиринта. В конце напишем функцию для проверки корректности составленного уровня. Отчёт отправил: 18953. Дмитрий Выполнено за 7 час. 7 мин. [Показать отчёт] Научился: Создавать функционал для редактирования уровня. Сложности: Ничто. |
|||||
| 6 | Сокобан - Редактор - Сохранение |
|
|||
|
На четвёртом уроке мы закончим создание редактора уровней. Напишем самую главную функцию для сохранения сделанных изменений в файл. Затем добавим кнопки перехода к следующему и предыдущему уровню. Останется только немного облагородить интерфейс программы. Отчёт отправил: 18953. Дмитрий Выполнено за 11 час. 58 мин. [Показать отчёт] Научился: Создавать функционал для сохранения уровня. Не нравится код редактора. Чем дальше, тем всё неудобнее его писать. Может быть, удобнее создать отдельный обобщённый класс для работы с массивом. В нём - индексатор, в котором контролировался бы выход за границы массива, метод изменения размера массива и т. д.?! Немного изменил код (см. первый скриншот, panel.Controls.Clear() в начале метода InitPictures). В коде была ошибка: for (int p = newLength - 1; p > curr; p--) в методе SaveLevel класса LevelFile. Надо так: int len = curr + deltaRow; for (int p = newLength - 1; p > len; p--). Иначе, при записи первого уровня с 2 и более новыми строками возникнет ошибка выхода за границу массива lines. Спасибо за интересный урок! Сложности: Ничто. |
|||||
| 7 | Сокобан - Редактор - Улучшение |
|
|||
|
Допиливаем и дорабатываем редактор до товарного вида. Реализуем ещё несколько фишек. Отчёт отправил: 18953. Дмитрий Выполнено за 9 час. 15 мин. [Показать отчёт] Научился: Ничему новому. Можно переходить на любой уровень, просто вводя в поле "Уровень" его номер и нажимая <Enter>. А также отменять и повторять любое количество изменений, вводя их число и нажимая соответствующую кнопку. Отмену и повтор изменений реализовал с применением паттерна "Команда". Сложности: Ничто. |
|||||
| 8 | Сокобан - Редактор - Классика уровней |
1 тест |
|||
|
На этом уроке вам нужно выбрать любых два классических уровня и создать их в нашей программе-редакторе. Ссылка на классические уровни: https://logic-games.spb.ru/sokoban/ Редактор можно скачать здесь: https://www.videosharp.info/data/soft/SokobanEditor.zip Отчёт отправил: 18953. Дмитрий Выполнено за 1 час. 27 мин. [Показать отчёт] Научился: Создавать классические уровни игры Sokoban. Сложности: Ничто. |
|||||
| 9 | Сокобан - Создаём свои уровни |
1 тест |
|||
|
Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 18953. Дмитрий Выполнено за 3 час. 19 мин. [Показать отчёт] Научился: Создавать свои собственные уровни игры Sokoban. Сложности: Найти на это время. |
|||||
| 10 | Сокобан - Игра - Интерфейс |
1 тест |
|||
|
Мы начинаем создание интеллектуальной игры СОКОБАН. У нас уже есть все необходимые классы и уровни для создания полноценной игры. На этом уроке мы создадим форму и настроим интерфейс окна лабиринта. Отчёт отправил: 18953. Дмитрий Выполнено за 4 час. 15 мин. [Показать отчёт] Научился: Ничему новому не научился, но урок понравился. Спасибо. Сложности: Ничто. |
|||||
| 11 | Сокобан - Игра - Управление |
3 теста |
|||
|
Теперь мы создадим класс логики игры Game, используя который, мы реализуем управление человечком курсорными клавишами клавиатуры. А также сделаем переход на следующий уровень. Отчёт отправил: 18953. Дмитрий Выполнено за 13 час. 12 мин. [Показать отчёт] Научился: Ничему новому. Но урок снова понравился. Спасибо его автору. Сложности: Ничто. |
|||||
| 12 | Сокобан - Решалка - Тестер |
1 тест |
|||
|
На этом уроке мы напишем программу, которая будет проверять правильность алгоритма поиска решения лабиринта. http://www.videosharp.info/console/task/level=1178 Отчёт отправил: 18953. Дмитрий Выполнено за 6 час. 8 мин. [Показать отчёт] Научился: Писать тестер. Урок понравился. Спасибо его автору. Сложности: Ничто. |
|||||
| 13 | Сокобан - Решалка - Мышка |
1 тест |
|||
|
Мы начинаем решать задачу по решению игры Сокобан с одним ящиком. Эта задача олимпиадного уровня на применение алгоритма поиска вширь. Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку. Программу мы напишем за два урока. На первом уроке мы создадим вспомогательную функцию MoveAlfa(), которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём. Отчёт отправил: 18953. Дмитрий Выполнено за 8 час. 1 мин. [Показать отчёт] Научился: Ничему новому не научился. Но этот урок понравился больше предыдущих уроков из этого курса. Спасибо его создателю. Сложности: Сложностей не было. |
|||||
| 14 | Сокобан - Решалка - Яблоко |
2 теста |
|||
|
На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки. Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений. Отчёт отправил: 18953. Дмитрий Выполнено за 6 час. 28 мин. [Показать отчёт] Научился: Ничему новому не научился. Но этот урок ещё интереснее предыдущего. Спасибо автору за его труд. Сложности: Сложностей не было. |
|||||
| 15 | Сокобан - Решалка - Оптимизация |
1 тест |
|||
|
На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 18953. Дмитрий Выполнено за 2 час. 7 мин. [Показать отчёт] Научился: Оптимизировать данный алгоритм. Урок интересный. Спасибо. Сложности: Ничто. |
|||||
| 16 | Сокобан - Игра - Автоходы |
1 тест |
|||
|
Поздравляю, программа уже создана: можно играть, можно ею хвастаться. На этом уроке мы добавим в игру автоходы, чтобы можно было управлять нашим человечком с помощью мышки - указать, куда идти, и даже указать, какой ящик куда нужно поставить. Для этого нам потребуются два класса по решению лабиринта. Отчёт отправил: 18953. Дмитрий Выполнено за 7 час. 36 мин. [Показать отчёт] Научился: Ничему новому. Отличный урок. Спасибо. Сложности: Ничто. |
|||||
| 17 | Сокобан - Редактор - На двоих |
1 тест |
|||
|
Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков. Создаём базу из 10 новых уровней игры в Сокобан для двоих. Отчёт отправил: 18953. Дмитрий Выполнено за 5 час. 33 мин. [Показать отчёт] Научился: Ничему новому. В видеоуроке добавили кнопочку второго игрока, изменили её имя, а всплывающую подсказку не изменили. Сложности: Ничто. |
|||||
| 18 | Сокобан - Игра - На двоих |
|
|||
|
Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 18953. Дмитрий Выполнено за 1 час. 41 мин. [Показать отчёт] Научился: Ничему новому. Сложности: Ничто. |
|||||
| 19 | Сокобан - Телефон - TCP/IP протокол |
1 тест |
|||
|
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами. Отчёт отправил: 18953. Дмитрий Выполнено за 4 час. 17 мин. [Показать отчёт] Научился: Ничему новому. Сложности: Ничто. |
|||||
| 20 | Сокобан - Игра - На двоих по сети |
1 тест |
|||
|
На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока. Отчёт отправил: 18953. Дмитрий Выполнено за 9 час. 59 мин. [Показать отчёт] Научился: Ничему новому. Чтобы сделать кнопку "Начать игру" неактивной (см. первый скриншот), нужно свойству TabIndex радиокнопки "Сервер" присвоить значение 0, и так по порядку. Простите, но то, как решался в видеоуроке вопрос "синхронизации данных" - это откровенный костыль. В классе Phone все установленные соединения и открытые потоки нужно корректно завершать и закрывать. Оставлять это без внимания - плохая практика в программировании. Причина несогласованного перехода на следующий уровень заключается ни в каких-то там тайм-аутах (делегат Recv((byte)data) в классе Phone вызывается синхронно (по умолчанию в контексте текущего потока вызывается метод Invoke класса Recv (компилятор по вашему описанию делегата создаёт аж целый класс-делегат!)), и пока он не выполнится, дальнейшее чтение данных невозможно, но никаких ограничений на время его выполнения нет и не было!), а вот в чём: Если вы запустили отдельный поток, то вы не сможете из этого потока обращаться к элементам формы напрямую, так как вам будет выдаваться ошибка. Мол, вы обращаетесь к элементам, которые были созданы в другом потоке. Уберите try-catch - и вы убедитесь в правоте моих слов. Эта ситуация поправима, и мы сейчас рассмотрим решение (см. второй скриншот). В целом же курс не плохой. Мне понравился. Спасибо вам, Евгений Витольдович, за ваш труд! Сложности: Ничто. |
|||||
| 21 | Сокобан - Завершение |
|
|||
|
Игра уже написана, но всегда можно сделать чуть-чуть лучше. На этом уроке мы объединим оба варианта игры в одну программу и загрузим файл с уровнями в ресурсы программы. Теперь в одном ехешнике будет сразу всё! Это финиш!!! Отчёт отправил: 18953. Дмитрий Выполнено за 6 час. 44 мин. [Показать отчёт] Научился: Ничему новому. Можно было бы и одним конструктором обойтись: public LabirintForm(int mode) { this.mode = mode; myUser = 1; otherUser = 2; Init(); } Сложности: Ничто. |
|||||
| 22 | ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан |
|
|||
|
Задание: Записать видеообзор игры СОКОБАН. |
|||||
| 23 | VIP. Бот для игры БАЛДА |
|
|||
|
Используя текстовый файл из 27400 слов создаём рекурсивный алгоритм подбора слов для популярной игры Балда. |
|||||
| Итого: 23 видеоурока |
13 час. 51 мин. 20 тестов |
12 чел. | |||
| Финалисты: LINKI, Новопашин Владимир, Tekashnik, Алексей В., zhikharevav, Evgenii Kudriavtcev, chokayes, Дмитрий, Максим Лапшинов, no name, Max, MaxB . | |||||