Битва роботов

  • 16
  • Недоступна
Юный робот решил запрограммировать сам себя на бой с другим роботом по имени Сгибальщик-2. Однако до конца дела пока не довёл. Теперь это ваша проблема… Ох, простите, ваша задача. Впрочем, не стоит беспокоиться: битвы роботов отличаются от драк тех, кто из плоти и крови ещё и своей логичностью.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (423)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Алексей
26 уровень, Санкт-Петербург
2 апреля, 19:16
Какая-то незаконченная игра, надо добавить роботом 100 здоровья, случайные хитКаунты, если атака совпала с защитой, тогда не вычетать ничего, если не совпала, вычитать хитКаунт, тогда бой приобретет смысл. Типичная браузерка нулевых ))
Алексей
26 уровень, Санкт-Петербург
2 апреля, 20:16
Вот сделал, вставил конец боя ) Сгибальщик-02 атаковал робота Амиго, атакована нога, защищена нога Уровень здоровья Амиго 22% Амиго атаковал робота Сгибальщик-02, атакована рука, защищена нога Уровень здоровья Сгибальщик-02 16% Амиго атаковал робота Сгибальщик-02, атакована голова, защищена рука Уровень здоровья Сгибальщик-02 12% Сгибальщик-02 атаковал робота Амиго, атакована нога, защищена голова Уровень здоровья Амиго 19% Амиго атаковал робота Сгибальщик-02, атакована рука, защищена голова Уровень здоровья Сгибальщик-02 10% Сгибальщик-02 атаковал робота Амиго, атакована рука, защищена грудь Уровень здоровья Амиго 17% Амиго атаковал робота Сгибальщик-02, атакована голова, защищена нога Уровень здоровья Сгибальщик-02 6% Сгибальщик-02 атаковал робота Амиго, атакована нога, защищена грудь Уровень здоровья Амиго 14% Сгибальщик-02 атаковал робота Амиго, атакована нога, защищена рука Уровень здоровья Амиго 11% Сгибальщик-02 атаковал робота Амиго, атакована рука, защищена голова Уровень здоровья Амиго 9% Амиго атаковал робота Сгибальщик-02, атакована голова, защищена грудь Уровень здоровья Сгибальщик-02 2% Сгибальщик-02 атаковал робота Амиго, атакована нога, защищена грудь Уровень здоровья Амиго 6% Амиго атаковал робота Сгибальщик-02, атакована рука, защищена нога Уровень здоровья Сгибальщик-02 0% Амиго победил :)
Алексей С
14 уровень
29 марта, 22:42
Я долгое время не мог понять код в задаче, но смог потом. На всякий случай напишу что происходит в программе, может кому то пригодиться. Для тех кто решает через сайт скажу что в правом верхнем углу есть кнопка показывающие 2 оставшихся класса т.к тут они не помещаются в вкладках. Я сначала этого не заметил. Итак класс Solution - объявляет двух роботов, и вызывает N число методов doMove. Сам doMove использует имена двух роботов которые он получает из переменных метода и через них получает какую часть тела атаковал и защитил робот(он их получит в результате наследования). После выводит сообщение о ходе на экран в этой конструкции String.format(если честно сам ее еще не до конца понимаю но видимо %s в тексте принимает то значение, которое идет после запятой т.е "%s атаковал робота %s" сначала %s будет равно robotFirst.getName(), а следующий robotSecond.getName() и тд. (надеюсь я правильно понял что это так работает) Интерфейсы Attackable и Defensable просто дают объявление методов атаки и защиты ( если честно не врубаюсь для чего они тут сделаны именно так, видимо чтобы просто дать задачу на использование интерфейсов. Так я в них тут смысла не вижу) Класс робот. Просто отвечает за присвоение имен роботам. Класс AbstractRobot. Он тут нужен для боя между роботами. Как он работает? Сразу скажу что для корректной работы создайте отдельную переменную для значения защиты, иначе если будет только одна переменная hitCount то программа будет некоректно вести бой. Есть строка hitCount = hitCount + 1 и такая же будет в защите. Что происходит после этого. Смысл класса заключается в том, чтобы после каждого действия роботы били и защищали каждый раз новую часть тела заканчиваю грудью. После этого переменную hitCount и ее аналог для защиты следует сбрасывать в 0 чтобы можно было начать все сначала. И класс BodyPart думаю понятно. Просто содержит в себе части тела и их название. Надеюсь кому то помог упростить понимание кода в данной задаче.
Антон Копанев Software Developer
21 марта, 14:54
Кто нибудь подскажет, почему я обязательно должен объявить метод getName как абстрактный в абстрактном классе AbstractRobot ?
public abstract String getName();
Если я хочу объявить и реализовать метод только непосредственно в классе Robot, IDEA дает ошибку. Пишет типо объявите метод getName, как абстрактный в классе AbstractRobot.
public String getName() {
        return name;
    }
Но почему так? Я понимаю что Robot наследуется от AbstractRobot и объявление абстрактного метода getName в AbstractRobot выглядит логичным. Но если я захочу просто расширить класс Robot и реализовать там методы, которых нет и не предусматривалась в абстрактном классе AbstractRobot, то почему меня заставляют объявлять эти методы как абстрактные?
Антон Копанев Software Developer
21 марта, 15:01
Ага, всё, понял. Потому что в методе doMove, параметры передаваемые в аргументах, имеют именно тип абстрактного класса. Поэтому и нужно именно в абстрактном классе AbstractRobot объявить абстрактный метод getName.
public static void doMove(AbstractRobot robotFirst, AbstractRobot robotSecond) {
    // аргументы с типои AbstractRobot
    BodyPart attacked = robotFirst.attack();
    BodyPart defenced = robotFirst.defense();
    System.out.println(String.format("%s атаковал робота %s, атакована %s, защищена %s",
    // здесь мы вызываем метод getName(). Именно поэтому в нем нужно обязательно объявить абстрактный метод getName()
            robotFirst.getName(), robotSecond.getName(), attacked, defenced));
}
Всем спасибо за помощь ))
Alexander Mul
20 уровень, Warsaw
25 февраля, 09:56
Вчера сидел думал мозг вскипел(( Сегодня с утра сел и решил=)
Dmitry Panchenko
20 уровень, Москва
19 февраля, 12:20
По логике, тут бы лучше подошел: hitCount = random.nextInt(3) + 1;
Антон
16 уровень, иваново
25 марта, 17:50
Долго тупил как сделать без рандома, потом плюнул и сделал через него. только через hitCount = (int) (Math.random() * 4) + 1;
Oleg
16 уровень, Москва
7 февраля, 11:19
Реально непонятно откуда берут начальное значение hitcount .
мистер т
34 уровень, Москва
2 февраля, 16:37
почему hitcount без присвоения ему значения равен нулю?
мистер т
34 уровень, Москва
2 февраля, 16:55
нашел такую инфу в обсуждениях hitCount - статическая переменная. Она принадлежит классу, а не его объектам. И инициализируется значением по умолчанию во время загрузки класса. (где то была лекция про статические переменные..). ...
Никита
18 уровень, Вологда
30 марта, 18:57
Нашел в будущих лекциях: Если статической переменной не присвоить стартовое значение, она инициализируется значением по умолчанию: Тип Значение по умолчанию byte 0 short 0 int 0 long 0 float 0.0 double 0.0 char '\u0000'(то же самое, что и 0) boolean false Object и любые классы null
Vlodzjo
18 уровень, Львов
27 января, 17:23
just else xD
Даниил Александрович
30 уровень, Тамбов
22 января, 07:54
последнее условие
==4
меняем на
>=4
Станислав
19 уровень, Мариуполь
23 января, 18:39
else
Dolivo Serg
15 уровень, Харьков
24 марта, 17:04
ХАхах +
Алексей Astronaut в SpaceX
18 января, 11:46
Некоторые задачи, или одно из условий получается решать интуитивно, решение то правильное но есть чувство что как будто бы что то недопонимаю или упускаю☹️ Я один такой?