C# форум программистов

Формула программиста

основатель — Волосатов Евгений Витольдович

Бомбермэн

Вы управляете героем, который может ставить бомбы. На вашем пути могут встретиться разрушаемые и неразрушаемые объекты. А так же враги, которые при соприкосновении убьют вас и игра окончится.
Цель игры: победить своих врагов, установив свою бомбу таким образом, чтобы взрыв от нее задел оппонента.

Эту игру мы будем реализовывать на языке программирования C#
Чему вы научитесь:
1. Создание динамических игр
2. Работе с массивами
3. Делегаты
4. Сборщик мусора
5. Перечисления
6. Создания полновесного ИИ
Создай игру, в которую будет интересно играть!

Кол-во уроков: 21
Продолжительность: 7 часов 30 минут

Хочу купить!

Купить в рассрочку за мегахеши

Цена: 2500 p.


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

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 Основная форма 00:10:14
9 чел. ★ 5 Done
  Первое создание проекта.
На уроке мы добавим основные элементы, начнем подготовку.

*Задание:: Написать описание игры и пункт "Об авторе", приложить скриншот
Отчёт отправил: 5024. Дмитрий Выполнено за 20 мин. [Показать отчёт]
Научился: Создавать и настраивать панель "меню" 
Сложности: ничего 
Комментарии: все хорошо 
2 Площадка для игр 00:24:45
8 чел. ★ 5 Done
  На уроке мы займемся основой для нашей будущей игры, по всем правилам ООП будем создавать всё в отдельных классах. Начнем готовить расположение основных элементов на доске.

*Задание:: дописать ещё возможные состояния, прикрепить скриншот Перечисления
Отчёт отправил: 5024. Дмитрий Выполнено за 30 мин. [Показать отчёт]
Научился: Создавать новые классы, создавать массивы однотипных объектов, настраивать PictureBox внутри кода 
Сложности: ничего 
Комментарии: нету 
3 Все работы хороши 00:15:51
6 чел. ★ 5 Done
  Пройдем по смежным профессиям, без которых, увы, начинающему программисту не обойтись!

*Задание:: добавить остальные необходимые картинки
Отчёт отправил: 5024. Дмитрий Выполнено за 10 мин. [Показать отчёт]
Научился: Простым ф-циям графических редакторов 
Сложности: ничего 
Комментарии: нету 
4 Передислокация или смена позиции 00:19:20
5 чел. ★ 5 Done
  Напишем метод, позволяющий нам изменять состояние одной клетки, в зависимости от нашего желания, а так же научим программу заполнять красиво основную форму игры.

*Вопрос:: какие нужно провести обязательные дополнения при первом заполнении карты, для корректной игры?
Отчёт отправил: 5024. Дмитрий Выполнено за 30 мин. [Показать отчёт]
Научился: Создавать энумератор, заполнять массив и менять состояния его элементов на основе энумератора 
Сложности: ничего 
Комментарии: из рандомной генерации кирпичей надо исключить позицию появления главного персонажа(плюс несколько клеток вправо и вниз для возможности поставить бомбу и не подорваться самому). в зависимости от поведения врагов: если ставят бомбы так же сделать для их стартовых позиций как и для игрока; если бомбы не ставят то просто пройтись по части массива  больше от половины до конца в пустые места поставив врага. 
5 Главный герой 00:14:58
5 чел. ★ 5 Done
  На уроке мы начнем заниматься специальным классом, который будет отвечать за нашего главного героя.
Целый отдельный класс, специально созданный для одной задачи: управлением состоянием главного героя.

*Задание:: создать перечисление возможных перемещений гл. героя
Отчёт отправил: 5024. Дмитрий Выполнено за 30 мин. [Показать отчёт]
Научился: Создавать класс, его экземпляр и настраивать их 
Сложности: ничего 
Комментарии: нету 
6 Оно шевелится 00:30:10
5 чел. ★ 5 Done
  На этом уроке мы заставим главного героя перемещаться по полю, отправляя ему команды прямо с клавиатуры.

*Задание:: написать условия, при которых гл. герою нельзя будет переходить в следующую клетку
Отчёт отправил: 5024. Дмитрий Выполнено за 40 мин. [Показать отчёт]
Научился: Определять позицию элемента согласно заданным условиям, менять расположение на основе сетки. 
Сложности: изменить значения шага и размеров элементов с их локациями чтобы не возникало смещений относительно друг друга у героя и ячеек 
Комментарии: нету 
7 Туда - нельзя, сюда - нельзя 00:23:56
5 чел. ★ 4.8 Done
  Конечно же главный герой может ходить только по специальным дорожкам, не может ходить сквозь стены и пр. Как же его этому обучить?! Узнаем на этом уроке.

*Вопрос:: почему гл. герой ходит сквозь стены?
Отчёт отправил: 5024. Дмитрий Выполнено за 10 мин. [Показать отчёт]
Научился: Определять границы объектов и работать с ними 
Сложности: не запутаться в значениях, понять зачем надо именно так.  
Комментарии: Не очень понятна избыточность данного метода. Смысла главного героя перемещать внутри квадрата где он находится особо нет, разве что для создания в дальнейшем плавного движения из одной клетки в другую пустую. но и при этом можно проще разрешить двигаться в туже сторону на расстояние равное разнице между размером клетки и размером главного героя +-пару пикселей если следующая ячейка по направлению движения занята. это как раз и позволит избежать прохождения сквозь соседние объекты ибо не изменит  позицию в сетке и локация не выйдет за границы пустой клетки. 
8 Никуда нельзя! 00:21:07
4 чел. ★ 5 Done
  Будем дописывать процедуру проверки смежных клеток, делая перемещение гл.героя более правильным.

*Задание:: сделать плавное смещение героя при переходе сквозь стену
Отчёт отправил: 5024. Дмитрий Выполнено за 30 мин. [Показать отчёт]
Научился: Определять границы объектов и работать с ними 
Сложности: Не запутаться во всех направлениях, правильно их определить и провести сравнения нужные значения мкжду собой 
Комментарии: для плавного движения, возможно, можно использовать простое перемещение на один пиксель например. и каждое нажатие определяем конечную точку где должен оказаться главный герой и выполнить движение к ней. если по диагонали точка то движение пойдет либо углом либо просто по диагонали с задеванием стен. 
9 Рождение монстра 00:20:16
4 чел. ★ 5 Done
  Главному герою нужно с кем-то сражаться!
Мы начнем создавать врагов и размещать их на нашей игровой карте.

*Вопрос:: можно ли использовать один класс на двоих при перемещении гл. героя и моба?
Отчёт отправил: 5024. Дмитрий Выполнено за 30 мин. [Показать отчёт]
Научился: Создавать класс, создавать таймер для каждого экземпляра. 
Сложности: ничего 
Комментарии:   герой и моб имеют слишком разные методы для реализации. единственное что на данном этапе у них может быть общим - это более аккуратный поворот .  так что использование общего класса скорее приведет к нагромождению и затруднению ориентации в коде 
10 Каждый двигается одинаково, но по-своему 00:11:07
4 чел. ★ 5 Done
  Небольшой рефакторинг никогда не помешает! На уроке мы будем реализовывать общие правила для передвижения наших персонажей.

*Задание:: заставить Моба передвигаться к опр. точке
Отчёт отправил: 5024. Дмитрий Выполнено за 40 мин. [Показать отчёт]
Научился: Использовать одним классом методы другого 
Сложности: ничего 
Комментарии: Перемещение до точки реализовано но не совсем удачно - проход чисто по ячейкам. Хотя тут скорее надо сперва определить координату центра заданной ячейки и проверку осуществлять не через point а location объекта. просто немного лень было ведь еще надо тогда добавить проверки на сколько разница велик: на число большее или равное шагу или меньше. 
11 Дальняя дорога 00:40:36
4 чел. ★ 4.5 Done
  Создаем метод поиска пути до определенной точки.

*Задание:: написать словесное описание трех уровней сложности Моба
Отчёт отправил: 5024. Дмитрий Выполнено за 40 мин. [Показать отчёт]
Научился: Алгоритму поиска пути по сетке 
Сложности: учесть все проверки и не запутаться в них 
Комментарии: Не могу поставить пять звезд: на прошлом уроке в качестве домашнего задания реализовал перемещение до точки почти таким же алгоритмом, но в классе move. при этом в вашем алгоритме возникла неточность при крупном размере спрайта- моб начинает немного раскачиваться из стороны в сторону при перемещении(если размер моба меньше размера ячейки меньше чем на количество шагов) и заметил что в самом начале пути моб двигается с чуть большим шагом чем на подходе к конечной ячейке. Не утверждаю что мое решение удачнее, но в сообщении мне обещали более изящное решение, а на деле такое же почти и с дополнительными неприятностями.) Три уровня сложности Моба: 1. перемещение в случайном возможном направлении на 1-3 клетки с выбором нового движения по достижении конца пути 2. перемещение на большее число ячеек с приоритетом в направлении к игроку со сменой направления по достижению конца пути 3. перемещение непосредственно к ячейке занимаемой игроком, со сменой направления пути при каждом изменении положения ячейки(своей или занимаемой игроком) 
12 Ориентация на местности 00:15:12
3 чел. ★ 5 $
  Дописываем процедуру, помогающую найти следующую точку, в которую необходимо дойти.

*Задание:: дописать программу так, чтобы моб обходил препятствия
13 Бомба своими руками 00:20:39
3 чел. ★ 5 $
  Это же БОМБЕРМЕН!
У него должна быть БОМБА! На этом уроке мы этим и займемся! Подарим нашему бомбермену бомбочку, и у него будет возможность её установить!

*Вопрос:: где должна располагаться информация о наличии бомб? (в каких классах?)
14 Ложись, БОМБА! 00:23:47
3 чел. ★ 5 $
  Конечно же у бомбы должен быть таймер, не взрываться же ей в руках?! Будем реализовывать красоту, которая отвечает за "тиканье" бомбы.

*Вопрос:: как сообщить «наверх», что бомбе пора взорваться?
15 Ба-БАХ! 00:14:28
3 чел. ★ 5 $
  Реализовываем детонацию бомбы

*Задание:: сделать так чтобы вместо «ВЗРЫВ» писалось «Бомба активирована!»
16 Горим! 00:25:08
3 чел. ★ 5 $
  Будем реализовывать момент горения после детонации бомбы.

*Вопрос:: почему гл. герой не может наступить на место со взрывом и как это исправить?
17 Сборщик мусора 00:31:51
3 чел. ★ 5 $
  Сборщик мусора (garbage collector) - специальный процесс, периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложениями.
На уроке мы более подробно познакомимся с этой формой управления памятью.

*Вопрос:: как часто запускается Сборщик мусора(автоматически)?
18 Вызывайте пожарных! 00:08:37
3 чел. ★ 5 $
  После всего сумасшествия, которое было от взрыва бомбы, необходимо прибраться и почистить. Для этого мы создадим специальных "пожарных", которые помогут нам в этом.

*Вопрос:: в какой же момент должен погибнуть гл. герой?
19 Не пойман - не вор! 00:14:15
3 чел. ★ 5 $
  Только сейчас мы приступаем к реализации окончания игры. Добавим процедуру, которая будут контролировать смерть главного героя.

*Задание:: добавить в гл. меню игры возможность выбора сложности игры
20 Три уровня сложности 00:20:15
3 чел. ★ 5 $
  Неинтересно играть с простым врагом, для этого мы добавим три уровня сложности игры, чтобы нам не заскучать на полях сражения!

*Задание:: сделать так, чтобы гл. герой поворачивался в ту сторону, в которую бежит
21 Бонусы 00:39:50
3 чел. ★ 5 $
  Бонусы! Подарки! Призы! Плюшки и Плюшечки!
Всё что душе угодно сможешь ты добавить после этого урока, а я покажу как сделать основные - бонусы, с помощью отдельного класса!

*Задание:: насладиться полученным результатом и дописать много-много приделок, которые только улучшат и украсят игру!
22 ФИНАЛЬНЫЙ УРОК без видео
3 чел. ★ 5 $
  (В этом уроке нет видео)
Приветствую!
Ты дошел до конца этого курса, до этой черты доходят немногие!
Ты уже победитель!!!
Расскажи в нескольких словах что ты узнал на курсе.
  Итого:   22 видеоурока 7 час. 26 мин.
3 чел. ★ 4.97  
  Финалисты:   DimanDOS,   Dimon,   Neverwinter 2 .

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





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

Ты в любой момент сможешь отписаться от рассылки.


Научился: Вспомнил о том, как непросто записывать обзоры...
Трудности: Придумать текст и правильно его произнести. Курс получился замечательным, достаточно простым, с доходчивыми объяснениями. Я научился (правда не доконца понял, тут даже теория не помогла) пользоваться делегатами. Знаю теперь, как работает сборщик мусора. Вообще попрактиковался в использовании ООП. Вобщем - было нескучно! Спасибо Кириллу за то что решился создать свои уроки. Спасибо Игромистру за поддержку во время прохождения. Спасибо всем кто проверял мои работы. Встретимся в следующий раз уже нескоро (ухожу помогать другу в его проектах).



Научился: Научился многому, не все до конца понял.
Трудности: Извиняюсь, но видео я не записываю никогда.