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

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

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

Бомбермэн

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

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

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

Хочу купить!

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

Цена: 2500 p.


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

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

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

*Задание:: дописать ещё возможные состояния, прикрепить скриншот Перечисления
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 22 час. 54 мин. [Показать отчёт]
Научился: Всё умел. Идем дальше. 
Сложности: А перечисления вложенными быть не могут, да? ((( Как включить количество ссылок над функцией? 
3 Все работы хороши 00:15:51
6 чел. ★ 5 Done
  Пройдем по смежным профессиям, без которых, увы, начинающему программисту не обойтись!

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

*Вопрос:: какие нужно провести обязательные дополнения при первом заполнении карты, для корректной игры?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 33 мин. [Показать отчёт]
Научился: Создавать игровое поле 
Сложности: Ничего, всё супер!!! Классно выглядит, уже немного нарисовали а уже классно выглядит!! Нужно еще убрать пару стен от места дислокации игрока, чтобы он бомбу мог поставить и спрятаться за углом. 
5 Главный герой 00:14:58
5 чел. ★ 5 Done
  На уроке мы начнем заниматься специальным классом, который будет отвечать за нашего главного героя.
Целый отдельный класс, специально созданный для одной задачи: управлением состоянием главного героя.

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

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

*Вопрос:: почему гл. герой ходит сквозь стены?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 36 мин. [Показать отчёт]
Научился: Не давать герою ходить сквозь препятствия. 
Сложности: Главный герой ходит сквозь стены потому что мы при проверке сравниваем с центром гг, а не с его углами. PS кстати, становится понятно, зачем "уменьшен" главный герой... Надеюсь, я окажусь неправ. 
8 Никуда нельзя! 00:21:07
4 чел. ★ 5 Done
  Будем дописывать процедуру проверки смежных клеток, делая перемещение гл.героя более правильным.

*Задание:: сделать плавное смещение героя при переходе сквозь стену
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 34 мин. [Показать отчёт]
Научился: Запрещать игроку ходить сквозь стены "углами". 
Сложности: Плавного смещения быть не должно: оно появляется в следствии нашей реализации. В реальной игре это по-другому сделано (там игрок по сетке ходит, а не шагами). И я, честно говоря,  не хочу "дореализовывать" эту плавность, а (если будет время) сделаю, как в настоящей игре. Ну.... Чтобы была плавность надо написать не sy = leftUpWallDawn - playerUp; а sy -= step; - если это неправильно, чтож... всё равно я бы весь переделал по-другому. P.S. И да - теперь герой не "залазит" углами на стены. P.P.S.  Извиняюсь, что не согласился с автором. 
9 Рождение монстра 00:20:16
4 чел. ★ 5 Done
  Главному герою нужно с кем-то сражаться!
Мы начнем создавать врагов и размещать их на нашей игровой карте.

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

*Задание:: заставить Моба передвигаться к опр. точке
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 36 мин. [Показать отчёт]
Научился: Рефакторинг кода. Создание объекта в конструкторе. 
Сложности: Составить алгоритм перемещения монстра. Блин. Так себе получилось. Но в принципе работает. 
11 Дальняя дорога 00:40:36
4 чел. ★ 4.5 Done
  Создаем метод поиска пути до определенной точки.

*Задание:: написать словесное описание трех уровней сложности Моба
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 7 мин. [Показать отчёт]
Научился: Повторил поиск в ширину. 
Сложности: Сделать всё это. Уровни сложности: 1. Монстры случайно ходят по карте 2. Монстры пытаются найти игрока 3. Монстры уклоняются от бомб не забывая про игрока. 
12 Ориентация на местности 00:15:12
3 чел. ★ 5 Done
  Дописываем процедуру, помогающую найти следующую точку, в которую необходимо дойти.

*Задание:: дописать программу так, чтобы моб обходил препятствия
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 22 час. 57 мин. [Показать отчёт]
Научился: Прокладывать путь для моба. 
Сложности: Дописывать метод я не рискну, но предложил бы следующий алгоритм. 1. Моб выбирает точку, куда ему идти. 2. Пытается идти к ней, проверяя, меняется ли координата. 3. Если перестаёт меняться - снова делает поиск в ширину, прокладывая новый путь. PS поиск в ширину сам ведь обходит препятствия PPS не знаю, что помещать на скриншоте, пока ничего нового визуально. 
13 Бомба своими руками 00:20:39
3 чел. ★ 5 Done
  Это же БОМБЕРМЕН!
У него должна быть БОМБА! На этом уроке мы этим и займемся! Подарим нашему бомбермену бомбочку, и у него будет возможность её установить!

*Вопрос:: где должна располагаться информация о наличии бомб? (в каких классах?)
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 3 дня 23 час. 34 мин. [Показать отчёт]
Научился: Заставлять монстра двигаться и выбирать путь. 
Сложности: Самым сложным было найти ошибку, из-за чего мобы залипали на месте через некоторое время после движения. Это жесть.... На это ушло... ну вобщем сами видите, сколько ушло..... (((((( PS инфа о бомбах прописывается в карте состояний, верно? значит везде где есть map - там и будет информация. PPS дурацкая ошибка в 13-м уроке.... будешь тут после этого суеверным... 
14 Ложись, БОМБА! 00:23:47
3 чел. ★ 5 Done
  Конечно же у бомбы должен быть таймер, не взрываться же ей в руках?! Будем реализовывать красоту, которая отвечает за "тиканье" бомбы.

*Вопрос:: как сообщить «наверх», что бомбе пора взорваться?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 43 мин. [Показать отчёт]
Научился: Рисовать на пикчербоксе!! 
Сложности: Как сообщить наверх, что бомбе пора взорваться? Как заработать миллион за один день? Ответы на эти и другие вопросы в нашем ежемесячном журнале "А фиг его знает!")) Мне понравился способ рисования. Сделать чтобы не накладывались? Да проще простого - старым дедовским способом))))  
15 Ба-БАХ! 00:14:28
3 чел. ★ 5 Done
  Реализовываем детонацию бомбы

*Задание:: сделать так чтобы вместо «ВЗРЫВ» писалось «Бомба активирована!»
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 32 мин. [Показать отчёт]
Научился: Начал знакомиться с делегатами. Также узнал классный метод обновления изображения. 
Сложности: Воспользоваться делегатом. Не получилось. Когда нибудь уже доберусь до того, чтобы  пройти по ним урок ... 
16 Горим! 00:25:08
3 чел. ★ 5 Done
  Будем реализовывать момент горения после детонации бомбы.

*Вопрос:: почему гл. герой не может наступить на место со взрывом и как это исправить?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 1 мин. [Показать отчёт]
Научился: Взрывать бомбу))) 
Сложности: Почему плэйер не может наступить на огонь.... Да потому что у нас в функции ИзЭмпти проверяется на пусто, а всё остальное - ходить нельзя, потому и не может. Но вообще то и не должен, ведь огонь убивает. Хотя по правилам игры игроку надо давать возможность умереть))) PS Бомба взрывает бомбу! Yo! 
17 Сборщик мусора 00:31:51
3 чел. ★ 5 Done
  Сборщик мусора (garbage collector) - специальный процесс, периодически освобождает память, удаляя объекты, которые уже не будут востребованы приложениями.
На уроке мы более подробно познакомимся с этой формой управления памятью.

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

*Вопрос:: в какой же момент должен погибнуть гл. герой?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 32 мин. [Показать отчёт]
Научился: Убирать огонь с игрового поля. 
Сложности: Главный герой должен погибнуть: если коснулся огня (это можно сделать в методе этого урока - если герой на огне - ему конец), если герой коснулся моба (надо у кого-то, лучше у моба - у него свой таймер есть - проверять - не совпала ли с героем координата) и если...... барабанная дробь..... кончилось время на уровень. Да да, уровень ограничен временем. Но с последним я не согласен - когда время кончилось, лучше вместо смерти выпускать мощных врагов - чтобы и шанс был, но и задерживаться не хотелось. На скрине как раз пример. Только там не время кончилось, а я дверцу взорвал))))) 
19 Не пойман - не вор! 00:14:15
3 чел. ★ 5 Done
  Только сейчас мы приступаем к реализации окончания игры. Добавим процедуру, которая будут контролировать смерть главного героя.

*Задание:: добавить в гл. меню игры возможность выбора сложности игры
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 31 мин. [Показать отчёт]
Научился: Экономно проверять игру на окончание. 
Сложности: Ничего. Уровни сложности назвал в шутку))) 
20 Три уровня сложности 00:20:15
3 чел. ★ 5 Done
  Неинтересно играть с простым врагом, для этого мы добавим три уровня сложности игры, чтобы нам не заскучать на полях сражения!

*Задание:: сделать так, чтобы гл. герой поворачивался в ту сторону, в которую бежит
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 21 мин. [Показать отчёт]
Научился: Усложнять алгоритм движения мобов. Поворачивать гл. героя в нужную сторону. 
Сложности: Погрустить о том, что всё через MainBoard надо протаскивать... В общем-то ура, почти финиш. 
21 Бонусы 00:39:50
3 чел. ★ 5 Done
  Бонусы! Подарки! Призы! Плюшки и Плюшечки!
Всё что душе угодно сможешь ты добавить после этого урока, а я покажу как сделать основные - бонусы, с помощью отдельного класса!

*Задание:: насладиться полученным результатом и дописать много-много приделок, которые только улучшат и украсят игру!
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 3 час. 11 мин. [Показать отчёт]
Научился: Добавлять бонсы. 
Сложности: Понять, как работает "бонус класс". Всё работает, всё получилось. Но доделывать... Тут кошмар, сколько доделывать - даже просто анимацию добавить (надо отдельный курс пройти) - это уже целая история. А уж про прокачку я и не говорю. И да, жаль, что поле не может уходить за экран - в оригинальном сапёре оно может быть больше экрана. А как это сделать - я... ... даже не знаю, получится, или нет. PS Кстати, жаль нет вип урока. Кирилл, жди письма)) 
22 ФИНАЛЬНЫЙ УРОК без видео
3 чел. ★ 5 Done
  (В этом уроке нет видео)
Приветствую!
Ты дошел до конца этого курса, до этой черты доходят немногие!
Ты уже победитель!!!
Расскажи в нескольких словах что ты узнал на курсе.

Отчёт отправил: 1901. Neverwinter 2 Выполнено за 5 мин. [Показать отчёт]
Научился: Вспомнил о том, как непросто записывать обзоры... 
Сложности: Придумать текст и правильно его произнести. Курс получился замечательным, достаточно простым, с доходчивыми объяснениями. Я научился (правда не доконца понял, тут даже теория не помогла) пользоваться делегатами. Знаю теперь, как работает сборщик мусора. Вообще попрактиковался в использовании ООП. Вобщем - было нескучно! Спасибо Кириллу за то что решился создать свои уроки. Спасибо Игромистру за поддержку во время прохождения. Спасибо всем кто проверял мои работы. Встретимся в следующий раз уже нескоро (ухожу помогать другу в его проектах).  
Видеообзор: UWOEgtyqy7o
  Итого:   22 видеоурока 7 час. 26 мин.
3 чел. ★ 4.97  
  Финалисты:   DimanDOS,   Dimon,   Neverwinter 2 .

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





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

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

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

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


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



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