GameUnit클래스
public abstract class GameUnit { private String name; private int energy; private int power; private boolean isAlive; // boolean alive;로 해도 동일한 Getter/Setter가 생성됨 public GameUnit(String name, int energy, int power) { this.name = name; this.energy = energy > 0 ? energy : 0; this.power = power; } public void info() { System.out.println(name + "에너지 " + " 공격력 " + power); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getEnergy() { return energy; } public void setEnergy(int energy) { this.energy = energy; } public int getPower() { return power; } public void setPower(int power) { this.power = power; } public boolean isAlive() { return isAlive; } public void setAlive(boolean isAlive) { this.isAlive = isAlive; } public abstract void attack(GameUnit unit); }
Tank 클래스
public class Tank extends GameUnit { public Tank(String name) { super(name, 100, 10); } @Override public void attack(GameUnit unit) { // 10% 확률로 KO 시킬 수 있다. if(Math.random() < 0.1) { unit.setEnergy(0); unit.setAlive(false); System.out.println(unit.getName() + "를 한 방에 죽였다."); } else { int unitEnergy = unit.getEnergy() - getPower() < 0 ? 0 : unit.getEnergy() - getPower(); unit.setEnergy(unitEnergy); unit.setAlive(unitEnergy > 0); System.out.println(unit.getName() + "의 남은 에너지 " + unit.getEnergy()); } } }
Marine 클래스
public class Marine extends GameUnit { public Marine(String name) { super(name, 50,5); } @Override public void attack(GameUnit unit) { // 40% 확률로 KO 시킬 수 있다. if(Math.random() < 0.4) { unit.setEnergy(0); unit.setAlive(false); System.out.println(unit.getName() + "을 한 방에 죽였다."); } else { int unitEnergy = unit.getEnergy() - getPower() < 0 ? 0 : unit.getEnergy() - getPower(); unit.setEnergy(unitEnergy); unit.setAlive(unitEnergy > 0); System.out.println(unit.getName() + "의 남은 에너지 " + unit.getEnergy()); } } }
Main 클래스
public class Main { public static void main(String[] args) { GameUnit unit1 = new tank("탱크"); GameUnit unit2 = new Marine("마린"); unit1.info(); // 탱크 에너지 100 공격력 10 unit2.info(); // 마린 에너지 50 공격력 5 System.out.println("===전투 시작==="); // 공격 차례 정하기 boolean myTurn = Math.random() < 0.5; // 한 대씩 주고 받기 // 두 유닛이 모두 살아있으면 계속 싸움 while(unit1.isAlive() && unit2.isAlive()) { // while(unit1.getEnergy() > 0 && unit2.getEnergy() > 0) if(myTurn) { System.out.println(unit1.getName() + "의 공격!"); unit1.attack(unit2); // unit1이 unit2를 공격한다.(탱크는 10%확률로 상대를 한 번에 죽임) } else { System.out.println(unit2.getName() + "의 공격!"); unit2.attack(unit1); // unit2가 unit1을 공격한다.(마린은 40%확률로 상대를 한 번에 죽임) } myTurn = !myTurn; } System.out.println("===전투 종료==="); // 승자 확인 if(unit1.isAlive()) { System.out.println(unit1.getName() + "의 승리! 남은 에너지 " + unit1.getEnergy); } else { System.out.println(unit2.getName() + "의 승리! 남은 에너지 " + unit2.getEnergy); } } }
출력:
탱크에너지 공격력 10
마린에너지 공격력 5
===전투 시작===
탱크의 공격!
마린를 한 방에 죽였다.
===전투 종료===
탱크의 승리! 남은 에너지 100