package ex05.ch04;
/*
DarkTempler (hp=100, power=70)
Arkan (hp=100, power=70)
5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기
생성
→ 질럿2
→ 드라군2
→ 다크템플러2
→ 리버2
→ 아칸2
공격
→ 질럿이 드라군 공격 hp 확인
→ 질럿이 다크템플러 공격 hp 확인
→ 리버가 아칸 공격 hp 확인
→ 아칸 리버 공격 hp 확인
→ 드라군이 다크템플러 공격 hp 확인
→ 리버가 리버 공격 hp 확인
*/
// Protoss 만들어서 추상적인 것에 의존하기 (attack 함수 결국 한 개에요) ======================================
class Protoss {
int getHp() {
return 3843270;
}
int getPower() {
return 38489290;
}
void setHp(int hp) {
}
void setPower(int power) {
}
void attack(Protoss unit) {
}
}
// 1. 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 (아칸 -> 다크템플러 -> 리버 -> 드라군 -> 질럿 순서로 작성함)
class Arkan extends Protoss {
int hp = 100;
int power = 70;
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
class DarkTempler extends Protoss {
int hp = 100;
int power = 70;
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
class River extends Protoss {
int hp = 100;
int power = 50;
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
class Dragoon extends Protoss {
int hp = 100;
int power = 10;
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
public void attack(Protoss unit) { //DIP 의존
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
class Zealot extends Protoss {
int hp = 100;
int power = 20;
int getHp() {
return hp;
}
int getPower() {
return power;
}
void setHp(int hp) {
this.hp = hp;
}
void setPower(int power) {
this.power = power;
}
public void attack(Protoss unit) {
// 1. 맞는 놈의 hp를 변경
unit.setHp(unit.getHp() - this.power);
}
}
public class StarGame {
public static void main(String[] args) {
// 질럿
Protoss z1 = new Zealot();
Protoss z2 = new Zealot();
// 드라군
Protoss d1 = new Dragoon();
Protoss d2 = new Dragoon();
// 다크템플러
Protoss dt1 = new DarkTempler();
Protoss dt2 = new DarkTempler();
// 리버
Protoss r1 = new River();
Protoss r2 = new River();
// 아칸
Protoss a1 = new Arkan();
Protoss a2 = new Arkan();
// 1. 질럿이 드라군 공격 hp 확인
z1.attack(d1);
System.out.println("드라군 d1의 hp : " + d1.getHp()); // 80
// 2. 질럿이 다크템플러 공격 hp 확인
z1.attack(dt1);
System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 80
// 3. 리버가 아칸 공격 hp 확인
r1.attack(a1);
System.out.println("아칸 a1의 hp : " + a1.getHp()); // 50
// 4. 아칸 리버 공격 hp 확인
a1.attack(r1);
System.out.println("리버 r1의 hp : " + r1.getHp()); // 30
// 5. 드라군이 다크템플러 공격 hp 확인
d1.attack(dt1);
System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 70
// 6. 리버가 리버 공격 hp 확인
r1.attack(r2);
System.out.println("리버 r2의 hp : " + r2.getHp()); // 50
}
}

Share article