[JAVA] 42. 오버라이드로 게임 만들기

편준민's avatar
Feb 17, 2025
[JAVA] 42. 오버라이드로 게임 만들기
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 함수 결국 한개에요)
package ex05.ch04; class protoss { public int getHp() { // HP 상태확인 return 1; } public void setHp(int hp) { // HP 상태변경 } public int getPower() { // Power 상태확인 return 1; } } class Zealot extends protoss { int hp = 100; int power = 20; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getPower() { // 상태확인 return power; } } class Dragoon extends protoss { int hp = 100; int power = 10; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getPower() { // 상태확인 return power; } } class River extends protoss { int hp = 100; int power = 50; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getPower() { // 상태확인 return power; } } class Arakn extends protoss { int hp = 100; int power = 70; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getPower() { // 상태확인 return power; } } class DarkTempler extends protoss { int hp = 100; int power = 90; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } public int getPower() { // 상태확인 return power; } } public class StarGame { static void attack(protoss aUnit, protoss hUnit) { hUnit.setHp(hUnit.getHp() - aUnit.getPower()); } public static void main(String[] args) { protoss z1 = new Zealot(); // [ Zealot, protoss] protoss z2 = new Zealot(); // [ Zealot, protoss] protoss d1 = new Dragoon(); protoss d2 = new Dragoon(); protoss r1 = new River(); protoss r2 = new River(); protoss dt1 = new DarkTempler(); protoss dt2 = new DarkTempler(); protoss a1 = new Arakn(); protoss a2 = new Arakn(); attack(z1, d1); System.out.println("질럿 공격(20) -> 드라군 d1의 hp : " + d1.getHp()); attack(z1, dt2); System.out.println("질럿 공격(20) -> 다크템플러 dt2의 hp : " + dt2.getHp()); attack(r1, a1); System.out.println("리버 공격(50) -> 아칸 a1의 hp : " + a1.getHp()); attack(a2, r1); System.out.println("아칸 공격(70) -> 리버 r1의 hp : " + r1.getHp()); attack(d1, dt1); System.out.println("드라군 공격(10) -> 다크템플러 dt1의 hp : " + dt1.getHp()); attack(r1, r2); System.out.println("리버 공격(50) -> 리버 r2의 hp : " + r2.getHp()); attack(dt1, z1); System.out.println("다크템플러 공격(90) -> 리버 r1의 hp : " + z1.getHp()); attack(dt2, dt1); System.out.println("다크템플러 공격(90) -> 다크템플러 dt1의 hp : " + dt1.getHp()); } }
notion image

내가 찾아서 한 것들

  • 공격을 하기 위해서는 때리는 클래스와 맞는 클래스가 있다는 것을 파악.
  • 때리는 클래스가 있다면 power를 알아야 하기 때문에 getPower()를 이용하여 각 클래스의 power를 파악.
강사님 정답
Share article

YunSeolAn