# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
4 теста |
|||
Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры: 1. Создание редактора уровней. 2. Придумывание этих самых уровней. 3. Создание собственно игры. 4. Решение олимпиадной задачки для добавления ИИ. 5. Переделка игры в режим "на двоих". 6. Написание класса Phone для связи двух программ по сети. 7. Создание сетевой версии игры Sokoban. Будет интересно! В конце видео - первое задание: Научиться играть! :) Ссылка на игру Сокобан Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: Ничего нового Сложности: найти время Комментарии: Нашёл сайт, на котором можно онлайн играть в игры ZX Spectrum, даже TRD формат 5,25'' дискетки (TR-DOS 128kb) |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы подготовим 6 пиктограмм и две картинки для игры, а также придумаем свой собственный уровень, который запишем в текстовый файл. Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Состряпал пока что абстрактные картинки начального меню и окна поздравления, в будущем будет изменено (добавлены новые элементы). Подготовил текстуры игровых объектов 32х32 (для персонажа их несколько на каждое направления движения). Уровень нарисовал самый первый, но в своём стиле символов. |
|||||
3 | Сокобан - Редактор - Загрузка |
|
|||
Мы начинаем создавать редактор уровней для известной логической игры Sokoban. Редактор будет создан за четыре урока. На первом уроке мы создадим класс для загрузки уровня с текстового файла и протестируем его работу. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Как видно на скриншоте, строки в уровнях разной длинны для оптимизации размера файла. Добавил проверку в цикле загрузки уровней для поддержки строк разной длинны. |
|||||
4 | Сокобан - Редактор - Интерфейс |
|
|||
На этом уроке мы создадим интерфейс программы и сделаем отображение загруженного уровня на экране. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: ToolStrip впервые использовал Сложности: найти время, стараться не внедрять свои фишки, чтобы было чем заняться на след. уроках. Комментарии: Отличный урок, добавил заготовки для кнопок загрузки/сохранения и переключение уровней влево/вправо, пока без текстур. |
|||||
5 | Сокобан - Редактор - Редактирование |
|
|||
На третьем уроке мы сделаем наконец-таки редактирование поля. Также реализуем возможность изменения размера лабиринта. В конце напишем функцию для проверки корректности составленного уровня. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Закрепил пройденное Сложности: найти время Комментарии: Отличный урок, стараюсь пока особо не модифицировать код, будет ещё такая возможность =) |
|||||
6 | Сокобан - Редактор - Сохранение |
|
|||
На четвёртом уроке мы закончим создание редактора уровней. Напишем самую главную функцию для сохранения сделанных изменений в файл. Затем добавим кнопки перехода к следующему и предыдущему уровню. Останется только немного облагородить интерфейс программы. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Закрепил пройденное Сложности: найти время Комментарии: Сделал и добавил все необходимые картинки для сохранения уровня, переключения между уровнями и кнопка ресайза уровня. так же добавил статусбар, где сообщает всё ок или какие либо ошибки, которые были найдены после загрузки уровня или при попытке его сохранить. Добавил проверку, чтобы добавлялся только один новый файл в конец файла уровней, пока он не будет без ошибок, следующий новый уровень добавить нельзя. |
|||||
7 | Сокобан - Редактор - Улучшение |
|
|||
Допиливаем и дорабатываем редактор до товарного вида. Реализуем ещё несколько фишек. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Событию MouseWheel Сложности: найти время Комментарии: Разделил установку ширины и высоты уровня по разным TextBox, при установке вручную размеров и нажатии на Enter обновляется размер поля, если же размер поля уже таковой, обновления поля не будет, смысла нет =) При наведения на окошки ширины и высоты уровня курсора мыши, можно роликом мышки устанавливаться размеры (уменьшая/увеличивая) учитываются лимиты =) Если количество ящиков и мест для них не равны друг другу, они подсвечиваются красным. Алгоритм заливки поля выбранным объектом сделал по своему, потом посмотрел реализацию на видео и понял, что моя версия веселее =) Подсчёт ящиков и мест для них тоже реализовал по своему, использовав ранее созданный CountItems(), после чего посмотрел далее видео и понял, что про этот метод забыли видимо =) Заменил событие подгонки размера поля уровня только при отпускании мыши после изменения размеров формы. При обновлении количества ящиков и мест для них так же проверяется уровень на корректность, если имеется ошибка, она отображается в статусбаре. |
|||||
8 | Сокобан - Редактор - Классика уровней |
1 тест |
|||
На этом уроке вам нужно выбрать любых два классических уровня и создать их в нашей программе-редакторе. Ссылка на классические уровни: https://logic-games.spb.ru/sokoban/ Редактор можно скачать здесь: https://www.videosharp.info/data/soft/SokobanEditor.zip Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Так как я изначально добавлял классические уровни, только из версии ремейка, то у меня тут и травка и ящики белые, это аналог стен, только внутри помещения, они не проходим и не движимы. Поэтому просто сопоставил уровни из классики с аналогами, которые я уже реализовал ранее, при прохождении курса. Отличный сайт, просмотрю все уровни и добавлю недостающие, скорее всего тут они имеются. |
|||||
9 | Сокобан - Создаём свои уровни |
1 тест |
|||
Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Ничему новому Сложности: найти время Комментарии: Сделал пока 14 уровней, все рисовал сам, честно!!! А вот придумывал не все сам =) |
|||||
10 | Сокобан - Игра - Интерфейс |
1 тест |
|||
Мы начинаем создание интеллектуальной игры СОКОБАН. У нас уже есть все необходимые классы и уровни для создания полноценной игры. На этом уроке мы создадим форму и настроим интерфейс окна лабиринта. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: На основном меню добавлено 3 пункта: 1 - Редактор (при клике открывается созданный ранее редактор карт, см. скриншот). 2 - Играть (при клике открывается форма с началом игры, см. скриншот). 3 - Выход (при наведении иконка двери как бы открывается, при клике выход из меню и закрытие приложения). При наведении мыши на пункты меню, они подсвечиваются инверсированно аля спекки. Так же можно выбирать пункты меню при помощи стрелок на клавиатуре и клавиши Enter для активации пункта. При движении стрелками в какую либо из сторон, курсор выбора пунктов меню бегает по кругу. |
|||||
11 | Сокобан - Игра - Управление |
3 теста |
|||
Теперь мы создадим класс логики игры Game, используя который, мы реализуем управление человечком курсорными клавишами клавиатуры. А также сделаем переход на следующий уровень. Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: Логике сдвигания объектов персонажем Сложности: найти время Комментарии: Старался делать вначале сам, потом снимал видео с паузы, по поводу того, как советовал Orange увеличивать доступный для прохождения уровень, я так же сделал, потом смотрел видео. Добавил вначале поворот человечка в направлении движения, для того, чтобы он как будто бы пытался толкать то, что не может, стены или ещё что. Добавил отображение сообщения с поздравлениями о всех пройденных уровнях. Отображение объектов на игровом поле реализовал по своему, как и ранее в других играх, при этом объекты из матрицы top реально находятся поверх объектов из матрицы map, так под ногами человечка видно то, по чему он ходит =) |
|||||
12 | Сокобан - Решалка - Тестер |
1 тест |
|||
На этом уроке мы напишем программу, которая будет проверять правильность алгоритма поиска решения лабиринта. http://www.videosharp.info/console/task/level=1178 Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Движению объекта по заданному пути, влияя на движимые объекты. Сложности: найти время Комментарии: Отличный урок, но это видимо только обкатка работа на основе заранее известного маршрута, далее будем писать алгоритм поиска всех возможных маршрутов для решения задачи. |
|||||
13 | Сокобан - Решалка - Мышка |
1 тест |
|||
Мы начинаем решать задачу по решению игры Сокобан с одним ящиком. Эта задача олимпиадного уровня на применение алгоритма поиска вширь. Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку. Программу мы напишем за два урока. На первом уроке мы создадим вспомогательную функцию MoveAlfa(), которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Уже делали такое в курсе "Комбинаторика" на этом проекте, на уроке "Динамика. Выход из Лабиринта" |
|||||
14 | Сокобан - Решалка - Яблоко |
2 теста |
|||
На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки. Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Поиску пути для мышки с яблоком до норки. Сложности: найти время Комментарии: На скриншоте видно, что яблок 5, мышка 1, найден путь для ближайшего ящика |
|||||
15 | Сокобан - Решалка - Оптимизация |
1 тест |
|||
На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Изначально я переписал уровень 32х32 с видео, повторил его символ в символ, чтобы проверить скорость на нём, но это было так долго, что я просто не дождался и взял один из своих уровней, модифицировал его и оставил только 1 ящик и 1 место куда его поставить надо, результаты на скриншоте и они внушительны (4 метода, Dictionary по скорости почти как HashSet). |
|||||
16 | Сокобан - Игра - Автоходы |
1 тест |
|||
Поздравляю, программа уже создана: можно играть, можно ею хвастаться. На этом уроке мы добавим в игру автоходы, чтобы можно было управлять нашим человечком с помощью мышки - указать, куда идти, и даже указать, какой ящик куда нужно поставить. Для этого нам потребуются два класса по решению лабиринта. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Автоматизации ходов Сложности: найти время Комментарии: Отличный урок, реализовал недокументированные изменения в данном уроке, так же внёс свои оптимизации в движение носильщика на базе массива. Так же помимо исследования направления движения с ящиком, убрал проверку стоящего носильщика на пути, такое может быть если хотим передвинуть ящик куда-то, а на пути в данный момент стоит наш персонаж, но в момент движения его ведь там не будет. Сетка теперь только в редакторе, в самой игре убрана, чтобы было посложнее и красивее =) Поменял цвет точки куда надо ставить ящики, чтобы она просвечивалась сквозь щели ящика, а не сливалась из-за одинакового цвета с ящиком, который стоит на ней. |
|||||
17 | Сокобан - Редактор - На двоих |
1 тест |
|||
Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков. Создаём базу из 10 новых уровней игры в Сокобан для двоих. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Самостоятельно добавил второго игрока. Внёс необходимые изменения везде где упоминается работа с первым игроком. Добавил иконку второго игрока рядом с первым. Добавил счётчик/выбор количества игроков роликом мыши или вручную введя число (огрничил лимитами от 1 до 2). При смене количества игроков, автоматически подгружается нужный файл уровней (не поднялась рука удалить уровни для одиночной игры). При сохранении уровня проверяется в каком режиме редактор (на двоих или нет) и на основе этого делаются проверки на второго игрока или нет. Так же уровни для одного и для двоих теперь хранятся в отдельных файлах (загрузка/сохранение происходит относительно того, в каком режиме редактор). |
|||||
18 | Сокобан - Игра - На двоих |
|
|||
Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Повторил пройденное Сложности: найти время Комментарии: Игра запускается в режиме на двоих (в будущем в меню появится пункт выбора режима игры). В зависимости от того, в каком режиме игра запустилась, тот файл с уровнями она и подгружает. Управление реализовано как на клавиатуре, так и при помощи мыши (вначале выбираю кем ходить, потом говорю что ему делать как и ранее, двойной по ящику или обычный куда идти). Второй игрок так же поворачивается в сторону движения. Как видно на скриншоте, реализован реально два слоя объектов (человечек ходит поверх травки и ящики тоже могут на травке лежать). |
|||||
19 | Сокобан - Телефон - TCP/IP протокол |
1 тест |
|||
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Созданию Client-Server приложения Сложности: найти время Комментарии: Запустил сервер и клиент на разных ПК (см. скриншот). Как видно из скриншота, добавил установку адрес/порта для настройки подключения. |
|||||
20 | Сокобан - Игра - На двоих по сети |
1 тест |
|||
На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока. Отчёт отправил: 10558. Иван Воронин Выполнено за 3 час. 00 мин. [Показать отчёт] Научился: Обмену пакетами по сети (Сервер-Клиент) Сложности: найти время Комментарии: В класс Phone добавил метод Stop() для завершения сетевой активности и разрыва связи, если выйти в игровое меню для выбора повторной сессии или поиграть одному/вдвоём на одном ПК. В меню настроек добавил чекбоксы для настройки режима игры (радиобаттон не использовал, так как хватило 3 чекбоксов и 2 окна для ввода порта и адреса сервера). В тайтле информация о том, в каком режиме запущенна игра: Одиночный, На двоих, По сети (Сервер), По сети (Клиент). Модернизировал отрисовку игрового поля, чтобы оно рисовалось быстрее и по центру формы. Так же добавил отступы со всех сторон игрового поля, эдакий бордюр аля ZX-Spectrum (идею по его использованию отложил для финального видео-отчёта). При смене уровня, ресайзе формы и т.д. динамический изменяется и само игровое поле не нарушая пропорции и центровку. Запуск режимов игры реализовал по своей, логическое продолжение наработок с прошлых уроков (не создавал доп. конструкторы). При передаче пакетов о смене уровня, сервер ожидает ответа от клиента о успешном завершении данного деяния, чтобы отправить пакет о сбросе уровня, малоли, вдруг клиент успел уже побегать, чтобы устранить рассинхрон. В связи со своими наработками так же и управление по сети реализовано по своему, дабы минимизировать изменение кода для поддержки всех игровых режимов. Добавлена проверка при отправку/получение на предмет ПРАВ: менять уровни и делать сброс может только сервер. Незначительно изменив код, активировал поддержку управления персонажами при помощи мыши с возможностью автоходов по сети (каждый игрок автоматически управлять только своим персонажем при помощи мыши). Для получения/обработки пакетов особой сложности (типо смена уровня и т.д.) реализовал с использованием буфера из которого полученные пакеты достаются в порядке добавления. |
|||||
21 | Сокобан - Завершение |
|
|||
Игра уже написана, но всегда можно сделать чуть-чуть лучше. На этом уроке мы объединим оба варианта игры в одну программу и загрузим файл с уровнями в ресурсы программы. Теперь в одном ехешнике будет сразу всё! Это финиш!!! Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: Ничему Сложности: найти время Комментарии: Файлы уровней в ресурсы не добавлял, так как в пункте меню присутствует редактор карт. Позже планирую переписать систему хранения уровней, после чего можно будет реализовать передачу уровней от сервера к клиенту, чтобы можно было играть в уникальные карты и пополнять свой набор карт играя по сети с другими. Режим одиночной игры и не убирал, с каждым уроком только добавлял новые режимы, чтобы работали предыдущие. Поиск маршрута так же работает как в одиночке, так и по сети, всё это реализовал на прошлых уроках. Играть вдвоём на одном ПК тоже на прошлых уроках как добавил, так и не убирал, так же в нём работает поиск пути для обоих игроков, реализовал возможность управления мышью любого из них. Курс, где создаём своё портфолио ещё не проходил, поэтому данный пункт сделать не могу, но обязательно выполню, когда пройду данный курс и у меня будет своё портфолио =) Значительно улучшил сетевой режим, так же добавил возможность переподлючения при потери связи, теперь клиент получает текущий уровень на сервере после того как подключился. Добавил индикатор ходов, если игра на двоих, то он суммирует ходы обоих, чтобы было видно, сколько же ходов сделали, чтобы пройти уровень. |
|||||
22 | ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан |
|
|||
Задание: Записать видеообзор игры СОКОБАН. |
|||||
23 | VIP. Бот для игры БАЛДА |
|
|||
Используя текстовый файл из 27400 слов создаём рекурсивный алгоритм подбора слов для популярной игры Балда. |
|||||
Итого: 23 видеоурока |
13 час. 51 мин. 20 тестов |
12 чел. | |||
Финалисты: LINKI, Новопашин Владимир, Tekashnik, Алексей В., zhikharevav, Evgenii Kudriavtcev, chokayes, Дмитрий, Максим Лапшинов, no name, Max, MaxB . |