Изучение c# на примерах

Формула программиста
основатель — Волосатов Евгений Витольдович

Игра Тетрис

Цель игры - набрать как можно больше очков.
Очки начисляются при заполнении
Полностью горизонтальной линии фигурами.
Тогда эта линия уберется и зачисляться очки.

Это 20 уроков по написанию игры Тетрис,
Мы пройдемся по всем этапам разработки.
Посмотрим что нам будет необходимо,
Чтобы легко, удобно и быстро управлять игрой.
Напишем несколько универсальных методов,
Которые помогут в работе с массивами.

Что ты получишь, пройдя курс:
+ Собственную игру Тетрис
+ Знания, для перемещения блоками элементов
+ Навык разработки динамических игр

Различные вариации игры
1. Классический
2. На прохождение
3. Классический вдвоем кооператив
4. Классический вдвоем каждый сам за себя
5. Вдвоем друг против друга

Объём: 17 видеоуроков
Время: 6 часов 28 минут.
Доступ на 30 дней.

4,000 руб.


Для подписки на пакет необходимо авторизоваться.

Список уроков | фото | видео

# Название видеоурока Решило Рейтинг Доступ
1 Подготовка формы 00:10:54 24 чел. ★ 4.8 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 35 мин. [Показать отчёт]
Научился: Создавать форму для игры в тетрис 
Сложности: Трудностей не возникло 
Комментарии: Спасибо за урок! 
2 Игровая доска 00:22:02 20 чел. ★ 4.8 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 50 мин. [Показать отчёт]
Научился: Создавать класс Board  
Сложности: Сложностей не возникло 
Комментарии: Этот класс я написал по-своему. В место того, чтобы передавать в конструктор ссылку на объект типа Panel, я решил класс Board унаследовать от этого класса. Кроме того, я написал код, который позволяет произвести расчет строк и столбцов, в зависимости от ширины доски. Теперь я могу как угодно изменять доску в дизайнере формы, правда мне пришлось добавить метод ClearBoxes, который очищает все картинки, а также создать событие Resize, чтобы при изменении доски удалялись и вновь появлялись картинки. Спасибо за урок! 
3 Логика игры 00:17:08 17 чел. ★ 4.9 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Добавлять фигуру на доску 
Сложности: Сложно было отыскать ошибки, потратил много времени. 
Комментарии: Я опять кое-что сделал по-своему. Во-первых, в место полей rows и cols я создал публичные методы, которые при обращении вычисляют количество строк, путем деления ширины панели на размер изображения, также сделал проверку, если результат меньше единицы, т.е., если количество столбцов или строк равно нулю, то присваиваем значение 1, т.к. 0 строк и 0 столбцов быть не может. Во-вторых, написал метод GetColor(), который принимает числовой параметр и возвращает цвет. По числу определяется какой цвет будет возвращаться. В-третьих, написал метод AddFigure() и сделал его публичным, этот метод я вызывал из конструктора формы, т.к. внутри класса вылетает исключение. Спасибо за урок.  
4 Класс Фигур 00:17:22 11 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 40 мин. [Показать отчёт]
Научился: Размещать фигуры 
Сложности: Сложностей не возникло 
Комментарии: Спасибо за урок! 
5 Движение фигур 00:22:20 11 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Передвигать фигуру 
Сложности: Трудностей не возникло 
Комментарии: Я добавил события, при нажатии кнопок клавиатуры, для перемещения фигуры, а также для нажатия на паузу, создал метод GetRandomColor, который рандомно выбирает цвет и возвращает числовое значение цвета. Добавил таймер, теперь фигура падает самостоятельно. Ломал голову, как мне реализовать действие, при котором не вылетало исключение, когда выходит за предел диапазона, пока что не получилось. Добавил в класс Board свойство IsPaused, для того, чтобы прекратить дальнейшее передвижение фигуры. Еще подумал над тем, как перевернуть фигуру. Спасибо за урок. 
6 Разноцветные фигуры 00:21:38 11 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 10 мин. [Показать отчёт]
Научился: Не позволять фигуре выйти за границы массива.  
Сложности: Нашел ошибку у себя в коде. Теперь я понял, почему у меня выходило исключение, когда выходило за пределы диапазона массива. Ошибка была в циклах. 
Комментарии: Все работает. Спасибо за урок. 
7 Поворачиваем фигуры 00:16:14 11 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Поворачивать фигуры. 
Сложности: Рассчитать координаты точек фигур. 
Комментарии: Спасибо за урок 
8 Управление 00:29:18 10 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 5 мин. [Показать отчёт]
Научился: Назначать события на нажатие кнопок клавиатуры. 
Сложности: Все очень просто. 
Комментарии: Этот урок я уже давно выполнил. Нажатие на паузу я реализовал следующим образом: в классе Board я создал свойство IsPaused, которое может принимать два значение true или false, при вызове метода Step происходит проверка, if(IsPaused)return, также в событии на нажатие клавиши пробел(пауза), я прописал следующий код: board1.IsPaused = !board1.IsPaused; Спасибо за урок! 
9 Мини-панель 00:22:10 10 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 40 мин. [Показать отчёт]
Научился: Научился отображать следующую фигуру 
Сложности: Пришлось сделать немного иначе, т.к. у меня реализовано по-другому. 
Комментарии: Массивы Map тут не нужны, т.к. нужно только отобразить фигуру, перемещать ее не надо. Спасибо за урок. 
10 Удаляем строки 00:32:37 9 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Удалять и добавлять строки из массива 
Сложности: Разобраться с алгоритмом, я даже блок-схему нарисовал, чтобы лучше понять. 
Комментарии: Спасибо за урок 
11 Проигрыш 00:14:54 8 чел. ★ 4.9 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 25 мин. [Показать отчёт]
Научился: Создавать проверку на проигрыш, выводить очки. 
Сложности: Сложностей не возникло 
Комментарии: Предлагаю написать следующим образом: if (map_back[start_position.x-1, start_position.y] > 0) { GameOver() return; } Как-то у нас все в кучу смешано, не лучше ли создать отельный класс для логики, отдельный класс для отображения и еще создать класс Game, для управления игрой? Спасибо за урок! 
12 Перезапуск игры 00:24:36 8 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 20 мин. [Показать отчёт]
Научился: Создавать дополнительную проверку при повороте фигуры. 
Сложности: Сложностей не возникло 
Комментарии: Добавил в класс Board Restart(), в котором вызывались методы InitMap() и InitBoxes(), при проигрыше вызывается этот метод. Спасибо за урок! 
13 Главное меню 00:24:00 8 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 20 мин. [Показать отчёт]
Научился: Создавать форму меню. 
Сложности: Трудностей не возникло 
Комментарии: DialogResult я уже создал. Спасибо за урок. 
14 Уровень 1 00:34:28 8 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 40 мин. [Показать отчёт]
Научился: Повышать уровень сложности 
Сложности: Трудностей не возникло, во всем разобрался. 
Комментарии: Спасибо за урок! 
15 Игра вдвоем кооператив 00:20:16 8 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Создавать игру вдвоем 
Сложности: Ничего 
Комментарии: Спасибо за урок 
16 Игра вдвоем каждый сам за себя 00:28:37 8 чел. ★ 5 Done
  Отчёт отправил: 6203. Николай (nick27m) Решено за 5 мин. [Показать отчёт]
Научился: Создавать игру на двоих. 
Сложности: Трудностей не возникло. Я просто добавил элемент управления Board и Board_mini на свою форму, назначил события клавиш, для перемещения фигур. 
Комментарии: Этот урок я выполнил в прошлый раз, правда, надо доработать. Ответ на вопрос: Класс Board не нужно создавать для второго игрока, потому, что класс Board уже создан, работает он абсолютно идентично, как для первого, так и для второго игрока. Создавать второй, точно такой же класс, глупо. Спасибо за урок. 
17 Баттл начинается! 00:29:46 5 чел. ★ 5 Open
18 ФИНАЛЬНЫЙ УРОК 4 чел. ★ 5 $
19 VIP урок. Angry Birds или проблемы красивых игр 00:20:07 4 чел. ★ 5 $
  Итого:   19 видеоуроков общей продолжительностью 6 час. 48 мин. 4 чел. ★ 4.97  
  Финалисты:   Аркадий,   Сергей Соколов,   Николай,   Алексей|BrisK|Кривицкий .

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: записывать видео с первого раза ))) а вообще стал более быстро понимать как работать с классами и полями, их методами доступа, при реализации своих доработок немного пришлось изменить код чтобы получать доступ к полям в других классах.
Трудности: устранить все ошибки в программе))
Всё очень понравилось. Хотелось бы сесть и самому все повторить, но думаю так быстро не получиться, хотя если такое проделать то это будет +200% к опыту.
Смотреть видеозапись: https://youtu.be/TqycJxY4cos
Научился: Анализ проделанной работы.
Трудности: Нет
Всем советую отличный курс.
Смотреть видеозапись: https://www.youtube.com/watch?v=nmcGrbsg2oU&list=PL_1GZjX2QvT2ALinESLV0Krtda0LSOfFl&index=4