# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
3 теста |
|||
Дорога длиной в тысячу миль начинается с первого шага. На этом уроке мы поговорим о предстоящем путешествии и сделаем наш первый шаг - создадим консольное приложение. Отчёт отправил: 10558. Иван Воронин Выполнено за 19 мин. [Показать отчёт] Научился: Начало положено, идём дальше. з.ы. так как ещё не известно, что получится, название может быть любым техническим, тогда не будет ограничиваться воображение. Сложности: найти время |
|||||
2 | Марионетка |
|
|||
На этом слайде мы сделаем управление символом с клавиатуры.
Отчёт отправил: 10558. Иван Воронин Выполнено за 53 мин. [Показать отчёт] Научился: Если ничего не нажимается на клавиатуре, то перерисовка в консоли не осуществляется. Всё отлично, идём дальше. Сложности: найти время |
|||||
3 | Представление выделяется |
2 теста |
|||
Show must go on! На этом слайде мы вынесем команды для работы с экранам в отдельный класс View. Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт] Научился: Вынес инициализацию в отдельный метод. Убрал мигающий курсор из консоли. Экземпляр класса View и координаты x, y сделал глобальными. Всё отлично, идём дальше. Сложности: найти время |
|||||
4 | Модель игры |
|
|||
На этом слайде мы выделим логику, модель в отдельный класс Game.
Отчёт отправил: 10558. Иван Воронин Выполнено за 18 мин. [Показать отчёт] Научился: Так как это всё было реализовано ранее в общем классе, то просто перенёс код в новый класс Game. Всё отлично, идём дальше. з.ы. Инкапсуляция воплоти =) Сложности: найти время |
|||||
5 | Контроллер не спешит |
1 тест |
|||
На этом слайде мы сформулируем задачи контроллера и выделим его в отдельный класс.
Отчёт отправил: 10558. Иван Воронин Выполнено за 48 мин. [Показать отчёт] Научился: Реализовал постоянное движение в заданном направлении. см. видео. Реализовал проверку, чтобы не объект не выходил за пределы игрового поля. Записал демонстрационное видео по удалёнке через Тимку, как будто я дома, а не в Саратовской области =) Всё просто, идём дальше. Сложности: найти время Видеообзор: AfV89YfZvd0 |
|||||
6 | Цветной телевизор |
1 тест |
|||
На этом слайде мы создадим ещё одно представление и задействуем его в программе.
Отчёт отправил: 10558. Иван Воронин Выполнено за 19 мин. [Показать отчёт] Научился: Реализовал вспомогательные функции установки цвета. Устранил баг заливки фона консоли при перемещении объекта, см. скриншот. Напрашивается обобщение View через интерфейс или абстрактный класс. Всё отлично, идём дальше. Сложности: найти время |
|||||
7 | Видный интерфейс |
2 теста |
|||
На этом слайде мы создадим интерфейс IView и задействуем его в классе Game. Класс Game теперь не зависит от конкретной реализации его представления. Попробуйте сделать то же самое через абстрактный класс. Отчёт отправил: 10558. Иван Воронин Выполнено за 28 мин. [Показать отчёт] Научился: Реализовал абстрактный класс aView, реализующий интерфейс IView. Реализовал ещё один ViewInvers, которые меняет местами фон и шрифт, получается фон белый, шрифт чёрный, см. скриншот. Использование абстрактного класса полезно для устранения дубликатов кода. Всё отлично, идём дальше. Сложности: найти время |
|||||
8 | Игра в библиотеке |
|
|||
На этом слайде мы выделим логику игру в отдельную библиотеку.
Отчёт отправил: 10558. Иван Воронин Выполнено за 13 мин. [Показать отчёт] Научился: Вынес в библиотеку логику Game, интерфейс IView и абстрактный класс aView. Всё просто, ждём продолжения. Сложности: найти время |
|||||
9 | 2. Рефакторинг. Перечисление субъектов |
|
|||
Приступаем к рефакторингу. На этом слайде мы составим список "главных героев", которые могут быть отображены на экране. Отчёт отправил: 10558. Иван Воронин Выполнено за 14 мин. [Показать отчёт] Научился: Уже ранее говорил, ещё раз на скриншоте показываю где сразу можно найти нужные шаблоны для быстрого создания не только перечислений =) з.ы. лучше использовать целочисленные значения в перечислениях, но символы для обучения нагляднее. Сложности: найти время |
|||||
10 | Показ героя на экране |
|
|||
На этом слайде мы задействуем перечисление субъектов в интерфейсе представления и во всех его реализациях.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт] Научился: Так как уже давно реализовал абстрактный класс aView, от которого и наследуются остальные View, то всё заработало ещё и половины урока не прошло, минимум изменений в одном файле, вместо каждого View. Всё отлично, идём дальше. Сложности: найти время |
|||||
11 | Координатная структура |
|
|||
На этом слайде мы создадим структуру Coord для хранения координат объекта на карте.
Отчёт отправил: 10558. Иван Воронин Выполнено за 24 мин. [Показать отчёт] Научился: Не создавал конструктор в структуре, так как атрибуты публичные, то воспользовался инициализацией объектов. Добавил в структуру функцию Move(), тем самым код получился более компактным. см. скрин 2. з.ы. Структуры тоже можно создавать быстрее, см. скрин 1. Так же радует, что не приходится модифицировать каждый View, так как когда-то реализовал всё через общий абстрактный класс. Сложности: найти время |
|||||
12 | Карта сокровищ |
|
|||
На этом слайде мы создадим класс Level, в котором будет храниться карта уровня. Благодаря этому классы мы сможем узнать, что в какой клетке поля находится. Отчёт отправил: 10558. Иван Воронин Выполнено за 54 мин. [Показать отчёт] Научился: Создать экземпляр класса Level(), передав размеры new Coord(width, height), установив начальные координаты игрока через SetSubject() и далее двигать игрока по полю не забывая синхронизировать с картой при помощи Get/SetSubject() Сложности: найти время |
|||||
13 | Шаги по карте |
1 тест |
|||
На этом слайде мы задействуем класс Level в классе логики Game
Отчёт отправил: 10558. Иван Воронин Выполнено за 13 мин. [Показать отчёт] Научился: Да, функционал перемещения однозначно надо объединять, чтобы в одном месте всё было и тем самым синхронизировалось. Всё отлично, идём дальше. Сложности: найти время |
|||||
14 | Генерация лабиринта |
1 тест |
|||
На этом слайде мы сгенерируем лабиринт и отобразим его на экране.
Отчёт отправил: 10558. Иван Воронин Выполнено за 3 час. 18 мин. [Показать отчёт] Научился: Не очень хорошая идея хранить динамические объекты на статической карте, так что персонаж у меня размечается по старинке, а карта подгружается из массива. Сложности: найти время |
|||||
15 | Координатный перебор |
1 тест |
|||
На этом слайде мы создадим в структуре Coord метод для перебора всех координат, ограниченных указанным размером
Отчёт отправил: 10558. Иван Воронин Выполнено за 23 мин. [Показать отчёт] Научился: По поводу разделения динамических объектов и статических я ещё на прошлом уроке говорил и пока что мысль свою не менял. По поводу yield да, красиво и компактно. По поводу заезда на границы вопрос решён ещё в прошлом уроке в этом всё так же отлично работает. Всё отлично, идём дальше. Сложности: найти время |
|||||
16 | Подходящий размер! |
|
|||
На этом слайде мы добавим проверки размеров нашего уровня. Для этого мы добавим в структуру Coord ещё один метод Coord.InSize(). Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: Всё отлично, идём дальше. Сложности: найти время |
|||||
17 | Правила игры |
1 тест |
|||
На этом слайде мы добавим проверку правил игры, чтобы главный герой не мог забираться на стенки.
Отчёт отправил: 10558. Иван Воронин Выполнено за 22 мин. [Показать отчёт] Научился: Так как изначально все представления унаследованы от абстрактного IView, то изменения внёс только там. По поводу курсора да, скрыть и после передачи полученного символа передать true, чтобы отменять базовые действия в консоли при данном событии, получается что обработка кастомная. Сложности: найти время |
|||||
18 | Дорога из жёлтого кирпича |
1 тест |
|||
На этом слайде мы разукрасим уровень - установим разные цвета для разных субъектов
Отчёт отправил: 10558. Иван Воронин Выполнено за 25 мин. [Показать отчёт] Научился: Радует, что уроки короткие, не просто перевести дух, но и времени нет в силу катастрофического наплыва работы. Так как в игре уже реализованы три вида цветовой палитры, то просто доработал версию ViewColor, добавив свитч для выборки нужной комбинации fore/back, всё отлично, идём дальше. Сложности: найти время |
|||||
19 | Ищи ветра в поле |
1 тест |
|||
На этом слайде мы напишем метод, который найдёт месторасположение субъекта на карте. Воспользуемся этим методом для инициализации первоначальных координат игрока. Отчёт отправил: 10558. Иван Воронин Выполнено за 17 мин. [Показать отчёт] Научился: Так как на карте статических объектов не хранятся динамические, то данная функция пригодится в будущем для поиска статики типо монеток. Всё отлично, идём дальше. Сложности: найти время |
|||||
20 | Координатный рефакторинг |
1 тест |
|||
На этом слайде мы добавим в структуру Coord операторы == и !=, а также добавим метод проверки нахождения координат на краю поля. Отчёт отправил: 10558. Иван Воронин Выполнено за 53 мин. [Показать отчёт] Научился: Всё отлично, идём дальше. Сложности: найти время |
|||||
21 | Собери монетки |
1 тест |
|||
На этом слайде мы добавим в игру монетки, научимся их собирать и при этом добавлять новые. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 25 мин. [Показать отчёт] Научился: Так как изначально придерживаюсь политики, что динамика со статикой не должны пересекаться и храниться в одном контейнере, то реализовал тоже самое так, что бы это работало. Реализовал подсчёт и отображение собранных монеток. Всё отлично, идём дальше. Сложности: найти время |
|||||
22 | 3. Тестирование. Тестовый прогон |
|
|||
Мы приступаем к очередному этапу созданию программы - написание unit-тестов. На этом слайде мы создадим класс тестирования для структуры Coord. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: Да, вручную создание тестов веселее, так как понимание как оно работает под капотом всегда полезно, тем-более для программистов =) Сложности: найти время |
|||||
23 | Тест обратной стороны Луны |
|
|||
На этом слайде мы напишем тесты для методов InSize() и OnSide().
Отчёт отправил: 10558. Иван Воронин Выполнено за 39 мин. [Показать отчёт] Научился: Вот именно поэтому и нужно создавать тесты, те кто ещё не делают этого, думаю после данного урока поймут всю пользу от это деяния. Всё отлично, идём дальше. Сложности: найти время |
|||||
24 | Случайное тестирование |
|
|||
На этом слайде мы напишем тест для методов Coord.YieldCoords() и Coord.GetRandom()
Отчёт отправил: 10558. Иван Воронин Выполнено за 23 мин. [Показать отчёт] Научился: Так как у меня механика координат отличается, то и массив наполнен немного иными значениями для проверки. Всё отлично, идём дальше. Сложности: найти время |
|||||
25 | Лабиринты тестирования |
1 тест |
|||
На этом слайде мы создадим тест для класса Level
Отчёт отправил: 10558. Иван Воронин Выполнено за 34 мин. [Показать отчёт] Научился: Всё отлично, тесты очень полезная штука, помогают отлавливать мелкие баги, опечатки и т.д. идём дальше. Сложности: найти время |
|||||
26 | Поиск монеток на поле Дураков |
|
|||
На этом слайде мы закончим создание тестов для класса Level
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 26 мин. [Показать отчёт] Научился: Повторение мать учения, отличный урок, тесты очень важная вещь и красиво выглядят зелёные галочки. Всё отлично, идём дальше. Сложности: найти время |
|||||
27 | Внутренний мир Субъекта |
|
|||
На этом слайде мы изменим модификатор доступа для метода Level.SetSubject()
Отчёт отправил: 10558. Иван Воронин Выполнено за 6 мин. [Показать отчёт] Научился: Я думаю что это верное решение, двигаемся далее. Сложности: найти время |
|||||
28 | Прогулка за ручку |
|
|||
На этом слайде мы протестируем самый главнный класс Game в нашей библиотеке.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Так как у меня используется таймер в игре и перемещение персонажа инертно в нужном направлении, поэтому у меня два метода, одни устанавливает направление движения, добавил проверки, чтобы скорость перемещения не превышала по модулю единицу. Всё отлично, идём дальше. Сложности: найти время |
|||||
Итого: 28 видеоуроков |
3 час. 23 мин. 18 тестов |
22 чел. | |||
Финалисты: Trira, Александр, Слава, Дмитрий Че, Иван Воронин, Andrew, Дмитрий, DimanDOS, Chip, Tekashnik, Александр, vip, Алексей В., Максим Лапшинов, Александр Балбашов, Никита, Yefim, Max, Николай Денисов, Дмитрий, MaxB, Alina . |