# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
3 теста |
|||
Дорога длиной в тысячу миль начинается с первого шага. На этом уроке мы поговорим о предстоящем путешествии и сделаем наш первый шаг - создадим консольное приложение. Отчёт отправил: 11019. Trira Выполнено за 25 мин. [Показать отчёт] Научился: Создано пустое решение, в котором создано консольное приложение с приветствием. Очень своевременный и полезный для прокачки навыков программирования на C# курс. Хочу с помощью этого курса создать сетевую игру Го Сложности: на этом этапе все просто. |
|||||
2 | Марионетка |
|
|||
На этом слайде мы сделаем управление символом с клавиатуры.
Отчёт отправил: 11019. Trira Выполнено за 11 час. 4 мин. [Показать отчёт] Научился: Научилась: 1. Создавать и определять координаты объекта. 2. Вывести символ в указанных координатах. 3. Считать с клавиатуры нажатую клавишу. 4. Изменить координату в зависимости от направления. 5. Организовать бесконечный цикл. 6. Выполнить затирание символа при перемещении. 7. Закончить игру по нажатию клавиши Escape. Сложности: Если следовать указаниям лектора - то все предельно ясно. |
|||||
3 | Представление выделяется |
2 теста |
|||
Show must go on! На этом слайде мы вынесем команды для работы с экранам в отдельный класс View. Отчёт отправил: 11019. Trira Выполнено за 8 час. 41 мин. [Показать отчёт] Научился: Научилась: 1. Извлекать методы из кода программы 2. Создавать новый класс и переносить туда эти методы. 3. Сделать эти методы публичными и не-статичными. 4. Вносить соответствующие изменения в новые методы, вызывая их как методы нового класса. Кроме сделанных изменений, в метод Show можно добавить еще одну переменную, определяющую инструмент, действующий на точку (например, вместо курсора - касание пальцем к сенсорному экрану) Сложности: все предельно просто |
|||||
4 | Модель игры |
|
|||
На этом слайде мы выделим логику, модель в отдельный класс Game.
Отчёт отправил: 11019. Trira Выполнено за 1 час. 1 мин. [Показать отчёт] Научился: Научилась: 1. Выделять модель логики игры из программы -- Создан класс Game, добавлено поле view , которое затем было установлено через конструктор. -- Добавлены поля для координат и установлено их значения в методе Start(). -- Создан метод Move (int sx, int sy) для перемещения объекта. -- Изменен код в операторе switch() на использование метода Move(). Работа программы не изменилась. Сложности: В начале описания класса Game пропустила описание переменных x,y . VS ругался до тех пор, пока не внесла необходимую строчку в код. |
|||||
5 | Контроллер не спешит |
1 тест |
|||
На этом слайде мы сформулируем задачи контроллера и выделим его в отдельный класс.
Отчёт отправил: 11019. Trira Выполнено за 3 час. 12 мин. [Показать отчёт] Научился: Этап создания объектов был перенесен в метод Main(). Создан класс Controller, в котором определены поле для хранения Game и конструктор для его инициализации: метод Run(), содержащий в себе все, что было раньше в методе Start(). Новый Controller вызывается из метода Main(). MVC («Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо. В частности, --- Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние. --- Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели. --- Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений. В случае работы на сервере модель MVC видоизменяется так, что контроллер не только получает команды и отправляет их в модель, но и управляет представлениями модели, поскольку осуществить связь модель-представление в случае работы с сервером можно только через контроллер. Сложности: Выполнить задание со звездочкой. Этот пункт не выполнен - пока нет идей, а время поджимает-)) |
|||||
6 | Цветной телевизор |
1 тест |
|||
На этом слайде мы создадим ещё одно представление и задействуем его в программе.
Отчёт отправил: 11019. Trira Выполнено за 40 мин. [Показать отчёт] Научился: Научилась создавать новые представления для классов. Переключать представления было бы проще так, как это делается в меню на веб-странице (выпадающий список - реализуется в виде формы специального вида) Сложности: Сложности были в именовании поля у представления ViewColor |
|||||
7 | Видный интерфейс |
2 теста |
|||
На этом слайде мы создадим интерфейс IView и задействуем его в классе Game. Класс Game теперь не зависит от конкретной реализации его представления. Попробуйте сделать то же самое через абстрактный класс. Отчёт отправил: 11019. Trira Выполнено за 1 день 22 час. 32 мин. [Показать отчёт] Научился: Научилась: создавать интерфейс IView с заголовками двух методов ViewBasic и ViewColor. Наследовать новые методы ViewBasic и ViewColor от IView, использовать IView внутри класса Game. Сложности: Создать еще один класс, например, для другого сочетания цветов - просто, но включить его в проект без ошибок оказалось сложнее, чем могло показаться сначала. Пока нет идей, как реализовать несколько видов экранов в интерфейсе. |
|||||
8 | Игра в библиотеке |
|
|||
На этом слайде мы выделим логику игру в отдельную библиотеку.
Отчёт отправил: 11019. Trira Выполнено за 21 час. 10 мин. [Показать отчёт] Научился: Создана библиотека LibraryGame в проекте OnlineGame, в которую перенесены классы с логикой игры и интерфейсом. Библиотека откомпилирована и связана с проектом. В классах игры добавлена директива using Сложности: --- успеть сдать отчет до полуночи |
|||||
9 | 2. Рефакторинг. Перечисление субъектов |
|
|||
Приступаем к рефакторингу. На этом слайде мы составим список "главных героев", которые могут быть отображены на экране. Отчёт отправил: 11019. Trira Выполнено за 13 мин. [Показать отчёт] Научился: Выполнен рефакторинг кода - создан enum-класс Subject . Каждому значению класса приписан отдельный элемент. Сложности: все просто |
|||||
10 | Показ героя на экране |
|
|||
На этом слайде мы задействуем перечисление субъектов в интерфейсе представления и во всех его реализациях.
Отчёт отправил: 11019. Trira Выполнено за 30 мин. [Показать отчёт] Научился: Изменила описание метода в интерфейсе IView. Добавила недостающий метод "переходник" в класс ViewColor, отказалась от "переходника" и оставила один метод Show(). Внесла изменения в класс ViewBasic. Проверила работу программы - все работает Сложности: все предельно просто и ясно |
|||||
11 | Координатная структура |
|
|||
На этом слайде мы создадим структуру Coord для хранения координат объекта на карте.
Отчёт отправил: 11019. Trira Выполнено за 22 час. 0 мин. [Показать отчёт] Научился: Создала публичную структуру Coord, описала публичные поля х, у и добавила конструктор. Изменила сигнатуру метода Show в интерфейсе IView. В классе Game изменила два поля х, у на один userCoord. Внесла остальные изменения в класс Game для использования Coord. Изменить реализации метода Show в представлениях ViewColor, ViewBasic Сложности: Не сразу поняла, как выбирается последовательность действий при рефакторинге метода Move |
|||||
12 | Карта сокровищ |
|
|||
На этом слайде мы создадим класс Level, в котором будет храниться карта уровня. Благодаря этому классы мы сможем узнать, что в какой клетке поля находится. Отчёт отправил: 11019. Trira Выполнено за 6 дней 23 час. 38 мин. [Показать отчёт] Научился: 1. Создан публичный класс Level 2. Описано поле размера поля size 3. Описан двумерный массив map 4. Создан конструктор public Level(Coord size) 5. Добавлены методы GetSubject() и SetSubject() с очевидной реализацией Сложности: ... |
|||||
13 | Шаги по карте |
1 тест |
|||
На этом слайде мы задействуем класс Level в классе логики Game
Отчёт отправил: 11019. Trira Выполнено за 1 час. 59 мин. [Показать отчёт] Научился: Создан объект Level , который затем внедрен в класс Game. В методе Controller.Run() определены size и level, которые передаются в Game. Параметры, указанные во view.Show( , ) , можно также объединить в отдельный объект (класс), чтобы затем его можно было просто внедрять на каждый новый уровень Сложности: после явного задания размера поля начало появляться исключение в игре, при переходе курсора за пределы границы Coord |
|||||
14 | Генерация лабиринта |
1 тест |
|||
На этом слайде мы сгенерируем лабиринт и отобразим его на экране.
Отчёт отправил: 11019. Trira Выполнено за 1 день 18 час. 36 мин. [Показать отчёт] Научился: Создала метод Level.Init() и вызвала его из конструктора. Написала два вложенных цикла и сгенерировала стенки по краям уровня. В методе Game.Start() разместила отображение всего уровня. Сложности: ... |
|||||
15 | Координатный перебор |
1 тест |
|||
На этом слайде мы создадим в структуре Coord метод для перебора всех координат, ограниченных указанным размером
Отчёт отправил: 11019. Trira Выполнено за 30 мин. [Показать отчёт] Научился: Создан метод YieldCoords() в структуре Coord, в котором реализован перебор всех координат до указанной позиции. Этот метод задействован для генерации стен лабиринта в методе Game.Start(). Сложности: не поняла, почему задание коорд. первого игрока командой userCoord = new Coord(level.size.x / 2, level.size.y / 2); - неверно |
|||||
16 | Подходящий размер! |
|
|||
На этом слайде мы добавим проверки размеров нашего уровня. Для этого мы добавим в структуру Coord ещё один метод Coord.InSize(). Отчёт отправил: 11019. Trira Выполнено за 6 час. 21 мин. [Показать отчёт] Научился: Добавлен метод Coord.InSize(Coord size), проверки на корректные координаты в методах GetSubject() / SetSubject(), а также добавлена проверка на возможность перемещения в метод Game.Move(). Программа компилируется, запускается и корректно работает. Сложности: все просто |
|||||
17 | Правила игры |
1 тест |
|||
На этом слайде мы добавим проверку правил игры, чтобы главный герой не мог забираться на стенки.
Отчёт отправил: 11019. Trira Выполнено за 9 час. 40 мин. [Показать отчёт] Научился: Добавила проверки в метод Game.Move(). Спрятала курсор (в реализациях). Убрала отображение символов при вызове ReadKey() Сложности: при уменьшении размера окна консоли курсор опять появляется на экране. Почему? |
|||||
18 | Дорога из жёлтого кирпича |
1 тест |
|||
На этом слайде мы разукрасим уровень - установим разные цвета для разных субъектов
Отчёт отправил: 11019. Trira Выполнено за 26 мин. [Показать отчёт] Научился: научилась устанавливать цвета для субъектов Сложности: все просто |
|||||
19 | Ищи ветра в поле |
1 тест |
|||
На этом слайде мы напишем метод, который найдёт месторасположение субъекта на карте. Воспользуемся этим методом для инициализации первоначальных координат игрока. Отчёт отправил: 11019. Trira Выполнено за 26 мин. [Показать отчёт] Научился: Создаy метод Level.FindFirst() для поиска субъекта. В структуре Coord задано статическое поле для несуществующей координаты. FindFirst() вызван из метода Game.Start() для определения начальных координат Subject.user1 Сложности: --- |
|||||
20 | Координатный рефакторинг |
1 тест |
|||
На этом слайде мы добавим в структуру Coord операторы == и !=, а также добавим метод проверки нахождения координат на краю поля. Отчёт отправил: 11019. Trira Выполнено за 2 дня 1 час. 23 мин. [Показать отчёт] Научился: Добавила в класс Game проверку координат в метод Start(), добавила два оператора в структуру Coord. Убрала размещение игрока и проверила, что выпадает исключение. Добавила метод OnSide() в структуру Coord. Использовала её при создании стен лабиринта. Добавить метод Equals() и GetHashCode() и завернуть их в регион Equality. Тестирование - один из обязательных этапов разработки ПО |
|||||
21 | Собери монетки |
1 тест |
|||
На этом слайде мы добавим в игру монетки, научимся их собирать и при этом добавлять новые. Отчёт отправил: 11019. Trira Выполнено за 1 день 23 час. 53 мин. [Показать отчёт] Научился: Добавлена первая монетка: в классе Level определен размер массива ее координат, в представлении ViewColor монетка раскрашена красным. В Game добавлена обработка монеток в методе Game.move(). Создан метод Level.FindRandom() для поиска случайного субъекта на игровом поле. При запуске игры с данными изменениями монетки исчезают при попадании на них курсора (user1). Выполнено выделение двух методов MoveUser() и EatMoney() из кода Game. На подсчет и отображение очков уже не хватило сил... Сложности: видео просмотрено более 2х раз, причем в 4 подхода. Очень сложно сразу уследить за последовательностью изменений в коде. Пришлось конспектировать, чтобы разобраться в этом уроке. |
|||||
22 | 3. Тестирование. Тестовый прогон |
|
|||
Мы приступаем к очередному этапу созданию программы - написание unit-тестов. На этом слайде мы создадим класс тестирования для структуры Coord. Отчёт отправил: 11019. Trira Выполнено за 23 час. 30 мин. [Показать отчёт] Научился: Создан новый проект LibraryGameTest. Переименован класс тестирования в CoordTests. Создан метод CoordTest(). Сделано тестирование создания координаты. Сложности: --- |
|||||
23 | Тест обратной стороны Луны |
|
|||
На этом слайде мы напишем тесты для методов InSize() и OnSide().
Отчёт отправил: 11019. Trira Выполнено за 21 час. 41 мин. [Показать отчёт] Научился: Созданы тесты методов InSize() и OnSide(). Последние выявили ошибку в методе Coord.OnSide(), которая была устранена Сложности: запомнить, как запускать тест; и еще по директивам тестировщика понять, где ошибка. |
|||||
24 | Случайное тестирование |
|
|||
На этом слайде мы напишем тест для методов Coord.YieldCoords() и Coord.GetRandom()
Отчёт отправил: 11019. Trira Выполнено за 27 мин. [Показать отчёт] Научился: Создан метод YieldCoordsTest(). Написан цикл для проверки. Определен массив координат для их сравнения в цикле. Написан метод GetRandomTest(). Спровоцировала увеличение времени работы этого метода увеличив количество шагов до 10*12. Сложности: теперь все норм. Сама нашла опечатку в тесте и исправила ее |
|||||
25 | Лабиринты тестирования |
1 тест |
|||
На этом слайде мы создадим тест для класса Level
Отчёт отправил: 11019. Trira Выполнено за 11 час. 5 мин. [Показать отчёт] Научился: Создаy новый класс для тестирования через генератор тестов. В комментариях нарисован лабиринтик с тестовым уровнем. Написаны все проверки в методе LevelTest() Сложности: все понятно. |
|||||
26 | Поиск монеток на поле Дураков |
|
|||
На этом слайде мы закончим создание тестов для класса Level
Отчёт отправил: 11019. Trira Выполнено за 11 час. 35 мин. [Показать отчёт] Научился: Исправлено namespace для теста в классе CoordTest. Создан метод тестирования FindFirstTest(). Создан метод тестирования FindRandomTest(). Создан тест SetSubjectTest(). Все тесты отработали нормально Сложности: Пока могу только повторять все за Игромистром. Своих идей нет. |
|||||
27 | Внутренний мир Субъекта |
|
|||
На этом слайде мы изменим модификатор доступа для метода Level.SetSubject()
Отчёт отправил: 11019. Trira Выполнено за 15 час. 20 мин. [Показать отчёт] Научился: Изменен модификатор доступа Level.SetSubject() на internal . Убрала тест SetSubjectTest() из проекта Сложности: --- |
|||||
28 | Прогулка за ручку |
|
|||
На этом слайде мы протестируем самый главнный класс Game в нашей библиотеке.
Отчёт отправил: 11019. Trira Выполнено за 1 день 26 мин. [Показать отчёт] Научился: Поиграла в лабиринте размера 5 на 3. Создан класс GameTests и метод StartTest. Создано фиктивное представление. Выполнено несколько возможных и невозможных шагов с проверками метода Start класса Game. Считается, что тестирование программ - это отдельная подзадача в ходе создания софта. Поэтому данную часть работы можно поручить разработчику, не писавшему исходную программу. Теоретически - это оправдано. Поскольку у автора кода часто "глаз замыливается" , то есть свои очевидные ошибки автору кода трудно заметить. А сторонний прогер, тем более, имеющий опыт в написании тестов, быстрее определит ошибки и баги кода. Однако по моему убеждению, ошибки лучше находить самому. Это, во-первых, повышает качество написания кода, во-вторых, дает программисту дополнительный вектор развития как профессионалу. Вывод - написание тестов к собственному коду - очень полезное занятие для программиста-)) Сложности: было много ошибок при создании теста. Устранение этих ошибок заняло времени больше, чем я планировала. Но поиск и устранение этих ляпов повысили мою собственную самооценку-)) |
|||||
Итого: 28 видеоуроков |
3 час. 23 мин. 18 тестов |
22 чел. | |||
Финалисты: Trira, Александр, Слава, Дмитрий Че, Иван Воронин, Andrew, Дмитрий, DimanDOS, Chip, Tekashnik, Александр, vip, Алексей В., Максим Лапшинов, Александр Балбашов, Никита, Yefim, Max, Николай Денисов, Дмитрий, MaxB, Alina . |