Кодовый парусный корабль

Всем привет, решил добавить в это сообщество то, что здесь так редко бывает, а именно - код. Хотя, любому разработчику понятно, что то обилие кода, которое есть в любом хоть сколько-нибудь завершенном проекте объяснять (да и просто разместить) потянет на мега-супер-длинно-предлиннопост, поэтому рассмотрим небольшой код, который, в целом, будет интересен только начинающим разработчикам (коих тут, думаю, достаточное количество).

Не так давно я начал разрабатывать свою небольшую игру, где игрок выступает пиратским капитаном, а что делает пиратского капитана пиратским капитаном? Свой собственный корабль! Сейчас мы, вместе с вами, создадим наш собственный шаблон для корабля нашего абстрактного пирата.

Начнем с первого класса для нашего корабля, определяющего общие параметры для каждой составной части:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Данный класс включает в себя - цену предмета, его жизненные силы, текущий и максимальный износ. Для написания следующих классов мне потребовались специальные знания, а именно - какие же составные части есть в парусном корабле? С этим вопросом я вышел в интернет:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Как мы можем заметить, основных частей у корабля всего 4 (запоминайте цифры): корпус, рангоут, такелаж и паруса. Также мы можем заметить, что скриншот из википедии единственный содержит красочные картинки во всем посте. Что это значит? Ничего. Начнем с описания такелажа:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Первое, что можно заметить, все составные части наследуются от Item, описанного выше. Значит, они содержат в себе все поля из класса Item, а сам такелаж содержит в себе скорость поворота. Итак, следующий предмет - рангоут:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Рангоут же включает в себя скорость разгона и поворота (позже рассмотрим все параметры более подробно). Следующий класс - паруса:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Они влияют на максимальную скорость корабля и разгон. Следующий класс - тело:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Тело - это основной элемент корабля (к слову, до прочтения вики я знал только то, что у корабля есть тело и паруса). Пропустим рассмотрения класса, ибо самый важный и интересный класс впереди. Дамы и господа, представляю вашему вниманию первую часть класса корабля:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Как вы могли заметить тут расположены все экземпляры классов, которые были предоставлены вашему вниманию выше. Помимо этого, корабль можно создать только имея все его составные части - об этом говорит единственный конструктор класса(от 13-ой до 19-ой строки), принимающий в себя 4-ре аргумента. 4-ре аргумента у конструктора класса и 4 составные части корабля на Википедии - совпадение? Не думаю.
(к слову, я забыл создать конструкторы для каждой составной части, но там конструкторы будут выглядеть по типу: задайте все поля, чтобы создать - если нужно кому-то, то скину пример). Итак, перейдем ко второй части корабля, которая, по моему мнению, будет самой любопытной для начинающих:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Это наши поля класса Ship. Первым полем является имя корабля (я думал его добавить в конструктор, но подумал что имя, все же, лучше задавать отдельно, ведь корабль сначала создают, а потом называют, наверное...может да, а может и нет, но к чему это я? Неважно.)
Как можно увидеть, что все поля возвращают значения, полученные из составных частей корабля, таким образом, напрямую влиять на эти значения нельзя.

Следующие три поля отвечают за способность нашего корабля к передвижению. Например, возьмем поле maxSpeed. Максимальная скорость складывается из - максимальной, которую может развить корпус и максимальной скорости, которую могут развить паруса деленную на количество переменных (т.е. на 2). Правильно это или нет с точки зрения реальности неизвестно, но ведь игры существуют в допущении, поэтому не суть. Например, скорость вращения состоит из 3-х аргументов и поэтому общий результат делиться на 3-и. Думаю, с этим понятно. Перейдем к следующей тройке полей:

Количество хп - это, думаю, понятно. Можно было бы его привести к процентам, но я не стал (пример привода к процентам находится ниже). Также у нас есть два типа защиты. Одна - отнимает количество урона от каждой атаки по кораблю, а вторая - отнимается вместо хп, пока не равна нулю.

Пропустим самое скучное и перейдем к износу. Тут я привел износ к процентам и для этого мне тоже пришлой выйти в интернет (что демонстрирует насколько высокий уровень знания математики нужен для программирования). Мы берем количество процентов (100), умножаем его на текущее состояние всех элементов, деленное на их максимальное состояние.


Также вы можете заметить, что у нашего корабля есть лист с пушками. Класс пушки выглядит так:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

На предыдущем скриншоте можно увидеть, что общий урон корабля мы получаем пройдя по всем пушкам, которые есть у нас на борту и собрав с них информацию об их уроне, а тут, собственно, и находится урон. К тому же, я забыл добавить к общей стоимости корабля общую стоимость всех пушек, но принцип, думаю, понятен.

Напоследок привожу общий код класса Ship:

Кодовый парусный корабль Код, Программирование, Unity, Длиннопост

Надеюсь, кому-то этот пост будет интересен и полезен, возможно, в будущем, я напишу следующие части кодового парусного корабля, добавив в него методы получения урона, стрельбы, передвижения и прочего-прочего. Всем спасибо за внимание.

Лига Разработчиков Видеоигр

6.7K постов22.1K подписчик

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

ещё комментарий