# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 | Планирование |
1 тест |
|||
Мы начинаем создание игровой программы Морской Бой. 1. Создать объектную модель. 2. Реализовать классы Корабль и Море. 3. Спроектировать интерфейс игры. DataGridView. 4. Написать Искусственный интеллект. 5. Реализовать игру с компьютером. 6. Реализовать сетевую версию игры на двоих. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 40 мин. [Показать отчёт] Научился: Повторил работу со статическими переменными и массивами. Сложности: Проблем не было. Комментарии: Все ок. |
|||||
2 | Море и Корабль |
1 тест |
|||
На этом уроке мы создадим "ядро" программы, два основных класса - Корабль и Море. А в конце урока протестируем их работу. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Повторил работу с матрицами boost::ublas, указателями unique_ptr. Сложности: Проблем не было. Комментарии: Без использования наследования и полиморфизма трудно назвать полученную систему классов объекто-ориентированной. Страуструп называет такой стиль программирования - абстракцией данных, когда создаются мелкие служебные классы, которые инкапсулируют внутри себя данные и открывают к ним доступ через разрешенный интерфейс. Это подготовительный этап к ООП, переходный от процедурного стиля. Не очень нравится реализация классов Моря и Корабля, например их конструкторы не работают как надо. Но это все сложности, они дадут о себе знать, когда программа будет эволюционировать. На данный момент это не важно, реализация системы получилась простой и ясной, понравилась идея двух массивов, здесь она тоже кстати. Евгений Витольдович хорошо продумал, чтобы код получился как можно проще и понятнее, спасибо:) |
|||||
3 | Редактор и Сетка |
|
|||
На этом уроке мы разместим и настроим DataGridView. Потом расширим класс Море до Редактора, добавив методы для автоматического размещения всех кораблей. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 40 мин. [Показать отчёт] Научился: Повторил работу с компонентом QTableWidget - аналог DataGridView. Сложности: Проблем не было. Комментарии: Интересный способ случайного размещения кораблей. Каждый раз, когда проверял отчеты формулистов по морскому бою я задавался вопросом - почему на верхнем заголовке таблиц написано РЕСПУБЛИКА? Теперь стало понятно, это оказалось предложением одного из формулистов :) |
|||||
4 | Делегаты отображения |
1 тест |
|||
На этом уроке мы перенесём функции из Моря в редактор и создадим Делегаты для отображения Кораблей и Выстрелов. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Повторил работу с делегатами. Сложности: Сложностей не было. Комментарии: На верхнем скриншоте раскраска клетки поля при промахе. На нижнем - рассмотрены случаи попадания и потопления корабля. |
|||||
5 | Установка кораблей |
1 тест |
|||
На этом уроке мы дадим возможность пользователю устанавливать корабли мышкой и с клавиатуры. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Повторил обработку событий мышки и клавиатуры. Сложности: Реализовать выделение ячеек. Комментарии: Хороший урок, попрактиковался с компонентом QTableWidget для вывода таблицы, были некоторые проблемы с обработкой выделения мышкой ячеек и выводом результата добавления. |
|||||
6 | Олимпиада - Самый лучший алгоритм |
|
|||
На участие в олимпиаде было прислано 10 работ. В этом видео мы проводим тестирование всех программ. Домашнее задание - составить словесный алгоритм ИИ. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Познакомился с разными вариантами алгоритмов ИИ для игры в Морской бой. Сложности: Сложностей не было. Комментарии: Понравились алгоритмы 4004 и public. В моем случае я бы так же сначала искал 4-палубник, попутно сразу добивая найденные корабли, и после потопления 4-палубника, искал бы 2-палубники. |
|||||
7 | Олимпиада - Угадай число |
|
|||
Класс Secret загадал число. Вам нужно написать класс Strategy, который сможет его отгадать. Инструкции в видео-уроке. Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Повторил работу с генератором случайных чисел. Сложности: Проблем не было. Комментарии: Хорошая разминка, понравилось разделение классов. |
|||||
8 | Олимпиада - Создание ИИ - Стратегия |
|
|||
Олимпиадная задача - создать алгоритм ИИ для игры в Морской бой. Подробности на видео. Отчёт отправил: 7276. Ильшат Выполнено за 4 час. 20 мин. [Показать отчёт] Научился: Познакомился в библиотекой консольного вывода ncurses. Сложности: Реализовать алгоритм. Комментарии: На первом скриншоте результат работы алгоритма для прямого расположения кораблей и ниже для случайного. На втором скриншоте при запуске с командой строки задаю количество тестов случайных расположений, нахожу минимальное, среднее и максимальное количество шагов. Спасибо за отличный урок, хорошо попрактиковался:) |
|||||
9 | Олимпиада - Создание ИИ - Шаблон ударов |
|
|||
Алгоритм искусственного интеллекта для игры в Морской бой состоит из двух этапов: 1. нанесение ударов по шаблону для поиска 4-палубного и 2-палубных. 2. добивание раненного корабля и пометка клеток вокруг потопленного корабля. На этом уроке разберём и реализуем первый этап. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Повторил создание и обработку двумерных массивов. Сложности: Небольшая ошибка, опечатка в границах цикла при инициализации двумерного массива. Комментарии: Интересный алгоритм, случайный выбор из матрицы put ячейки с наибольшим значением веса. |
|||||
10 | Олимпиада - Создание ИИ - Добивание корабля |
1 тест |
|||
Алгоритм искусственного интеллекта для игры в Морской бой состоит из двух этапов: 1. нанесение ударов по шаблону для поиска 4-палубного и 2-палубных. 2. добивание раненного корабля и пометка клеток вокруг потопленного корабля. На этом уроке разберём и реализуем второй этап. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Повторение материала из прошлых уроков, работа с рекурсией. Сложности: Проблем не было. Комментарии: Все ок, хорошо придумано использовать вывод матрицы put на экран, наглядно. |
|||||
11 | Рефакторинг кода |
|
|||
На этом уроке мы займёмся рефакторингом нашего проекта. Создадим класс SeaGrid, в который перенесём некоторые функции из класса формы. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 20 мин. [Показать отчёт] Научился: Повторение рефакторинга. Сложности: Проблем не было. Комментарии: Все ок, рефакторинг на пользу, меньше деталей в классе формы) |
|||||
12 | Интерфейс игры |
1 тест |
|||
На этом уроке мы создадим интерфейс пользователя - разместим несколько кнопочек и запрограммируем их. Также создадим перечисление всех режимов игры. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Повторил работу с интерфейсом программы, обработку событий мышки. Сложности: Сложностей не было. Комментарии: Реализовал секретную функцию, предложенную в уроке: два клика правой кнопкой мышки показывают корабли компьютера, клик левой кнопкой - скрывает. |
|||||
13 | Последний Бой! |
|
|||
На этом уроке мы закончим создание Морского боя. Сделаем отображение выстрелов пользователя. Подключим класс Mission и сделаем ход компьютера. Ходы будут выполняться в порядке очереди. Нам потребуется таймер для постепенного отображения серии ходов компьютера. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Повторил работу с таймером, настройкой интерфейса программы. Сложности: Проблем не было. Комментарии: Компьютер играет очень даже здорово:) |
|||||
14 | ФИНАЛЬНЫЙ УРОК |
1 тест |
|||
Записать видео обзор Морского боя. созданного на этом курсе. Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Повторил создание видео обзоров. Сложности: Проблем не было. Комментарии: Спасибо за отличный курс :) Видеообзор: https://youtu.be/m_CHnhpE9u4 |
|||||
15 | VIP. Анимированный кружок |
|
|||
На этом уроке мы создадим двигающийся кружок, из которого потом сделаем анимированый кубик. Задание: Создать два класса с наследованием. Сделать плавное перемещение кружка. Отчёт отправил: 7276. Ильшат Выполнено за 40 мин. [Показать отчёт] Научился: Повторил работу с графикой: классы Graphics, Pen, Bitmap. Сложности: Сложностей не было. Комментарии: Интересная задумка, идем дальше) |
|||||
16 | VIP. Анимированный кубик |
|
|||
На этом уроке мы создадим массив из кружков, они будут сначала двигаться случайно, похоже на бильярд. Дальше мы создадим правила для их передвижения и в конечном итоге реализуем анимированный игральный кубик. Задание: Нарисовать верхнюю сторону игрального кубика с шестью анимированными точками для смены чисел. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 50 мин. [Показать отчёт] Научился: Повторил работу с двумерными массивами в C#. Сложности: Организовать работу программы с использованием классов. Комментарии: Интересная тема, анимация завораживает. Понравилась идея представления значения числа на игральном кубике в виде двумерного массива. По началу, меня это не устраивало, реализовал в виде одномерного массива, но получилось так, что решение Евгения Витольдовича лучше отражает идею, по коду легче понять замысел. Однако синтаксис этих вложенных конструкций меня не устраивал. Поэтому добавил дополнительные переменные для выделения значений из массивов. Добавил классы NumberArena (абстракция числа на кубике), Drawer(рисовальщик) и GameLogic(внешний класс, который всем управляет и вызывается из формы). По ходу разработки было много сомнений. Конечно, синтаксически добавить класс не составляет никаких проблем, даже есть такой способ в рефакторинге "выделение класса" и прочие мелкие махинации с кодом. Проблемы были в моменте связи классов. И тут-то мне не нравилось, что классы знают много друг о друге и выполняют чужую работу. Не буду подробно описывать все эти моменты, в итоге удалил класс Drawer и передал его обязанности GameLogic. Своим полученным решением не доволен, но доволен тем, что появились идеи для дальнейших решений, которыми займусь в ближайшем будущем. Спасибо, Евгений Витольдович) |
|||||
Итого: 16 видеоуроков |
9 час. 36 мин. 7 тестов |
14 чел. | |||
Финалисты: Алексей В., Ильшат, Станислав, Tekashnik, Новопашин Владимир, LINKI, Dimon, Yefim, chokayes, Николай Денисов, Максим Лапшинов, Александр, vip, MaxB . |