Norfin85

Norfin85

На Пикабу
поставил 158 плюсов и 156 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
10 лет на Пикабу
32К рейтинг 18 подписчиков 3 подписки 342 поста 46 в горячем

Бог миловал...

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

Бог миловал... Зависимость, Юмор, Алкоголизм
Показать полностью 1

Что ты знаешь о боли...)

Что ты знаешь о боли...)

Momemto mori...

Momemto mori...

Из серии показалось...)

Тенотен детский, ребенок спокоен - раздеваться настроен...

Из серии показалось...) Показалось, Мысли, Юмор, Гифка, BadComedian, Джордж Харви

В Германии произошла серия нападений злых клоунов на прохожих

http://m.vz.ru/news/2016/10/23/839712.html
В Германии произошла серия нападений злых клоунов на прохожих Германия, Куда катится мир, Юмор
Показать полностью 1

Выполняем задание на Abstract Factory Pattern часть 2

Представляю Вам вторую часть задания по абстрактной фабрике - Битва танков.

В программе появился учет скоростей разворота и перезарядки танков, небольшие отчеты по совершенным действиям танков, танков теперь 5л+3с+1т. Бои проходя также один на один, но пока разворачивается, к примеру, тяжелый танк легкий успевает его прилично повредить. У танков появились очки хода, которые они тратят на действия. И немного подробнее будет изложено ниже.

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

Изменена структура проекта:

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

По замечаниям в прошлых постах исправлены фабрики - теперь для выбора типа танка используется enum:

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост
Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

Мммм...можно почитать тут:

http://developer.alexanderklimov.ru/android/java/enum.php

Сильно переработан класс Tank - armor перенесен в абстрактный класс, добавлены переменные curDislocation, actionPoints, создан метод public void doAction(Tank tank), исправлен конструктор с учетом новых переменных:

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

Изменения коснулись, соответственно, и классов-наследников Tank.

И переработана сама программа TankBattle - танков теперь больше, бой идет, пока одна из сторон не уничтожена, появилась система раздачи очков действий и пауза - 1 секунда перед каждой раздачей, из-за чего появился выброс исключения, часть операций перенесена внутрь классов:

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

И пример боя:

Начался бой между USSR_MEDIUM и GERMAN_MEDIUM

USSR_MEDIUM расположение - 1


GERMAN_MEDIUM расположение - 0


GERMAN_MEDIUM нанес 50 урона. У противника осталось 150 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 100 очков жизни.


USSR_MEDIUM развернулся.


USSR_MEDIUM нанес 50 урона. У противника осталось 150 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 50 очков жизни.


USSR_MEDIUM нанес 50 урона. У противника осталось 100 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 0 очков жизни.


USSR_MEDIUM уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_MEDIUM


USSR_MEDIUM расположение - 1


GERMAN_MEDIUM расположение - 1


USSR_MEDIUM развернулся.


GERMAN_MEDIUM развернулся.


USSR_MEDIUM нанес 50 урона. У противника осталось 50 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 150 очков жизни.


USSR_MEDIUM нанес 50 урона. У противника осталось 0 очков жизни.


GERMAN_MEDIUM уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 1


GERMAN_LIGHT расположение - 1


USSR_LIGHT развернулся.


GERMAN_LIGHT развернулся.


USSR_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


GERMAN_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_MEDIUM


USSR_LIGHT расположение - 1


GERMAN_MEDIUM расположение - 1


USSR_LIGHT развернулся.


USSR_LIGHT нанес 20 урона. У противника осталось 180 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 160 очков жизни.


GERMAN_MEDIUM развернулся.


USSR_LIGHT нанес 20 урона. У противника осталось 140 очков жизни.


GERMAN_MEDIUM нанес 57 урона. У противника осталось 43 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 120 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 100 очков жизни.


GERMAN_MEDIUM нанес 57 урона. У противника осталось -14 очков жизни.


USSR_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 1


GERMAN_LIGHT расположение - 1


USSR_LIGHT развернулся.


GERMAN_LIGHT развернулся.


USSR_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


GERMAN_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 0


GERMAN_LIGHT расположение - 0


USSR_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


GERMAN_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 1


GERMAN_LIGHT расположение - 0


USSR_LIGHT развернулся.


GERMAN_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


USSR_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 0


GERMAN_LIGHT расположение - 1


USSR_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


GERMAN_LIGHT развернулся.


USSR_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


USSR_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_MEDIUM


USSR_LIGHT расположение - 0


GERMAN_MEDIUM расположение - 1


USSR_LIGHT нанес 20 урона. У противника осталось 180 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 160 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 140 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 120 очков жизни.


GERMAN_MEDIUM развернулся.


USSR_LIGHT нанес 20 урона. У противника осталось 100 очков жизни.


GERMAN_MEDIUM нанес 57 урона. У противника осталось 43 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 80 очков жизни.


USSR_LIGHT нанес 20 урона. У противника осталось 60 очков жизни.


GERMAN_MEDIUM нанес 57 урона. У противника осталось -14 очков жизни.


USSR_LIGHT уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_LIGHT


USSR_MEDIUM расположение - 1


GERMAN_LIGHT расположение - 0


GERMAN_LIGHT нанес 20 урона. У противника осталось 130 очков жизни.


GERMAN_LIGHT нанес 20 урона. У противника осталось 110 очков жизни.


GERMAN_LIGHT нанес 20 урона. У противника осталось 90 очков жизни.


USSR_MEDIUM развернулся.


GERMAN_LIGHT нанес 20 урона. У противника осталось 70 очков жизни.


USSR_MEDIUM нанес 57 урона. У противника осталось -11 очков жизни.


GERMAN_LIGHT уничтожен.


Начался бой между USSR_LIGHT и GERMAN_LIGHT


USSR_LIGHT расположение - 0


GERMAN_LIGHT расположение - 1


USSR_LIGHT нанес 27 урона. У противника осталось 73 очков жизни.


USSR_LIGHT нанес 27 урона. У противника осталось 46 очков жизни.


GERMAN_LIGHT развернулся.


USSR_LIGHT нанес 27 урона. У противника осталось 19 очков жизни.


GERMAN_LIGHT нанес 27 урона. У противника осталось -8 очков жизни.


USSR_LIGHT уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_LIGHT


USSR_MEDIUM расположение - 1


GERMAN_LIGHT расположение - 1


GERMAN_LIGHT развернулся.


GERMAN_LIGHT нанес 20 урона. У противника осталось 50 очков жизни.


USSR_MEDIUM развернулся.


GERMAN_LIGHT нанес 20 урона. У противника осталось 30 очков жизни.


USSR_MEDIUM нанес 57 урона. У противника осталось -38 очков жизни.


GERMAN_LIGHT уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_MEDIUM


USSR_MEDIUM расположение - 1


GERMAN_MEDIUM расположение - 1


USSR_MEDIUM развернулся.


USSR_MEDIUM нанес 50 урона. У противника осталось 10 очков жизни.


GERMAN_MEDIUM развернулся.


GERMAN_MEDIUM нанес 50 урона. У противника осталось -20 очков жизни.


USSR_MEDIUM уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_MEDIUM


USSR_MEDIUM расположение - 1


GERMAN_MEDIUM расположение - 0


GERMAN_MEDIUM нанес 50 урона. У противника осталось 150 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 100 очков жизни.


USSR_MEDIUM развернулся.


USSR_MEDIUM нанес 50 урона. У противника осталось 50 очков жизни.


GERMAN_MEDIUM нанес 50 урона. У противника осталось 50 очков жизни.


USSR_MEDIUM нанес 50 урона. У противника осталось 0 очков жизни.


GERMAN_MEDIUM уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_MEDIUM


USSR_MEDIUM расположение - 0


GERMAN_MEDIUM расположение - 0


USSR_MEDIUM нанес 50 урона. У противника осталось -40 очков жизни.


GERMAN_MEDIUM уничтожен.


Начался бой между USSR_MEDIUM и GERMAN_HEAVY


USSR_MEDIUM расположение - 0


GERMAN_HEAVY расположение - 0


USSR_MEDIUM нанес 40 урона. У противника осталось 460 очков жизни.


GERMAN_HEAVY нанес 90 урона. У противника осталось -40 очков жизни.


USSR_MEDIUM уничтожен.


Начался бой между USSR_HEAVY и GERMAN_HEAVY


USSR_HEAVY расположение - 1


GERMAN_HEAVY расположение - 1


GERMAN_HEAVY развернулся.


USSR_HEAVY развернулся.


GERMAN_HEAVY нанес 80 урона. У противника осталось 420 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось 380 очков жизни.


GERMAN_HEAVY нанес 80 урона. У противника осталось 340 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось 300 очков жизни.


GERMAN_HEAVY нанес 80 урона. У противника осталось 260 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось 220 очков жизни.


GERMAN_HEAVY нанес 80 урона. У противника осталось 180 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось 140 очков жизни.


GERMAN_HEAVY нанес 80 урона. У противника осталось 100 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось 60 очков жизни.


GERMAN_HEAVY нанес 80 урона. У противника осталось 20 очков жизни.


USSR_HEAVY нанес 80 урона. У противника осталось -20 очков жизни.


GERMAN_HEAVY уничтожен.


App.Tanks.Ussr.UssrHeavyTank@677327b6


Все танки Германии уничтожены!

Выполняем задание на Abstract Factory Pattern часть 2 Java, Программирование, Паттерны, Задача, Длиннопост

Исходники программы: https://github.com/Norfin85/TankBattle

Показать полностью 7

Выполняем задание на Abstract Factory Pattern часть 1

В первой части мы создадим абстрактную фабрику танков, по одному экземпляру каждого танка и проведем бой между случайными танками СССР и Германии.

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Структура программы:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Весь код программы находится по адресу: https://github.com/Norfin85/TankBattle


Опишу лишь пару, на мой, взгляд интересных моментов.

Момент 1:

Классы LightUssrTank, MediumUssrTank, HeavyUserTank имеют различный показатель armor. Все переменные в классах имеют модификатор private, а значит объявление переменной должно происходить в классе . Но UssrFactory возвращает  объекты класса Tank, а значит поле armor будет недоступно в этих объектах. Эту проблему можно решить следующим образом:

В абстрактом классе Tank объявляется абстрактная функция getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

А в конкретных класса объявляется переменная armor и реализация функции getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Момент 2: в абстрактом классе задается конструктор, а в классе-наследнике UssrMediumTank он используется используя ключевое слово super(), при  этом класс UssrMediumTank имеет свой конструктор с большим количеством полей. Это позволяет нам объединять общие параметры для всех классов-наследников в один общий абстрактный класс.

И сама главная программа:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Программа пока очень громоздкая и не учитывает скорость стрельбы при встрече лоб в лоб. Это все будет исправлено во второй части путем создания таймера боя и очков действия танков. Также внутрь объектов будет помещена их ориентация.

И еще некоторые модификации...)

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост
Показать полностью 6

Тебе, вообще, что надо, человек...?

Тебе, вообще, что надо, человек...?
Отличная работа, все прочитано!