# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
4 теста |
|||
Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры: 1. Создание редактора уровней. 2. Придумывание этих самых уровней. 3. Создание собственно игры. 4. Решение олимпиадной задачки для добавления ИИ. 5. Переделка игры в режим "на двоих". 6. Написание класса Phone для связи двух программ по сети. 7. Создание сетевой версии игры Sokoban. Будет интересно! В конце видео - первое задание: Научиться играть! :) Ссылка на игру Сокобан Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 40 мин. [Показать отчёт] Научился: Научился играть в Сокобан. Думаю курс будет очень интересным. Сложности: Над некоторыми уровнями пришлось подумать в этой игре. |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы подготовим 6 пиктограмм и две картинки для игры, а также придумаем свой собственный уровень, который запишем в текстовый файл. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 20 час. 40 мин. [Показать отчёт] Научился: Продумывать заранее свою логику в создание программ, мотивировать себя. Сложности: Нарисовать, либо переделать картинки =) |
|||||
3 | Сокобан - Редактор - Загрузка |
|
|||
Мы начинаем создавать редактор уровней для известной логической игры Sokoban. Редактор будет создан за четыре урока. На первом уроке мы создадим класс для загрузки уровня с текстового файла и протестируем его работу. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 2 час. 55 мин. [Показать отчёт] Научился: Работа с классами. Сложности: Вспоминать и привыкать к новому VS + English в меню. Ввожу потихоньку в привычку программирование. |
|||||
4 | Сокобан - Редактор - Интерфейс |
|
|||
На этом уроке мы создадим интерфейс программы и сделаем отображение загруженного уровня на экране. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 3 дня 12 час. 38 мин. [Показать отчёт] Научился: Настройка картинок, использование ресурсов программы (проекта). Написание своих функций для загрузки картинок, изменение динамического размера картинки от размера формы. Сложности: Главное внимательно следить и слушать. Если что-то непонятно - то можно немного назад откатить и пересмотреть. |
|||||
5 | Сокобан - Редактор - Редактирование |
|
|||
На третьем уроке мы сделаем наконец-таки редактирование поля. Также реализуем возможность изменения размера лабиринта. В конце напишем функцию для проверки корректности составленного уровня. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 4 час. 43 мин. [Показать отчёт] Научился: Добавил событие на клик мышки по объекту PictureBox Реализовал отображение выбранной картинки Реализовал метод изменения размеров поля вместе с ограничениями (константы максимального и минимального значения) Написал функцию проверки уровня на наличие ошибок (проверка игрока на уровне и проверка ящика и мест для ящиков) Сложности: Пришлось вспоминать то, что было после отпуска =) Немного поправил картинку (иначе перфекционисту немного бы не понравилось). Остальное все в пределах нормы. |
|||||
6 | Сокобан - Редактор - Сохранение |
|
|||
На четвёртом уроке мы закончим создание редактора уровней. Напишем самую главную функцию для сохранения сделанных изменений в файл. Затем добавим кнопки перехода к следующему и предыдущему уровню. Останется только немного облагородить интерфейс программы. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 5 час. 3 мин. [Показать отчёт] Научился: Создал функцию сохранения уровня в классе. Протестировал пошагово работу данной функции в поисках ошибок. Реализовал переход между уровнями с сохранением. Добавил алгоритм создания нового уровня в конец текстового файла. Сложности: Все в пределах разумного =) |
|||||
7 | Сокобан - Редактор - Улучшение |
|
|||
Допиливаем и дорабатываем редактор до товарного вида. Реализуем ещё несколько фишек. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 час. 45 мин. [Показать отчёт] Научился: Изменение размеров через текстовое поле с возможностью нажатием клавиши Enter. Сделал возможность заполнения прямоугольной области выбранным элементов. Добавил автоматический подсчет ящиков и мест для них на уровне. Сложности: Прохожу мини-марафон. Увеличиваем темп как усвоения, так и запоминания полученной информации =) |
|||||
8 | Сокобан - Редактор - Классика уровней |
1 тест |
|||
На этом уроке вам нужно выбрать любых два классических уровня и создать их в нашей программе-редакторе. Ссылка на классические уровни: https://logic-games.spb.ru/sokoban/ Редактор можно скачать здесь: https://www.videosharp.info/data/soft/SokobanEditor.zip Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 час. 0 мин. [Показать отчёт] Научился: Нашел ошибку в процессе создания уровней. Исправил. Остального ничего сложного не было. |
|||||
9 | Сокобан - Создаём свои уровни |
1 тест |
|||
Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 5 час. 2 мин. [Показать отчёт] Научился: Нашел и парочку создал уровней. Один из них на скрине =) |
|||||
10 | Сокобан - Игра - Интерфейс |
1 тест |
|||
Мы начинаем создание интеллектуальной игры СОКОБАН. У нас уже есть все необходимые классы и уровни для создания полноценной игры. На этом уроке мы создадим форму и настроим интерфейс окна лабиринта. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 15 час. 39 мин. [Показать отчёт] Научился: Создал новый проект для прохождения уровней игры Сокобан. Создал форму и нарисовал заставку экрана (первой формы). Добавил нарисованную кнопку, которая вызывает форму Лабиринта игры. Добавил и настроил панель инструментов. Добавил панель PictureBox. Описал 2 делегата в глобальной части и написал функции отображения объекта и статистики. И откладка + тестирование написанного: в виде теста вывел Игрока на панель PictureBox и статистику. Сложности: Самое долгое ушло на создание как раз на первый: рисование заставки. Очень уж творческая работа! =) |
|||||
11 | Сокобан - Игра - Управление |
3 теста |
|||
Теперь мы создадим класс логики игры Game, используя который, мы реализуем управление человечком курсорными клавишами клавиатуры. А также сделаем переход на следующий уровень. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 день 1 час. 21 мин. [Показать отчёт] Научился: Создал новый класс Game - логика игры. Подключил класс LevelFile и сделал загрузку уровня, его отображение. Реализовал кнопки перехода между уровнями, рестарт. Применил принцип 2 матриц (для неподвижных объектов и подвижных/игрока). Написал функцию обработки клавиш для передвижения Игрока. Реализовал логику движения по пустым клеткам и перемещения ящиков. Вывел статистику и нарисовал поздравительный экран. Сложности: Походу один из самых долгих, но интересных уроков тут =) |
|||||
12 | Сокобан - Решалка - Тестер |
1 тест |
|||
На этом уроке мы напишем программу, которая будет проверять правильность алгоритма поиска решения лабиринта. http://www.videosharp.info/console/task/level=1178 Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 14 час. 21 мин. [Показать отчёт] Научился: Написал тестер (программку), которая проверяет возможное решение/прохождение по лабиринту текущем вариантом. Протестировал с различными Сложности: Если все внимательно слушать и изначально понять правильно задачу, то проблем не возникает! |
|||||
13 | Сокобан - Решалка - Мышка |
1 тест |
|||
Мы начинаем решать задачу по решению игры Сокобан с одним ящиком. Эта задача олимпиадного уровня на применение алгоритма поиска вширь. Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку. Программу мы напишем за два урока. На первом уроке мы создадим вспомогательную функцию MoveAlfa(), которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 10 час. 52 мин. [Показать отчёт] Научился: Написал функцию Init с инициализацией directions. Разобрал и написал функцию перемещения мыши с применением прохода графа методом "поиска вширь". Просмотрел корректное выполнение данной функции пошагово на выявление ошибок и протестировал в различных вариантах. Сделал тестовый лабиринт для данной задачи. Сложности: Найти лабиринт и ввести его через редактор без ошибок =) Вроде отлично получилось, доволен! В остальном - с алгоритмом данным знаком, еще на Pascal реализовывал в графике (с выводом и отображением графа заданного случайными координатами) |
|||||
14 | Сокобан - Решалка - Яблоко |
2 теста |
|||
На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки. Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 день 5 час. 2 мин. [Показать отчёт] Научился: Написал функцию поиска пути от одной точки до другой (игрока) в отдельном классе. Создана на основе ее другой класс, для поиска уже пути игрока и "переноса/толкания" ящика из точки А в точку Б. Изменил описание структур под новые требования Протестировал алгоритм на правильность работы. Сложности: Была найдена ошибка при написании программы, которую исправил при первом запуске. Большие лабиринты считает очень долго, но тут уже в алгоритме дело и думаю это можно будет исправить в дальнейшем =) |
|||||
15 | Сокобан - Решалка - Оптимизация |
1 тест |
|||
На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 2 час. 24 мин. [Показать отчёт] Научился: Оптимизировал алгоритм, дважды. Сложности: Удивлен результату. Вчера при первом варианте оставлял на ночь, не дождался результата, при изменение со списка на Dictionary не дождался (прошло уже минут 30). Через булев-массив решает меньше чем за секунду \(О_о)/ |
|||||
16 | Сокобан - Игра - Автоходы |
1 тест |
|||
Поздравляю, программа уже создана: можно играть, можно ею хвастаться. На этом уроке мы добавим в игру автоходы, чтобы можно было управлять нашим человечком с помощью мышки - указать, куда идти, и даже указать, какой ящик куда нужно поставить. Для этого нам потребуются два класса по решению лабиринта. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 день 3 час. 55 мин. [Показать отчёт] Научился: Подключил 2 класса для поиска пути для Игрока (MouseSolver) и для поиска пути перетаскивания ящика из точки Start до точки Finish (AppleSolver); Добавил для них соответственно 2 обработчика - при нажатия кнопки мышки и двойной клик по ящику; Добивал в проект таймер (Timer) и создал его обработчик; Реализовал автоперемещение Игрока при наличие пути path; Сделал сброс автоходов при нажатии клавиши стрелок; Прошел уровни, используя функцию автоходов. Сложности: Сложного как такового не было, все логично. Форма по завершению всех уровней уже добавлена сразу же, как была нарисована. Остальное все - повысилось удовлетворение данной работой/проектом. Хвастался уже не раз как на работе, так и дома :) |
|||||
17 | Сокобан - Редактор - На двоих |
1 тест |
|||
Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков. Создаём базу из 10 новых уровней игры в Сокобан для двоих. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 5 час. 49 мин. [Показать отчёт] Научился: Нарисовал иконку 2-го Игрока, добавил в ресурсы. Добавил в панель инструментов кнопку для размещения на карте 2-го игрока. Добавил в структуру элемент user2, исправил функции CellToPicture, CharToCell и Cell ToChar. Добавил проверку при сохранении уровня для 2-х игроков. Создал 10 новых уровней для игры СОКОБАН на двоих Сложности: Как всегда, творческая часть - создание уровней. Отнимает много времени =) |
|||||
18 | Сокобан - Игра - На двоих |
|
|||
Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 5 час. 30 мин. [Показать отчёт] Научился: Добавил в ресурсы иконку 2-го Игрока. Скопировал файл с готовыми уровнями на 2 игрока. Добавил в структуру Cell элемент user2 Исправил функции, которые используют элемент user1 на использование 2-х элементов (user1 и user2) - функции CellToPicture, CharToCell и CellToChar. В классе Game исправил алгоритм загрузки уровня, изменил переменную Place mouse на массив Place[] mouse, исправил функцию Step Добавил в обработчик нажатие клавиш для 2-го игрока (цифровые 2, 4, 6, 8 и WASD) Протестировал работу программы Сложности: Все логично и понятно. Только странно выбирать цифровую клавиатуру для управления 2-ым игроком на одном ПК (если это ноутбук, то будет очень не удобно), а не WASD. Для себя реализовал... |
|||||
19 | Сокобан - Телефон - TCP/IP протокол |
1 тест |
|||
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 5 час. 48 мин. [Показать отчёт] Научился: Создал базовый класс Phone и 2 простых класса PhoneServer и PhoneClient; Протестировал работу этих классов; Добавил в базовый класс Phone функцию Start для вызовы "нити"; Функцию Recv переделал через делегат; Протестировал работу с новыми изменениями и временным отключением клиента / сервера. Сложности: Данная тема в C# была не очень знакома, встречался немного на Python. Поэтому знал только основы и логику поверхностно... В целом требуется еще будет повторить данный урок. |
|||||
20 | Сокобан - Игра - На двоих по сети |
1 тест |
|||
На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 1 день 43 мин. [Показать отчёт] Научился: Добавил в проект класс Phone. На форму WelcomeForm добавил режим выбора и поле с подключениями. Добавил 2 конструктора в класс LabirintForm, вызываем нужный конструктор из класса WelcomForm Создал функцию получения данных Recv(byte data) Настроил экземпляр phone и запустить его. В класс LabirintForm добавить переменные my_user и ot_user. Переделал switch обработки нажатых клавиш. Добавил в функцию Recv управление вторым игроком. Добавил в класс Phone добавить параметр IsBackground = true Добавил синхронный рестарт и смену уровня. Вынес вызов функции LoadLevel из Recv Протестировал работу игры на двух ПК. Сложности: В целом все логично и понятно. |
|||||
21 | Сокобан - Завершение |
|
|||
Игра уже написана, но всегда можно сделать чуть-чуть лучше. На этом уроке мы объединим оба варианта игры в одну программу и загрузим файл с уровнями в ресурсы программы. Теперь в одном ехешнике будет сразу всё! Это финиш!!! Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 4 час. 51 мин. [Показать отчёт] Научился: Добавил 2 файла уровней для Одиночной и для игры вдвоем. Добавил режим одиночной игры. Изменил класс LevelFile для загрузки нужного уровня из нужного файла из ресурса. Вернул алгоритм поиска маршрута в одиночную игру. Добавил режим игры вдвоем на одном ПК. Сложности: Если до этого было понятно, то тут тоже не возникло трудностей. WASD - добавлял еще пару уроков назад, видимо "все дороги" ведут к одинаковым решениям у программистов =) |
|||||
22 | ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан |
|
|||
Задание: Записать видеообзор игры СОКОБАН. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 2 дня 23 час. 37 мин. [Показать отчёт] Научился: Сделано, Ура! Записал и сделал видеоролик. Сложности: Создать видеоролик, но все уже пройдено. Следующие будет намного легче =) Видеообзор: V0xDx2c3If8 |
|||||
23 | VIP. Бот для игры БАЛДА |
|
|||
Используя текстовый файл из 27400 слов создаём рекурсивный алгоритм подбора слов для популярной игры Балда. Отчёт отправил: 18493. Evgenii Kudriavtcev Выполнено за 15 час. 28 мин. [Показать отчёт] Научился: Обдумал интерфейс программы Создал вспомогательные функции Создал функцию рекурсивного поиска Ускорил поиск добавлением еще одного массива "суффиксов" Поиграл игру с другими игроками. |
|||||
Итого: 23 видеоурока |
13 час. 51 мин. 20 тестов |
12 чел. | |||
Финалисты: LINKI, Новопашин Владимир, Tekashnik, Алексей В., zhikharevav, Evgenii Kudriavtcev, chokayes, Дмитрий, Максим Лапшинов, no name, Max, MaxB . |