# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
4 теста |
|||
Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры: 1. Создание редактора уровней. 2. Придумывание этих самых уровней. 3. Создание собственно игры. 4. Решение олимпиадной задачки для добавления ИИ. 5. Переделка игры в режим "на двоих". 6. Написание класса Phone для связи двух программ по сети. 7. Создание сетевой версии игры Sokoban. Будет интересно! В конце видео - первое задание: Научиться играть! :) Ссылка на игру Сокобан Отчёт отправил: 4780. Дмитрий Выполнено за 3 час. 00 мин. [Показать отчёт] Научился: 1) играть в Сокобан) Сложности: 10й уровень игры Комментарии: интересная игра, что сказать) |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы подготовим 6 пиктограмм и две картинки для игры, а также придумаем свой собственный уровень, который запишем в текстовый файл. Отчёт отправил: 4780. Дмитрий Выполнено за 10 мин. [Показать отчёт] Научился: поиску картинок Сложности: ничего Комментарии: =) |
|||||
3 | Сокобан - Редактор - Загрузка |
|
|||
Мы начинаем создавать редактор уровней для известной логической игры Sokoban. Редактор будет создан за четыре урока. На первом уроке мы создадим класс для загрузки уровня с текстового файла и протестируем его работу. Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: 1) проектировать уровни игры в текстовом редакторе 2) считывать файл в массив 3) загружать уровни из текстового редактора в соответствующий класс программы согласно Enum Cell при помощи метода ReadLevelHeader Сложности: ReadLevelHeader(lines[curr], out curr_level_nr, out width, out height); переменные out , зачем они. Комментарии: Хороший способ считывать уровни из текстового файла, насколько я понимаю, можно как-то то же самое организовать при помощи базы данных? |
|||||
4 | Сокобан - Редактор - Интерфейс |
|
|||
На этом уроке мы создадим интерфейс программы и сделаем отображение загруженного уровня на экране. Отчёт отправил: 4780. Дмитрий Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: 1) использовать панель инструментов ToolStrip 2)Загружать изображения в объект PictureBox 2) заполнять панель на форме объектами в зависимости от заданных параметров Сложности: SokobanEditor_Resize! Комментарии: не получилось настроить SokobanEditor_Resize. Он лезет вперед всего, даже вперед SokobanEditorForm_Load(object sender, EventArgs e). Вызывается конструктором при инициализации формы строчкой this.ResumeLayout(false); Из-за этого не вызываются функции InitPictures(), LoadPictures() и идет ошибка. Запустить можно только указав их внутри SokobanEditor_Resize. |
|||||
5 | Сокобан - Редактор - Редактирование |
|
|||
На третьем уроке мы сделаем наконец-таки редактирование поля. Также реализуем возможность изменения размера лабиринта. В конце напишем функцию для проверки корректности составленного уровня. Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: 1) увеличивать и уменьшать карту редактора 2) отображать на карте редактора выбранную картинку из панели инструментов 3) проверять уровень на выполнение всех заданных условий перед сохранением Сложности: 1) определение места клика: x = ((Point)((PictureBox)sender).Tag).X; 2) вот такая конструкция присваивания - сравнения: toolWall.Checked = currentCell == Cell.wall; Комментарии: использовал panel.Controls.Clear(), чтобы решить проблему со старыми картинками при перерисовке в момент увеличения/уменьшения размера формы. |
|||||
6 | Сокобан - Редактор - Сохранение |
|
|||
На четвёртом уроке мы закончим создание редактора уровней. Напишем самую главную функцию для сохранения сделанных изменений в файл. Затем добавим кнопки перехода к следующему и предыдущему уровню. Останется только немного облагородить интерфейс программы. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: 1) сохранять уровень в текстовом файле с учетом разной размерности уровней 2) переходить между уровнями 3) добавлять новый уровень при его отсутствии в момент перехода по уровню Сложности: Сохранение уровня и пересчет строк. Комментарии: Приятно, когда все работает. Создание нового уровня можно было бы вынести в отдельную функцию. |
|||||
7 | Сокобан - Редактор - Улучшение |
|
|||
Допиливаем и дорабатываем редактор до товарного вида. Реализуем ещё несколько фишек. Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: 1) изменять размер лабиринта через игровое поле 2)заполнение прямоугольных областей лабиринта однотипными объектами 3) отображать счетчики ящиков и мест для них Сложности: private void ShowCell(int x, int y, Cell c)//рекурсивная функция Комментарии: редактор сам по себе уже - игра) |
|||||
8 | Сокобан - Редактор - Классика уровней |
1 тест |
|||
На этом уроке вам нужно выбрать любых два классических уровня и создать их в нашей программе-редакторе. Ссылка на классические уровни: https://logic-games.spb.ru/sokoban/ Редактор можно скачать здесь: https://www.videosharp.info/data/soft/SokobanEditor.zip |
|||||
9 | Сокобан - Создаём свои уровни |
1 тест |
|||
Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: рисовать уровни в редакторе Сложности: отсчитывать сколько уровней уже нарисовано Комментарии: добавить потом 1) combo_box - текущий уровень, чтобы было видно какой уровень, сколько их всего и можно было выбирать 2) кнопка "создать новый уровень" - добавление пустого уровня в конец с присвоением ему соответствующего порядкового номера |
|||||
10 | Сокобан - Игра - Интерфейс |
1 тест |
|||
Мы начинаем создание интеллектуальной игры СОКОБАН. У нас уже есть все необходимые классы и уровни для создания полноценной игры. На этом уроке мы создадим форму и настроим интерфейс окна лабиринта. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: 1) вызывать одну форму из другой 2)заполнять уровень объектами PictureBox 3) отображать статусы прохождения уровня в панели инструментов Сложности: делегаты, зачем они нужны, если есть классы и методы. Комментарии: все работает, пока все ок) |
|||||
11 | Сокобан - Игра - Управление |
3 теста |
|||
Теперь мы создадим класс логики игры Game, используя который, мы реализуем управление человечком курсорными клавишами клавиатуры. А также сделаем переход на следующий уровень. Отчёт отправил: 4780. Дмитрий Выполнено за 3 час. 00 мин. [Показать отчёт] Научился: использование вспомогательных массивов для реализации слоев в программе Сложности: втянуться в работу после большого перерыва Комментарии: использование слоев - мне очень понравилось! интересно как этот вопрос решен в морском флоте. скоро узнаю) |
|||||
12 | Сокобан - Решалка - Тестер |
1 тест |
|||
На этом уроке мы напишем программу, которая будет проверять правильность алгоритма поиска решения лабиринта. http://www.videosharp.info/console/task/level=1178 Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: 1) как хранить и загружать карту из текстового файла 2) логике перемещения объекта по строковому шаблону, обработке условий Сложности: особо ничего Комментарии: здорово, когда есть визуализация алгоритма, много становится очевидным (буквально =) |
|||||
13 | Сокобан - Решалка - Мышка |
1 тест |
|||
Мы начинаем решать задачу по решению игры Сокобан с одним ящиком. Эта задача олимпиадного уровня на применение алгоритма поиска вширь. Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку. Программу мы напишем за два урока. На первом уроке мы создадим вспомогательную функцию MoveAlfa(), которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: 1. находить кратчайший путь в лабиринте поиском вширь Сложности: алгоритм проверки и прокладывания пути Комментарии: мощная вещь)) |
|||||
14 | Сокобан - Решалка - Яблоко |
2 теста |
|||
На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки. Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: находить решение для перемещения элемента Я в элемент Ф с места С при помощи другого элемента М. Сложности: Как все это работает вместе Комментарии: отличный алгоритм! кажется, что мышка "думает" как человек. по-факту перебираются все состояния, что очень много. посчитал, сколько раз мы заходим в очередь для простого лабиринта (как на скриншоте) - 545 раз. |
|||||
15 | Сокобан - Решалка - Оптимизация |
1 тест |
|||
На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 4780. Дмитрий Выполнено за 30 мин. [Показать отчёт] Научился: использование массивов значительно быстрее использования Dictionary, который в свою очередь значительно быстрее использования Queue Сложности: программа даже стала проще чем была) Комментарии: новая версия программы выполняется очень быстро, а старую я перезаписал пока видеоурок смотрел. |
|||||
16 | Сокобан - Игра - Автоходы |
1 тест |
|||
Поздравляю, программа уже создана: можно играть, можно ею хвастаться. На этом уроке мы добавим в игру автоходы, чтобы можно было управлять нашим человечком с помощью мышки - указать, куда идти, и даже указать, какой ящик куда нужно поставить. Для этого нам потребуются два класса по решению лабиринта. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: использовать в программе классы, созданные ранее. проходить сокобан одной левой) Сложности: модификация классов при их переносе в проект. Еще такой момент, получается, что список Queue можно модифицировать в теле цикла, т.е. это такой аналог рекурсии? Комментарии: просто замечательно выглядит, как будто сокобанщик сам такой умный) |
|||||
17 | Сокобан - Редактор - На двоих |
1 тест |
|||
Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков. Создаём базу из 10 новых уровней игры в Сокобан для двоих. Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: модифицировать ранее созданный код Сложности: искать старые ошибки в коде Комментарии: =>[] ................X |
|||||
18 | Сокобан - Игра - На двоих |
|
|||
Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 4780. Дмитрий Выполнено за 30 мин. [Показать отчёт] Научился: управлять с клавиатуры одновременно двумя сокобанщиками Сложности: особо ничего Комментарии: =) |
|||||
19 | Сокобан - Телефон - TCP/IP протокол |
1 тест |
|||
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами. Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 20 мин. [Показать отчёт] Научился: создавать соединение и передачу данных по сети между двумя компьютерами при помощи библиотек System.Net и System.Net.Sockets. Сложности: новые классы, новая терминология Комментарии: полезная вещь)) |
|||||
20 | Сокобан - Игра - На двоих по сети |
1 тест |
|||
На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: подключать класс для передачи данных по сети в готовую программу и соединять два компьютера в игре со стороны клиента или сервера Сложности: большое количество уже созданного кода немного давит и мешает быстро понять, что куда записать или исправить, чтобы заработало Комментарии: Отличная игра получилась, спасибо! Такой момент:если соединять 2 компьютера в локальной сети то IP, соответственно, тоже должен быть локальный(как роутер раздает), отметил на скриншотах. |
|||||
21 | Сокобан - Завершение |
|
|||
Игра уже написана, но всегда можно сделать чуть-чуть лучше. На этом уроке мы объединим оба варианта игры в одну программу и загрузим файл с уровнями в ресурсы программы. Теперь в одном ехешнике будет сразу всё! Это финиш!!! Отчёт отправил: 4780. Дмитрий Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: модифицировать программу для включения различных режимов игры Сложности: обилие кода, можно запутиться, где какие переменные Комментарии: удивительно, но все работает. особенно радует волна) |
|||||
22 | ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан |
|
|||
Задание: Записать видеообзор игры СОКОБАН. Отчёт отправил: 4780. Дмитрий Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: записывать видео) Сложности: ничего Комментарии: Спасибо, интересный был курс! Видеообзор: https://youtu.be/IpmthS185SY |
|||||
23 | VIP. Бот для игры БАЛДА |
|
|||
Используя текстовый файл из 27400 слов создаём рекурсивный алгоритм подбора слов для популярной игры Балда. |
|||||
Итого: 23 видеоурока |
13 час. 51 мин. 20 тестов |
12 чел. | |||
Финалисты: LINKI, Новопашин Владимир, Tekashnik, Алексей В., zhikharevav, Evgenii Kudriavtcev, chokayes, Дмитрий, Максим Лапшинов, no name, Max, MaxB . |