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

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

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

Бомбермэн

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

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

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

Хочу купить!

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

Цена: 2500 p.


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

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

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

*Задание:: дописать ещё возможные состояния, прикрепить скриншот Перечисления
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Создавать pictureBox с помощью кода, а также задавать свойства pictureBox'а. 
Сложности: Случайно вместо sizeX поставил sizeY и сетка не отображалась. Но потом быстро разобрался. 
Комментарии: Сегодня получил очень приятный сюрприз на почту - ссылка на второй урок!!! У меня нет слов чтобы выразить свою благодарность и радость. Я уже расстроился, что не смогу проходить уроки дальше и тут бац! Следующий урок! Очень интересный, с точным описанием действий и объяснением, что для чего делается.  Кстати вот состояния:     enum Sost     {         пусто,         стена,         кирпич,         бомба,         взрыв     } 
3 Все работы хороши 00:15:51
6 чел. ★ 5 Done
  Пройдем по смежным профессиям, без которых, увы, начинающему программисту не обойтись!

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

*Вопрос:: какие нужно провести обязательные дополнения при первом заполнении карты, для корректной игры?
Отчёт отправил: 14981. DimanDOS Выполнено за 25 мин. [Показать отчёт]
Научился: Ставить картинку в pictureBox с помощью кода и состояний (enum Sost) 
Сложности: Трудностей не возникало 
Комментарии: Урок очень интересный! На счёт того, что надо реализовать для дальнейшей расстановки картинок, не знаю, что надо точно. Но есть одно предположение: чтобы поставить самого Бомбермена, надо вычислить Location выделенной клетки на скриншоте. Но как вычислить - не знаю. 
5 Главный герой 00:14:58
5 чел. ★ 5 Done
  На уроке мы начнем заниматься специальным классом, который будет отвечать за нашего главного героя.
Целый отдельный класс, специально созданный для одной задачи: управлением состоянием главного героя.

*Задание:: создать перечисление возможных перемещений гл. героя
Отчёт отправил: 14981. DimanDOS Выполнено за 25 мин. [Показать отчёт]
Научился: Повторил создание pictureBox-а с помощью кода. Узнал о свойстве .BringToFront(). 
Сложности: Когда Бомбермен появился, он был очень растянутый вниз. Оказалось, что я перепутал знаки - и * в задании свойства Size. Но тут же это исправил. 
Комментарии: Урок очень интересный и занимательный! Всё так классно и понятно объясняется :) Что касается задания: я считаю все возможные варианты движения Бомбермена будут такими:         enum Motion         {             вправо,             влево,             вверх,             вниз         } 
6 Оно шевелится 00:30:10
5 чел. ★ 5 Done
  На этом уроке мы заставим главного героя перемещаться по полю, отправляя ему команды прямо с клавиатуры.

*Задание:: написать условия, при которых гл. герою нельзя будет переходить в следующую клетку
Отчёт отправил: 14981. DimanDOS Выполнено за 45 мин. [Показать отчёт]
Научился: Писать более лёгкий и понятный код для передвижения любого элемента  
Сложности: Поверить, что всё получиться) 
Комментарии: Очень классный, интересный и познавательный урок! ОЧЕНЬ ЗАХВАТЫВАЮЩЕ! Задание: по моему мнению, Бомбермен не может передвигаться при следующих условиях: if (!(player касается picture с Image Бомба || player касается  picture с Image Стена || player касается  picture с Image Кирпич)) switch (arrow) { ... } 
7 Туда - нельзя, сюда - нельзя 00:23:56
5 чел. ★ 4.8 Done
  Конечно же главный герой может ходить только по специальным дорожкам, не может ходить сквозь стены и пр. Как же его этому обучить?! Узнаем на этом уроке.

*Вопрос:: почему гл. герой ходит сквозь стены?
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Писать проверочный код для определения Image следующей клетки. 
Сложности: Из-за моей невнимательности опять возникла ошибочка... 
Комментарии: Урок очень интересный, да и сам курс мне очень нравиться! Очень хочется увидеть отчёты других ;) Вопрос - ответ: Бомбермен залезает на стены из-за того, что его центр находиться в другом ряду, не в ряду с данным pictureBox'ом 
8 Никуда нельзя! 00:21:07
4 чел. ★ 5 Done
  Будем дописывать процедуру проверки смежных клеток, делая перемещение гл.героя более правильным.

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

*Вопрос:: можно ли использовать один класс на двоих при перемещении гл. героя и моба?
Отчёт отправил: 14981. DimanDOS Выполнено за 35 мин. [Показать отчёт]
Научился: Повторил создание pictureBox'ов с помощью кода 
Сложности: Урок очень интересный и понятно изложенный и поэтому ТРУДНОСТЕЙ НЕ ВОЗНИКАЛО 
Комментарии: Познавательный урок, всё так хорошо объясняется! Я самостоятельно добавил код случайного передвижения моба с помощью переменной которой присваивается рандомное значение от 1 до 4. Если выпадает число 1 - моб двигается влево, если 2 - то вправо, 3 - вниз, а 4 - вверх. Но не знаю - правильно ли я сделал, это будет понятно на следующем уроке. 
10 Каждый двигается одинаково, но по-своему 00:11:07
4 чел. ★ 5 Done
  Небольшой рефакторинг никогда не помешает! На уроке мы будем реализовывать общие правила для передвижения наших персонажей.

*Задание:: заставить Моба передвигаться к опр. точке
Отчёт отправил: 14981. DimanDOS Выполнено за 50 мин. [Показать отчёт]
Научился: Понял, что можно движение моба и player'a объединить в один класс 
Сложности: Решить задание. 
Комментарии: Много думал над заданием, но так и не решил. Переменной destinePlace задано значение new Point(15, 2); в timer_Tick поставил такую проверку:         private void timer_Tick(object sender, EventArgs e)         {             if (mob.Location != destinePlace)                 mob.Location = new Point(mob.Location.X, mob.Location.Y - 3);             else                 return;          } Моб двигается, но проскакивает определённую точку. 
11 Дальняя дорога 00:40:36
4 чел. ★ 4.5 Done
  Создаем метод поиска пути до определенной точки.

*Задание:: написать словесное описание трех уровней сложности Моба
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Создавать БЕСКОНЕЧНЫЕ циклы while, то есть когда цикл выполняется всегда 
Сложности: Трудностей не возникало, ведь каждый урок курса отлично объясняется, рисуются схемы, да и вообще - курс отличный! 
Комментарии: Я считаю что в 1 уровне сложности Моб должен выбирать своё направление рандомно и быть непредсказуемым. Во 2 втором уровне должен прокладывать себе, но двигаться с небольшой скоростью. В 3 - работать точно также как и во втором, только чуть быстрее. И добавить бы 4, где Моб сам ставил бомбы. 
12 Ориентация на местности 00:15:12
3 чел. ★ 5 Done
  Дописываем процедуру, помогающую найти следующую точку, в которую необходимо дойти.

*Задание:: дописать программу так, чтобы моб обходил препятствия
Отчёт отправил: 14981. DimanDOS Выполнено за 40 мин. [Показать отчёт]
Научился: Первый раз использовал do-while 
Сложности: Быть внимательным и не допустить ошибку 
Комментарии: Знал про do-while с уроков Александра Шевчука, но впервые его использовал на уроке videosharp) Урок отличный и интересный! Иду дальше - делать бомбы, кто со мной? :~) 
13 Бомба своими руками 00:20:39
3 чел. ★ 5 Done
  Это же БОМБЕРМЕН!
У него должна быть БОМБА! На этом уроке мы этим и займемся! Подарим нашему бомбермену бомбочку, и у него будет возможность её установить!

*Вопрос:: где должна располагаться информация о наличии бомб? (в каких классах?)
Отчёт отправил: 14981. DimanDOS Выполнено за 40 мин. [Показать отчёт]
Научился: Менять картинку pictureBox'a на котором находиться player 
Сложности: Видимо где-то пропустил момент получения доступа к классу MovingClass в MainBoard. Но вскоре сам понял как надо было его инициализировать. 
Комментарии: Урок очень интересный. Добавил чтоб при каждом запуске игры количество мобов выбиралось от 5 до 10. Кстати вот ответ на заданный вопрос: скорее всего в классе MainBoard 
14 Ложись, БОМБА! 00:23:47
3 чел. ★ 5 Done
  Конечно же у бомбы должен быть таймер, не взрываться же ей в руках?! Будем реализовывать красоту, которая отвечает за "тиканье" бомбы.

*Вопрос:: как сообщить «наверх», что бомбе пора взорваться?
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 40 мин. [Показать отчёт]
Научился: Усвоил, как осуществлять замену картинок. Но как видно на скриншоте корректный подсчёт идёт, а картинку обратно поставить не получается 
Сложности: Понять, почему картинка не сменяется обратно после удаление всей графики на данном pictureBox (--graph.Clear(Color.DimGray)--) 
Комментарии: Ответ на задание:                  if (kolSec == 0)             {                 map[bombPlace.X, bombPlace.Y] = Sost.огонь;             }             else             {                 graph = mapPic[bombPlace.X, bombPlace.Y].CreateGraphics();                 graph.Clear(Color.DimGray);                 map[bombPlace.X, bombPlace.Y] = Sost.бомба;                 WriteSecond(kolSec--);             } В данном коде картинка (она указывается строкой "map[bombPlace.X, bombPlace.Y] = Sost.бомба") не устанавливается. Что может быть не так? 
15 Ба-БАХ! 00:14:28
3 чел. ★ 5 Done
  Реализовываем детонацию бомбы

*Задание:: сделать так чтобы вместо «ВЗРЫВ» писалось «Бомба активирована!»
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Узнал что такое делегат и работе с ними 
Сложности: Работать с делегатами 
Комментарии: Интересный урок, раньше где-то краем уха слышал "делегат", но даже примерно не понимал что это такое. 
16 Горим! 00:25:08
3 чел. ★ 5 Done
  Будем реализовывать момент горения после детонации бомбы.

*Вопрос:: почему гл. герой не может наступить на место со взрывом и как это исправить?
Отчёт отправил: 14981. DimanDOS Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Работать с foreach 
Сложности: Забыл указать мощность взрыва (lenFire) и программа некорректно работала. Думаю самым сложным было найти причину. 
Комментарии: Сегодня снова записал видео-обзор. Урок очень интересный. Дополнительно сделал, чтобы бомба тоже взрывалась и состояние клетки было ОГОНЬ. *Надо указать: когда player касается pictureBox'a с состоянием ОГОНЬ игра заканчивалась 
Видеообзор: YTgooGk8AJc
17 Сборщик мусора 00:31:51
3 чел. ★ 5 Done
  Сборщик мусора (garbage collector) - специальный процесс, периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложениями.
На уроке мы более подробно познакомимся с этой формой управления памятью.

*Вопрос:: как часто запускается Сборщик мусора(автоматически)?
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Узнал  о сборщике мусора, GC 
Сложности: Вникнуть в тему) 
Комментарии: Вы очень понятно объяснили, всё усвоил. Спасибо за урок! 
18 Вызывайте пожарных! 00:08:37
3 чел. ★ 5 Done
  После всего сумасшествия, которое было от взрыва бомбы, необходимо прибраться и почистить. Для этого мы создадим специальных "пожарных", которые помогут нам в этом.

*Вопрос:: в какой же момент должен погибнуть гл. герой?
Отчёт отправил: 14981. DimanDOS Выполнено за 15 мин. [Показать отчёт]
Научился: Ещё раз на практике поучился работать с делегатами. 
Сложности: Всё так понятно объясняется, что создаётся впечатление как будто я это всегда знал :) Но конечно же это заслуга автора. Спасибо! 
Комментарии: Да, урок довольно простой. Победил всех мобов, но правда, несколько раз подорвал себя) А момент гибели Бомбермена и окончания игры должен наступать когда: игрок заходит на огонь или его поймает моб. А если player захотел сам поймать своего заклятого врага? =) 
19 Не пойман - не вор! 00:14:15
3 чел. ★ 5 Done
  Только сейчас мы приступаем к реализации окончания игры. Добавим процедуру, которая будут контролировать смерть главного героя.

*Задание:: добавить в гл. меню игры возможность выбора сложности игры
Отчёт отправил: 14981. DimanDOS Выполнено за 30 мин. [Показать отчёт]
Научился: Проверять столкновение с мобом 
Сложности: Дописать код для проверки победы или проигрыша. 
Комментарии: Добавил такую функцию: в зависимости от состояния игры (продолжение, победа, проигрыш) возвращается соответствующее число (продолжение - 1, проигрыш - 2, победа - 3). Если 1 - ничего не происходит; если 2 - выводиться окно с заголовком "Проигрыш"; а если 3 - с заголовком "Победа" 
20 Три уровня сложности 00:20:15
3 чел. ★ 5 Done
  Неинтересно играть с простым врагом, для этого мы добавим три уровня сложности игры, чтобы нам не заскучать на полях сражения!

*Задание:: сделать так, чтобы гл. герой поворачивался в ту сторону, в которую бежит
Отчёт отправил: 14981. DimanDOS Выполнено за 35 мин. [Показать отчёт]
Научился: Создавать уровни сложности. 
Сложности: Трудностей не возникало, так как всё очень понятно объясняется, очень занимательно. 
Комментарии: Сделал уровни сложности не в виде типа int, а создал перечисление enum. Урок очень интересный. Да, конечно с уровнями сложности и самому веселей играть) Задание выполнено, результат на скриншоте. 
21 Бонусы 00:39:50
3 чел. ★ 5 Done
  Бонусы! Подарки! Призы! Плюшки и Плюшечки!
Всё что душе угодно сможешь ты добавить после этого урока, а я покажу как сделать основные - бонусы, с помощью отдельного класса!

*Задание:: насладиться полученным результатом и дописать много-много приделок, которые только улучшат и украсят игру!
Отчёт отправил: 14981. DimanDOS Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Познакомился с Dictionary. Думаю эта функция может применяться и в других программах. 
Сложности: Разобраться с Dictionary 
Комментарии: Вот я и закончил курс! С одной стороны я очень рад что получил такой результат, а с другой даже печально что курс закончился... Две стороны, как у медали. Но есть соображения над чем ещё поработать в свободное время. Добавил ещё один вариант бонусов - монетки. Если у тебя есть 10 монет и больше ты можешь стать быстрее, если 13 и больше - увеличить огонь, а если 15 и больше то количество бомб. Спасибо автору за замечательную идею воплощённую в этом курсе!  
22 ФИНАЛЬНЫЙ УРОК без видео
3 чел. ★ 5 Done
  (В этом уроке нет видео)
Приветствую!
Ты дошел до конца этого курса, до этой черты доходят немногие!
Ты уже победитель!!!
Расскажи в нескольких словах что ты узнал на курсе.

Отчёт отправил: 14981. DimanDOS Выполнено за 2 час. 40 мин. [Показать отчёт]
Научился: Монтировать видео. Об остальном в обзоре 
Сложности: Красиво сделать обзор 
Комментарии: Курс очень интересный, познавательный. Я уверен что его ждёт БОЛЬШОЕ будущее, он станет таким же, одним из самых лучших, как к примеру, Сокобан. 
Видеообзор: zkQdGp36OjE
  Итого:   22 видеоурока 7 час. 26 мин.
3 чел. ★ 4.97  
  Финалисты:   DimanDOS,   Dimon,   Neverwinter 2 .

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





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

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

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

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


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



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