Solution.java
package com.javarush.test.level13.lesson11.bonus03; /* Битва роботов 1 Разобраться в том, что тут написано. 2 http://info.javarush.ru/uploads/images/00/00/07/2014/08/12/50f3e37f94.png 3 Смириться со своей участью и продолжить разбираться в коде. 4 ... 5 Порадоваться, что мы все поняли. 6 Изменить код согласно новой архитектуре и добавить новую логику: 6.1 Сделать класс AbstractRobot абстрактным, вынести логику атаки и защиты из Robot в AbstractRobot. 6.2 Отредактировать класс Robot учитывая AbstractRobot. 6.3 Расширить класс BodyPart новой частью тела "грудь". 6.4 Добавить новую часть тела в реализацию интерфейсов Attackable и Defensable (в классе AbstractRobot). 7 http://info.javarush.ru/uploads/images/00/00/07/2014/08/12/3b9c65580b.png */ public class Solution { public static void main(String[] args) { Robot amigo = new Robot("Амиго"); Robot enemy = new Robot("Сгибальщик-02"); doMove(amigo, enemy); doMove(amigo, enemy); doMove(enemy, amigo); doMove(amigo, enemy); doMove(enemy, amigo); doMove(amigo, enemy); doMove(enemy, amigo); doMove(amigo, enemy); } public static void doMove(AbstractRobot robotFirst, AbstractRobot robotSecond) { BodyPart attacked = robotFirst.attack(); BodyPart defenced = robotFirst.defense(); System.out.println(String.format("%s атаковал робота %s, атакована %s, защищена %s", robotFirst.getName(), robotSecond.getName(), attacked, defenced)); } }
Bodypart.java
package com.javarush.test.level13.lesson11.bonus03; public final class BodyPart { final static BodyPart LEG = new BodyPart("нога"); final static BodyPart HEAD = new BodyPart("голова"); final static BodyPart ARM = new BodyPart("рука"); final static BodyPart CHEST = new BodyPart("грудь"); private String bodyPart; private BodyPart(String bodyPart) { this.bodyPart = bodyPart; } @Override public String toString() { return this.bodyPart; } }
AbstractRobot.java
package com.javarush.test.level13.lesson11.bonus03; public abstract class AbstractRobot { private static int hitCount; private String name; public BodyPart attack() { BodyPart attackedBodyPart = null; hitCount = hitCount + 1; if (hitCount == 1) { attackedBodyPart = BodyPart.ARM; } else if (hitCount == 2) { attackedBodyPart = BodyPart.HEAD; } else if (hitCount == 3) { attackedBodyPart = BodyPart.LEG; } else if (hitCount == 4) { hitCount = 0; attackedBodyPart = BodyPart.CHEST; } return attackedBodyPart; } public BodyPart defense() { BodyPart defencedBodyPart = null; hitCount = hitCount + 1; if (hitCount == 1) { defencedBodyPart = BodyPart.HEAD; } else if (hitCount == 2) { defencedBodyPart = BodyPart.LEG; } else if (hitCount == 3) { defencedBodyPart = BodyPart.ARM; } else if (hitCount == 4) { hitCount = 0; defencedBodyPart = BodyPart.CHEST; } return defencedBodyPart; } public Object getName() { return name; } }
Attackable.java
package com.javarush.test.level13.lesson11.bonus03; public interface Attackable { BodyPart attack(); }
Defensable.java
package com.javarush.test.level13.lesson11.bonus03; public interface Defensable { BodyPart defense(); }
Robot.java
package com.javarush.test.level13.lesson11.bonus03; public class Robot extends AbstractRobot implements Attackable, Defensable { private String name; public Robot(String name) { this.name = name; } public String getName() { return name; } }
Leave A Comment