Кодовый парусный корабль
Всем привет, решил добавить в это сообщество то, что здесь так редко бывает, а именно - код. Хотя, любому разработчику понятно, что то обилие кода, которое есть в любом хоть сколько-нибудь завершенном проекте объяснять (да и просто разместить) потянет на мега-супер-длинно-предлиннопост, поэтому рассмотрим небольшой код, который, в целом, будет интересен только начинающим разработчикам (коих тут, думаю, достаточное количество).
Не так давно я начал разрабатывать свою небольшую игру, где игрок выступает пиратским капитаном, а что делает пиратского капитана пиратским капитаном? Свой собственный корабль! Сейчас мы, вместе с вами, создадим наш собственный шаблон для корабля нашего абстрактного пирата.
Начнем с первого класса для нашего корабля, определяющего общие параметры для каждой составной части:
Данный класс включает в себя - цену предмета, его жизненные силы, текущий и максимальный износ. Для написания следующих классов мне потребовались специальные знания, а именно - какие же составные части есть в парусном корабле? С этим вопросом я вышел в интернет:
Как мы можем заметить, основных частей у корабля всего 4 (запоминайте цифры): корпус, рангоут, такелаж и паруса. Также мы можем заметить, что скриншот из википедии единственный содержит красочные картинки во всем посте. Что это значит? Ничего. Начнем с описания такелажа:
Первое, что можно заметить, все составные части наследуются от Item, описанного выше. Значит, они содержат в себе все поля из класса Item, а сам такелаж содержит в себе скорость поворота. Итак, следующий предмет - рангоут:
Рангоут же включает в себя скорость разгона и поворота (позже рассмотрим все параметры более подробно). Следующий класс - паруса:
Они влияют на максимальную скорость корабля и разгон. Следующий класс - тело:
Тело - это основной элемент корабля (к слову, до прочтения вики я знал только то, что у корабля есть тело и паруса). Пропустим рассмотрения класса, ибо самый важный и интересный класс впереди. Дамы и господа, представляю вашему вниманию первую часть класса корабля:
Как вы могли заметить тут расположены все экземпляры классов, которые были предоставлены вашему вниманию выше. Помимо этого, корабль можно создать только имея все его составные части - об этом говорит единственный конструктор класса(от 13-ой до 19-ой строки), принимающий в себя 4-ре аргумента. 4-ре аргумента у конструктора класса и 4 составные части корабля на Википедии - совпадение? Не думаю.
(к слову, я забыл создать конструкторы для каждой составной части, но там конструкторы будут выглядеть по типу: задайте все поля, чтобы создать - если нужно кому-то, то скину пример). Итак, перейдем ко второй части корабля, которая, по моему мнению, будет самой любопытной для начинающих:
Это наши поля класса Ship. Первым полем является имя корабля (я думал его добавить в конструктор, но подумал что имя, все же, лучше задавать отдельно, ведь корабль сначала создают, а потом называют, наверное...может да, а может и нет, но к чему это я? Неважно.)
Как можно увидеть, что все поля возвращают значения, полученные из составных частей корабля, таким образом, напрямую влиять на эти значения нельзя.
Следующие три поля отвечают за способность нашего корабля к передвижению. Например, возьмем поле maxSpeed. Максимальная скорость складывается из - максимальной, которую может развить корпус и максимальной скорости, которую могут развить паруса деленную на количество переменных (т.е. на 2). Правильно это или нет с точки зрения реальности неизвестно, но ведь игры существуют в допущении, поэтому не суть. Например, скорость вращения состоит из 3-х аргументов и поэтому общий результат делиться на 3-и. Думаю, с этим понятно. Перейдем к следующей тройке полей:
Количество хп - это, думаю, понятно. Можно было бы его привести к процентам, но я не стал (пример привода к процентам находится ниже). Также у нас есть два типа защиты. Одна - отнимает количество урона от каждой атаки по кораблю, а вторая - отнимается вместо хп, пока не равна нулю.
Пропустим самое скучное и перейдем к износу. Тут я привел износ к процентам и для этого мне тоже пришлой выйти в интернет (что демонстрирует насколько высокий уровень знания математики нужен для программирования). Мы берем количество процентов (100), умножаем его на текущее состояние всех элементов, деленное на их максимальное состояние.
Также вы можете заметить, что у нашего корабля есть лист с пушками. Класс пушки выглядит так:
На предыдущем скриншоте можно увидеть, что общий урон корабля мы получаем пройдя по всем пушкам, которые есть у нас на борту и собрав с них информацию об их уроне, а тут, собственно, и находится урон. К тому же, я забыл добавить к общей стоимости корабля общую стоимость всех пушек, но принцип, думаю, понятен.
Напоследок привожу общий код класса Ship:
Надеюсь, кому-то этот пост будет интересен и полезен, возможно, в будущем, я напишу следующие части кодового парусного корабля, добавив в него методы получения урона, стрельбы, передвижения и прочего-прочего. Всем спасибо за внимание.
@admin, привет. Скажите, мой пост просто никому не интересен, либо произошла ошибка? Пост нельзя найти через поиск и в сообществе он не показывается, хотя в сообществе показываются даже посты с отрицательным рейтингом.