# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
3 теста |
|||
Дорога длиной в тысячу миль начинается с первого шага. На этом уроке мы поговорим о предстоящем путешествии и сделаем наш первый шаг - создадим консольное приложение. Отчёт отправил: 13417. Chip Выполнено за 1 час. 3 мин. [Показать отчёт] Научился: Повторил процесс создания проекта с помощью autotools. Сложности: Проблем не было. |
|||||
2 | Марионетка |
|
|||
На этом слайде мы сделаем управление символом с клавиатуры.
Отчёт отправил: 13417. Chip Выполнено за 1 час. 58 мин. [Показать отчёт] Научился: Для вывода на экран использовал библиотеку ncurses. Потребовалось время, чтобы вспомнить как создавать окно, выводить строку, символ и считывать нажатую клавишу и перемещать курсор. Сложности: Проблем не было. |
|||||
3 | Представление выделяется |
2 теста |
|||
Show must go on! На этом слайде мы вынесем команды для работы с экранам в отдельный класс View. Отчёт отправил: 13417. Chip Выполнено за 35 мин. [Показать отчёт] Научился: Далее можно выделить в отдельный класс обработку ввода пользователя. Сложности: Не было. |
|||||
4 | Модель игры |
|
|||
На этом слайде мы выделим логику, модель в отдельный класс Game.
Отчёт отправил: 13417. Chip Выполнено за 31 мин. [Показать отчёт] Научился: Красиво получается, логика постепенно отделяется от представления. Сложности: Проблем не было. |
|||||
5 | Контроллер не спешит |
1 тест |
|||
На этом слайде мы сформулируем задачи контроллера и выделим его в отдельный класс.
Отчёт отправил: 13417. Chip Выполнено за 3 час. 47 мин. [Показать отчёт] Научился: Для реализации постоянного движения объекта, я разделил программу на два потока. Первый считывает ввод пользователя и вызывает move с нужным смещением. Второй поток циклично перемещает объект с текущими смещениями. Для защиты от гонок добавил мьютексы. Сложности: Реализовать постоянное движение объекта в выбранном направлении. Видеообзор: Pi36vZVkyEw |
|||||
6 | Цветной телевизор |
1 тест |
|||
На этом слайде мы создадим ещё одно представление и задействуем его в программе.
Отчёт отправил: 13417. Chip Выполнено за 3 час. 58 мин. [Показать отчёт] Научился: Повторил как использовать цвета для вывода информации. Для простоты переключения представлений, можно создать общий интерфейс и реализовать через него требуемые представления, с цветов или без. |
|||||
7 | Видный интерфейс |
2 теста |
|||
На этом слайде мы создадим интерфейс IView и задействуем его в классе Game. Класс Game теперь не зависит от конкретной реализации его представления. Попробуйте сделать то же самое через абстрактный класс. Отчёт отправил: 13417. Chip Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Для проверки интерфейса, добавил третье, альтернативное представление, которое выводит другой текст белым цветом на зеленом фоне. |
|||||
8 | Игра в библиотеке |
|
|||
На этом слайде мы выделим логику игру в отдельную библиотеку.
Отчёт отправил: 13417. Chip Выполнено за 1 час. 18 мин. [Показать отчёт] Научился: Порадовал момент на видео 3:35 - "Пишу программу одной мышкой". Удивило что настолько просто можно, буквально, перенести мышкой класс из основного проекта в библиотеку. |
|||||
9 | 2. Рефакторинг. Перечисление субъектов |
|
|||
Приступаем к рефакторингу. На этом слайде мы составим список "главных героев", которые могут быть отображены на экране. Отчёт отправил: 13417. Chip Выполнено за 34 мин. [Показать отчёт] Научился: Повторил как создавать и использовать enum. Задействовал перечисление в представлениях. |
|||||
10 | Показ героя на экране |
|
|||
На этом слайде мы задействуем перечисление субъектов в интерфейсе представления и во всех его реализациях.
Отчёт отправил: 13417. Chip Выполнено за 57 мин. [Показать отчёт] Научился: В уроке было наглядно показано, что если менять внешний интерфейс, то ломается вся программа. Поэтому временное решение в качестве переходника имеет место жить, чтобы постепенно перевести пользователей библиотеки на новый способ использования библиотеки. |
|||||
11 | Координатная структура |
|
|||
На этом слайде мы создадим структуру Coord для хранения координат объекта на карте.
Отчёт отправил: 13417. Chip Выполнено за 29 мин. [Показать отчёт] Научился: Повторил как создавать и использовать структуры. |
|||||
12 | Карта сокровищ |
|
|||
На этом слайде мы создадим класс Level, в котором будет храниться карта уровня. Благодаря этому классы мы сможем узнать, что в какой клетке поля находится. Отчёт отправил: 13417. Chip Выполнено за 1 час. 44 мин. [Показать отчёт] Научился: Повторил как создавать и использовать шаблоны классов. Создал шаблон класса двумерного массива Matrix, использовал в классе Level его специализацию Matrix<Subject>. |
|||||
13 | Шаги по карте |
1 тест |
|||
На этом слайде мы задействуем класс Level в классе логики Game
Отчёт отправил: 13417. Chip Выполнено за 52 мин. [Показать отчёт] Научился: Для того, чтобы класс Level сам отображал изменения в представлении можно использовать функцию обратного вызова или делегат, который отобразит изменения в локальной области экрана. |
|||||
14 | Генерация лабиринта |
1 тест |
|||
На этом слайде мы сгенерируем лабиринт и отобразим его на экране.
Отчёт отправил: 13417. Chip Выполнено за 5 час. 10 мин. [Показать отчёт] Научился: Повторил создание и использование шаблонов, конструкторов, операторов присваивания. Способ создания лабиринта похож на задания в курсе Графические циклы. |
|||||
15 | Координатный перебор |
1 тест |
|||
На этом слайде мы создадим в структуре Coord метод для перебора всех координат, ограниченных указанным размером
Отчёт отправил: 13417. Chip Выполнено за 3 час. 28 мин. [Показать отчёт] Научился: В моем случае нет оператора yield, но я могу симулировать его поведение через создание шаблонного класса итераторов. Для этого потребовалось научиться создавать свой итератор. В итоге, получилась схожая с видеоуроком синтаксическая конструкция, где в цикле можно перебрать все элементы. |
|||||
16 | Подходящий размер! |
|
|||
На этом слайде мы добавим проверки размеров нашего уровня. Для этого мы добавим в структуру Coord ещё один метод Coord.InSize(). Отчёт отправил: 13417. Chip Выполнено за 36 мин. [Показать отчёт] Научился: Простой и понятный урок, добавили ограничение на перемещение игрока в рамках игрового поля. |
|||||
17 | Правила игры |
1 тест |
|||
На этом слайде мы добавим проверку правил игры, чтобы главный герой не мог забираться на стенки.
Отчёт отправил: 13417. Chip Выполнено за 29 мин. [Показать отчёт] Научился: Добавили проверки на место перемещения, теперь игрок не забирается на стенки. |
|||||
18 | Дорога из жёлтого кирпича |
1 тест |
|||
На этом слайде мы разукрасим уровень - установим разные цвета для разных субъектов
Отчёт отправил: 13417. Chip Выполнено за 7 мин. [Показать отчёт] Научился: Повторил как изменять цвет выводимого текста. |
|||||
19 | Ищи ветра в поле |
1 тест |
|||
На этом слайде мы напишем метод, который найдёт месторасположение субъекта на карте. Воспользуемся этим методом для инициализации первоначальных координат игрока. Отчёт отправил: 13417. Chip Выполнено за 32 мин. [Показать отчёт] Научился: Повторил поиск элемента в последовательности. |
|||||
20 | Координатный рефакторинг |
1 тест |
|||
На этом слайде мы добавим в структуру Coord операторы == и !=, а также добавим метод проверки нахождения координат на краю поля. Отчёт отправил: 13417. Chip Выполнено за 35 мин. [Показать отчёт] Научился: Повторил перегрузку операторов, генерацию исключений, узнал про #region. |
|||||
21 | Собери монетки |
1 тест |
|||
На этом слайде мы добавим в игру монетки, научимся их собирать и при этом добавлять новые. Отчёт отправил: 13417. Chip Выполнено за 3 час. 23 мин. [Показать отчёт] Научился: Повторил использование генератора случайных чисел. Добавил подсчёт и отображение очков. Видеообзор: hzvhgf9lBeM |
|||||
22 | 3. Тестирование. Тестовый прогон |
|
|||
Мы приступаем к очередному этапу созданию программы - написание unit-тестов. На этом слайде мы создадим класс тестирования для структуры Coord. Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: Для создания модульных тестов выбрал Catch2, научился пользоваться этой библиотекой, подружил с Autotools. |
|||||
23 | Тест обратной стороны Луны |
|
|||
На этом слайде мы напишем тесты для методов InSize() и OnSide().
Отчёт отправил: 13417. Chip Выполнено за 1 час. 40 мин. [Показать отчёт] Научился: Я составил список утверждений на базе условий проверок в функциях in_size и on_side и для наглядности оформил каждое утверждение в отдельную тестовую функцию. Достаточно сложно придумать хорошее имя для тестовой функции. |
|||||
24 | Случайное тестирование |
|
|||
На этом слайде мы напишем тест для методов Coord.YieldCoords() и Coord.GetRandom()
Отчёт отправил: 13417. Chip Выполнено за 16 мин. [Показать отчёт] Научился: В моей программе в структуре Coord нет методов YieldCoord, GetRandom, тестировать нечего. Требуемый функционал расположен в классе Level, поэтому протестирую эти два метода в следующих видео уроках. |
|||||
25 | Лабиринты тестирования |
1 тест |
|||
На этом слайде мы создадим тест для класса Level
Отчёт отправил: 13417. Chip Выполнено за 48 мин. [Показать отчёт] Научился: Научился использовать фикстуры в модульных тестах Catch2. |
|||||
26 | Поиск монеток на поле Дураков |
|
|||
На этом слайде мы закончим создание тестов для класса Level
Отчёт отправил: 13417. Chip Выполнено за 1 час. 1 мин. [Показать отчёт] Научился: Благодаря модульным тестам нашел ошибку в своем методе поиска случайной координаты :) |
|||||
27 | Внутренний мир Субъекта |
|
|||
На этом слайде мы изменим модификатор доступа для метода Level.SetSubject()
Отчёт отправил: 13417. Chip Выполнено за 13 мин. [Показать отчёт] Научился: В моем случае нет модификатора доступа internal, но можно провернуть схожий трюк с помощью ключевого слова friend - сделать класс Game другом класса Level. Решение не очень красивое, но работает. В этом случае класс Game имеет полный доступ к классу Level, к методу set_subject в том числе. А все остальные классы не могут использовать метод set_subject. |
|||||
28 | Прогулка за ручку |
|
|||
На этом слайде мы протестируем самый главнный класс Game в нашей библиотеке.
Отчёт отправил: 13417. Chip Выполнено за 3 час. 20 мин. [Показать отчёт] Научился: В процессе создания тестов потребовалось дополнительно изучить тему перегрузки операторов и использование ассоциативных массивов. Жду продолжения курса :) |
|||||
Итого: 28 видеоуроков |
3 час. 23 мин. 18 тестов |
22 чел. | |||
Финалисты: Trira, Александр, Слава, Дмитрий Че, Иван Воронин, Andrew, Дмитрий, DimanDOS, Chip, Tekashnik, Александр, vip, Алексей В., Максим Лапшинов, Александр Балбашов, Никита, Yefim, Max, Николай Денисов, Дмитрий, MaxB, Alina . |