June is Combung
인터페이스 예제 (전투게임) 본문
package test;
import java.util.Random;
class Unit {
Random rd = new Random();
final int MAX_HP; // 상수는 무조건 대문자
int hp;
String name;
Unit(int hp, String name) {
MAX_HP = hp;
this.hp = hp;
this.name = name;
}
void attack(Unit unit, int range1, int range2) {
int attackhp = rd.nextInt((range2 - range1) + 1) + range1;
unit.hp = unit.hp - attackhp;
System.out.printf("%s가 %s %d 공격 (%d / %d) \n", name, unit.name, attackhp, unit.hp, unit.MAX_HP);
}
}
class AirUnit extends Unit {
AirUnit(int hp, String name) {
super(hp, name); // 부모 생성자에 접근 : 부모안에 상수가 무조건 초기값을 가져야 하기때문에
// 생성할때 반드시 초기값을 넣어줘야됨
}
}
class GroundUnit extends Unit {
GroundUnit(int hp, String name) {
super(hp, name);
}
}
interface Heal {
} // 사람만 hp 줄수 있음
interface Repair {
} // 기계만 hp 줄수있음
class Tank extends GroundUnit implements Repair {
Tank() {
super(150, "탱크");
}
@Override
public String toString() {
return "Tank [hp = " + hp + "]";
}
}
class Zat extends AirUnit {
Zat() {
super(100, "제트");
}
@Override
public String toString() {
return "Zat [hp = " + hp + "]";
}
}
class FixMechine extends GroundUnit implements Repair {
FixMechine() {
super(120, "수리기계");
}
@Override
public String toString() {
return "FixMechine [hp = " + hp + "]";
}
// 수리할 수 있는 기능
void repairHp(Repair repair) {
Unit unit = (Unit) repair; // 여러개의 클래스가 있는데 unit 상속받은애 ,
// repair 상속받은 애만 수리할 수 있음
// 그래서 unit 타입 이기 때문에 unit 안에 들어가 있는 애만 접근 가능하다
// MAX_HP ,hp , name 접근이 가능하다
unit.hp = unit.hp + 10;
System.out.printf("%s: 수리 완료 %d/%d \n", unit.name, unit.hp, unit.MAX_HP);
}
}
class Solider extends GroundUnit implements Heal {
Solider() {
super(120, "파이터");
}
}
class Fighter extends GroundUnit implements Heal {
Fighter() {
super(100, "솔져");
}
}
class Healer extends AirUnit implements Heal {
Healer() {
super(80, "힐러");
}
void heal(Heal heal, int range1, int range2) {
Unit unit = (Unit) heal;
int healHp = rd.nextInt((range2 - range1) + 1) + range1;
;
unit.hp = unit.hp + healHp;
System.out.printf("%s: 힐(+%d) 완료 %d/%d \n", unit.name, healHp, unit.hp, unit.MAX_HP);
}
}
public class interfaceEx {
public static void main(String[] args) {
Tank tank = new Tank();
Zat zat = new Zat();
FixMechine fx = new FixMechine();
Fighter fighter = new Fighter();
Healer healer = new Healer();
Solider solider = new Solider();
tank.attack(zat, 6, 12);
tank.attack(zat, 6, 12);
tank.attack(zat, 6, 12);
zat.attack(tank, 5, 8);
zat.attack(tank, 5, 8);
fx.repairHp(tank);
// fx.repairHp(zat); implement Repair zat 클래스에 없어서 불가능
// 힐러 80 , 파이터 120 , 솔저 만들고 100
// 탱크 파이터 공격 (5 - 15 )
// 솔저 탱크 (10 - 18), 제트기 공격
// 힐러가 파이터 힐 (6- 13)
tank.attack(fighter, 5, 15);
solider.attack(tank, 10, 18);
healer.heal(fighter, 6, 13);
}
}
Comments