[트러블 슈팅] 5. 스타 크래프트 예제

귤's avatar
Mar 18, 2025
[트러블 슈팅] 5. 스타 크래프트 예제
  • 내가 코드 짠 거
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 { public int getHp() { return 3843270; } public int getPower() { return 38489290; } public void setHp(int hp) { } public void setPower(int power) { } } // 1. 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 (아칸 -> 다크템플러 -> 리버 -> 드라군 -> 질럿 순서로 작성함) class Arkan extends Protoss { int hp = 100; int power = 70; public int getHp() { return hp; } public int getPower() { return power; } public void setHp(int hp) { this.hp = hp; } public void setPower(int power) { this.power = power; } } class DarkTempler extends Protoss { int hp = 100; int power = 70; public int getHp() { return hp; } public int getPower() { return power; } public void setHp(int hp) { this.hp = hp; } public void setPower(int power) { this.power = power; } } class River extends Protoss { int hp = 100; int power = 50; public int getHp() { return hp; } public int getPower() { return power; } public void setHp(int hp) { this.hp = hp; } public void setPower(int power) { this.power = power; } } class Dragoon extends Protoss { int hp = 100; int power = 10; public int getHp() { return hp; } public int getPower() { return power; } public void setHp(int hp) { this.hp = hp; } public void setPower(int power) { this.power = power; } } class Zealot extends Protoss { int hp = 100; int power = 20; public int getHp() { return hp; } public int getPower() { return power; } public void setHp(int hp) { this.hp = hp; } public void setPower(int power) { this.power = power; } } public class StarGame { static void attack(DarkTempler dt1) { dt1.hp = dt1.hp - dt1.power; } static void attack(River r1) { r1.hp = r1.hp - r1.power; } static void attack(Arkan a1) { a1.hp = a1.hp - a1.power; } static void attack(Dragoon d1) { d1.hp = d1.hp - d1.power; } static void attack(Zealot z1) { z1.hp = z1.hp - z1.power; } static void attack(Protoss p1) { p1.setHp(p1.getHp() - p1.getPower()); } public static void main(String[] args) { // 생성 ======================================== // 질럿2 Zealot z1 = new Zealot(); Zealot z2 = new Zealot(); // 드라군2 Dragoon d1 = new Dragoon(); Dragoon d2 = new Dragoon(); // 다크템플러2 DarkTempler dt1 = new DarkTempler(); DarkTempler dt2 = new DarkTempler(); // 리버2 River r1 = new River(); River r2 = new River(); // 아칸2 Arkan a1 = new Arkan(); Arkan a2 = new Arkan(); // 공격 ======================================== // 1. 질럿이 드라군 공격 hp 확인 Protoss p1 = new Dragoon(); attack(p1); attack(p1); System.out.println(p1.getHp()); // 2. 질럿이 다크템플러 공격 hp 확인 Protoss p2 = new River(); attack(p2); System.out.println(p2.getHp()); // 3. 리버가 아칸 공격 hp 확인 // 4. 아칸 리버 공격 hp 확인 // 5. 드라군이 다크템플러 공격 hp 확인 // 6. 리버가 리버 공격 hp 확인 } }

잘못한 점

  1. public 붙이지 말기
notion image
  1. attack 함수를 이용해서 모든 자식들에게 hp 변경하는 코드 추가하기 (이 코드를 입력 못했음)
notion image
  1. 추상적으로 바꿔서 new 하기
notion image
  1. hp 확인
notion image

정답

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

gyul