[JAVA]Quiz_06

김나영·2022년 8월 2일
0
post-thumbnail

Quiz06_game

* GameUnit 클래스

public abstract class GameUnit {
	private String name;
    private int energy;
    private int power;
    private boolean inAlive;
    public GameUnit(String name, int energy, int power){
    	this.name = name;
        this.energy = energy > 0 ? energy : 0;
        this.power = power;
        this.isAlive = energt > 0;
    }
    public void info() {
    	System.out.println(name + "에너지" + energy + "공격력" + 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) {
    	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) {
	 	// 내 애너지 : getEnergy(), this.getEnergy()
		// 내 공격력 : getPower(), this.getPower()
		// 내 이름   : getName(), this.getName()		
		// 상대 에너지 : unit.getEnergy()
		// 상대 공격력 : unit.getPower()
		// 상대 이름   : unit.getName()	
		// 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());
		}
	}
}
profile
응애 나 애기 개발자

0개의 댓글