[상속-20] Game 연습문제

seratpfk·2022년 8월 2일
0

JAVA

목록 보기
70/96

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);
}
  • 내 에너지 : getEnergy(), this.getEnergy()
  • 내 공격력 : getPower(), this.getPower()
  • 내 이름 : getName(), this.getName()
  • 상대 에너지 : unit.getEnergy()
  • 상대 공격력 : unit.getPower()
  • 상대 이름 : unit.getName()

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

0개의 댓글