
Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН.
Мы вместе пройдём по всем этапам создания законченной интеллектуальной игры:
Создание редактора уровней.
Придумывание этих самых уровней.
Создание собственно игры.
Решение олимпиадной задачки для добавления ИИ.
Переделка игры в режим "на двоих".
Написание класса Phone для связи двух программ по сети.
Создание сетевой версии игры Sokoban.
Будет интересно!
В конце видео - первое задание: Научиться играть! :)
Самостоятельное задание:
Просмотреть видео.
Найти игру Sokoban, перейдя по ссылке внизу описания урока.
Пройти 10 уровней или больше.
Приложить скриншот СПИСКА пройденных уровней (сами уровни не надо).
Приложить скриншот последнего УРОВНЯ на последнем шаге.
На этом уроке мы подготовим 6 пиктограмм и две картинки для игры, а также придумаем свой собственный уровень, который запишем в текстовый файл.
Необходимо нарисовать 6 маленьких квадратных картинок:
abox.png - ящик
here.png - место, куда нужно поставить ящик
done.png - ящик поставленный на своё место
none.png - пустая клетка, можно типа "травы" что-то сделать
user.png - человечек
wall.png - стена
Размер картинок может быть 32x32 или чуть меньше/больше.
Также нужно сделать две картинки для старта и финиша:
start.png - картинка для первой формы
finis.png - картинка поздравления после завершения игры
Самостоятельное задание:
Нарисовать 6 маленьких пиктограмм квадратного размера.
Нарисовать 2 картинки для старта и финиша игры.
Приложить скриншот 6 пиктограмм и 2 картинок.
Приложить скриншот своего уровня в текстовом файле.
Мы начинаем создавать редактор уровней для известной логической игры Sokoban.
Редактор будет создан за четыре урока. На первом уроке мы создадим класс для загрузки уровня с текстового файла и протестируем его работу.
Почитайте о Сокобане на странице old.computerra.ru , перейдя по ссылке внизу описания урока.
Также внизу приведено описание правил записи ходов и позиций в этой игре.
Самостоятельное задание:
Создать текстовый файл levels.txt и нарисовать в нём три уровня.
Описать enum Cell в глобальной области проекта.
Создать класс LevelFile.
Реализовать в нём метод LoadLevel (int level_nr).
Реализовать метод ReadLevelHeader с возвращаемыми параметрами.
Написать вспомогательные функции CharToCell и CellToChar.
Протестировать программу в режиме пошагового выполнения.
Приложить скриншот текстового файла levels.txt
Приложить скриншот VS во время пошагового выполнения, чтобы было видно содержимое матрицы cell.
На этом уроке мы создадим интерфейс программы и сделаем отображение загруженного уровня на экране.
Самостоятельное задание:
Найти/нарисовать 6 картинок и добавить их в ресурсы программы.
Настроить параметры формы, добавить иконку, название и т. д.
Добавить панель инструментов ToolStrip и добавить на неё 6 кнопочек.
Добавить панель для размещения уровня и поместить на неё PictureBox.
Написать функцию InitPictures().
Написать функцию LoadPictures().
Написать вспомогательную функцию CellToImage().
Реализовать метод SokobanEditor_Resize для динамического изменения размера картинок.
Приложить скриншот запущенной программой рядом с текстовым файлом.
На третьем уроке мы сделаем наконец-таки редактирование поля. Также реализуем возможность изменения размера лабиринта. В конце напишем функцию для проверки корректности составленного уровня.
Самостоятельное задание:
Добавить события на выбор каждой картинки.
Написать функцию SetCurrentCell, реализовать отображение выбранной картинки.
Добавить событие на клик мышкой по PictureBox.
Записывать в поле PictureBox.Tag координаты поля.
Написать функцию ShowCell() и проверить редактирование поля.
Сделать, чтобы на карту нельзя было добавлять более одного человечка.
Добавить константы, ограничивающие размер поля.
Реализовать метод для изменения размера поля и добавить кнопки для его вызова.
Написать функции IsGoodLevel() и CountItems().
На четвёртом уроке мы закончим создание редактора уровней. Напишем самую главную функцию для сохранения сделанных изменений в файл. Затем добавим кнопки перехода к следующему и предыдущему уровню. Останется только немного облагородить интерфейс программы.
Самостоятельное задание:
Разместить кнопочку для сохранения.
Написать функцию SaveLevel() в классе LevelFile.
Пошагово пройтись по алгоритму сохранения при увеличении и уменьшении высоты поля!
Разместить кнопочки для перехода к следующему и предыдущему уровню.
Реализовать переход между уровнями с сохранением лабиринта.
Добавить алгоритм для добавления нового уровня в конец текстового файла.
Приложить скриншот готового редактора уровней игры Сокобан.
Допиливаем и дорабатываем редактор до товарного вида. Реализуем ещё несколько фишек.
Самостоятельное задание:
Добавить картинки на все пункты меню.
Изменить размер лабиринта через текстовое поле.
Сделать прямоугольное заполнение лабиринта выбранным объектом.
Сделать счётчик ящиков и парковочных мест для них.
Приложить скриншот готового редактора.
На этом уроке вам нужно выбрать любых два классических уровня и создать их в нашей программе-редакторе.
Ссылки на классические уровни и редактор приведены внизу описания урока.
Самостоятельное задание:
Выбрать два уровня, написать их номера.
"Скопировать" эти уровни в генераторе.
Приложить скриншоты этих уровней.
Твоя задача - подготовить базу уровней для игры Сокобан.
Самостоятельное задание:
Найти уровни в интернете.
Придумать парочку своих уровней.
Создать в редакторе минимум 10 уровней.
Приложить скриншоты уровней, которые ты придумал сам!
Мы начинаем создание интеллектуальной игры СОКОБАН. У нас уже есть все необходимые классы и уровни для создания полноценной игры. На этом уроке мы создадим форму и настроим интерфейс окна лабиринта.
Самостоятельное задание:
Нарисовать заставку для первого Welcome-экрана.
Создать проект и настроить форму.
Добавить в ресурсы картинки для объектов.
Создать форму для Лабиринта и вызвать её из первой.
Добавить и настроить панель инструментов.
Вывести на панель матрицу PictureBox'ов.
Описать два делегата в глобальной части.
Написать функцию отображения объекта и статистики.
Протестировать их работу: вывести человечка и статистику.
Теперь мы создадим класс логики игры Game для управления главным героем. А также сделаем переход на следующий уровень.
Самостоятельное задание:
Создать класс Game для логики игры.
Подключить класс LevelFile из проекта Sokoban Editor.
Сделать загрузку уровня и его отображение.
Реализовать кнопочки перехода на предыдущий и следующий уровень.
Понять принцип использование матриц map и top для хранения лабиринта.
Написать инициализацию этих матриц при загрузке лабиринта (через switch).
Написать обработчик нажатых клавиш для передвижения человечка.
Написать функцию для сброса лабиринта по нажатию клавиши Escape.
Проработать функцию Game.Step (int sx, int sy) - главный логический движок игры!
Реализовать логику движения по пустым клеткам и логику перемещения ящиков.
Добавить подсчёт статистики через переменные placed и totals.
Сделать отображение номера уровня с информированием о его прохождении.
Добавить переменную last_level_nr и ограничить переключение между уровнями.
Добавить изменение размера клеток лабиринта при изменении размера формы.
Вывести поздравительный экран после прохождения всех уровней.
На этом уроке мы напишем программу, которая будет проверять правильность алгоритма поиска решения лабиринта.
Подробное описание задачи "Мышка Альфа в лабиринте", которое поможет написать данную программу, можно увидеть, перейдя по ссылке внизу.
Самостоятельное задание:
Написать тестер.
Проверить его работу.
Мы начинаем решать задачу по решению игры Сокобан с одним ящиком. Эта задача олимпиадного уровня на применение алгоритма поиска вширь. Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку. Программу мы напишем за два урока.
На первом уроке мы создадим вспомогательную функцию MoveAlfa(), которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём.
Самостоятельное задание:
Написать функцию для загрузки лабиринта из файла.
Написать функцию Init() с инициализацией списка directions.
Разобрать и написать функцию MoveAlfa().
Посмотреть на работу этой функции пошаговым выполнением алгоритма.
Протестировать работу программы на разных лабиринтах с помощью программы tester.
Приложить скриншот с лабиринтом и маршрутом движения мышки до своего домика.
На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки. Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений.
Самостоятельное задание:
Вынести функцию MoveAlfa в отдельный класс AlfaSolver.
Создать класс AppleSolver как копию первого класса.
Изменить описания структур под новые требования.
Разобраться и переработать алгоритм поиска вширь.
На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Самостоятельное задание:
Оптимизировать свой алгоритм.
Порадоваться результату.
На отчёте показать время работы прежней и оптимизированной программы.
Поздравляю, программа уже создана: можно играть, можно ею хвастаться. На этом уроке мы добавим в игру автоходы, чтобы можно было управлять нашим человечком с помощью мышки - указать, куда идти, и даже указать, какой ящик куда нужно поставить. Для этого нам потребуются два класса по решению лабиринта.
Самостоятельное задание:
Подключить к проекту класс MouseSolver.cs .
Добавить обработчик нажатия мышкой на клетках лабиринта.
После клика по пустой клетке лабиринта - вызвать функцию поиска маршрута.
Добавить в проект таймер и создать его обработчик.
Реализовать авто-движение человечка при наличии маршрута path.
Сделать сброс автоходов при нажатии любой клавиши.
Подключить к проекту класс AppleSolver.cs .
Добавить обработчик двойного нажатия мышкой на клетках лабиринта.
Сохранять координаты выделенного ящика.
Доработать функцию — вызывать поиск маршрута для перемещения ящика.
Пройти все уровни игры, используя функцию автоходов.
Похвастаться своей программой и порекомендовать наш сайт друзьям! :)
Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков. Создаём базу из 10 новых уровней игры в Сокобан для двоих.
Самостоятельное задание:
Нарисовать второго человечка и добавить его в ресурсы.
Добавить на панель инструментов кнопочку для размещения второго игрока.
Добавить в структуру Cell элемент user2.
Исправить функцию CellToPicture.
Исправить функции CharToCell и CellToChar в классе LevelFile.
Доработать алгоритм проверки корректности сохраняемого уровня.
Очистить файл levels.txt .
Создать 10 новых уровней для игры в Сокобан двоём.
Приложить два скриншота с новыми уровнями.
Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Самостоятельное задание:
Добавить в ресурсы рисунок второго человечка.
Скопировать файл с уровнями в папку проекта bin\Debug .
Добавить в структуру Cell элемент user2.
Исправить функцию CellToPicture.
Исправить функции CharToCell и CellToChar в классе LevelFile.
В классе Game исправить алгоритм загрузки уровня.
В классе Game изменить переменную Place mouse в массив.
В классе Game изменить функцию Step (int user_nr, int sx, int sy).
Добавить обрабочтик цифровых клавиш 2, 4, 6, 8.
Протестировать работу.
Приложить скриншот запущенной игры.
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами.
Самостоятельное задание:
Создать базовый класс Phone.
Создать простую версию классов PhoneServer и PhoneClient.
Протестировать работу этих классов.
Добавить в базовый класс Phone функцию Start для вызова нити.
Переделать функцию Recv через делегат.
Протестировать работу классов с временным отключением клиента / сервера.
Сделать скриншот, на котором будет виден процесс работы программы.
На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих. Мы будем использовать телефонный класс Phone с прошлого урока.
Самостоятельное задание:
Добавить в проект комплекс классов Phone.
На WelcomeForm добавить выбор режима работы и поле с данными для подключения.
Вызывать нужный конструктор из класса WelcomeForm.
Добавить два конструктора в класс LabirintForm.
Создать функцию получения данных Recv (byte data).
Настроить экземпляр phone и запустить его.
В класс LabirintForm добавить переменные my_user и ot_user.
Переделать switch обработки нажатых клавиш.
Добавить в функцию Recv управление другим человечком.
Добавить в класс Phone параметр IsBackground = true.
Добавить синхронный рестарт уровня.
Добавить синхронную смену уровня.
Вынести вызов LoadLevel из функции Recv !!!
Протестировать работу двух программ с разных компьютеров.
Приложить фотографию двух компьютеров, на которых запущены эти программы.
Игра уже написана, но всегда можно сделать чуть-чуть лучше. На этом уроке мы объединим оба варианта игры в одну программу и загрузим файл с уровнями в ресурсы программы. Теперь в одном ехе-шнике будет сразу всё!
Это финиш!!!
Самостоятельное задание:
Добавить в ресурсы оба файла уровней - levels1.txt, levels2.txt .
Добавить режим Одиночной игры.
Изменить класс LevelFile для загрузки нужного уровня из ресурсов.
Вернуть алгоритмы поиска маршрутов в одиночную игру.
Добавить режим Одиночной игры для двоих.
Добавить результат в своё портфолио!
Задание:
Записать видеообзор игры СОКОБАН.
Поздравляю!
Ты полностью прошёл курс СОКОБАН.
А это значит, что ты — победитель! Ты — упорный, настойчивый и целеустремлённый Программист!Наверняка, тебе есть что рассказать, поделиться радостью своих достижений.
Именно это я и хочу попросить тебя сделать. А именно:
Запиши видео обзор любой программы из этого курса.
Видео-отзыв необходимо закачать на YouTube и опубликовать ссылку в комментариях. Инструкцию по созданию видео-отзывов смотри на видео.
К отчёту приложи скриншот папки со всеми твоими программами и архив исходников всех созданных программ.
Самостоятельное задание:
Собрать архив всех программ этого видеокурса.
Записать видео обзор программы и выложить на Youtube.
Какой курс ты будешь проходить следующим?
Используя текстовый файл из 27400 слов, создаём рекурсивный алгоритм подбора слов для популярной игры Балда.
Самостоятельное задание:
Скачать файл со словами, перейдя по ссылке внизу.
Сделать интерфейс программы.
Создать вспомогательные функции.
Создать функцию рекурсивного поиска.
* Ускорить поиск.
* Поиграть в балду.
Сделать скриншот программы с вариантами.
Сокобан - классическая логическая игра, в которой нужно растолкать ящики по указанным местам. Такую игру можно написать за полчаса, но в этом курсе вас ждёт целый игровой комплекс. Помимо самой игры мы напишем редактор уровней, алгоритм автоходов, сетевой режим для кооперативной игры вдвоём и придумаем сборник своих уровней.
Мы вместе пройдём по всем этапам создания законченной интеллектуальной игры:
Создание редактора уровней.
Придумывание этих самых уровней.
Создание собственно игры.
Решение олимпиадной задачки для добавления ИИ.
Переделка игры в режим "на двоих".
Написание класса Phone для связи двух программ по сети.
Создание сетевой версии игры Sokoban.
Оформление итоговой программы.
Сокобан - классическая логическая игра, в которой нужно растолкать ящики по указанным местам. Такую игру можно написать за полчаса, но в этом курсе вас ждёт целый игровой комплекс. Помимо самой игры мы напишем редактор уровней, алгоритм автоходов, сетевой режим для кооперативной игры вдвоём и придумаем сборник своих уровней.
Мы вместе пройдём по всем этапам создания законченной интеллектуальной игры:
Создание редактора уровней.
Придумывание этих самых уровней.
Создание собственно игры.
Решение олимпиадной задачки для добавления ИИ.
Переделка игры в режим "на двоих".
Написание класса Phone для связи двух программ по сети.
Создание сетевой версии игры Sokoban.
Оформление итоговой программы.
Сокобан - классическая логическая игра, в которой нужно растолкать ящики по указанным местам. Такую игру можно написать за полчаса, но в этом курсе вас ждёт целый игровой комплекс. Помимо самой игры мы напишем редактор уровней, алгоритм автоходов, сетевой режим для кооперативной игры вдвоём и придумаем сборник своих уровней.
Технологии: C#, Windows Forms, Алгоритмы, TCP/IP, Sockets.