
package com.example.firsttask;
public abstract class Champion {
private String name;
private int level;
private int hp;
private int attackDamage;
private int defense;
public interface MeleeChampion {
void dash(Champion target); // 돌진 공격
}
public interface RangedChampion {
void kite(); // 뒤로 빠지면서 공격
}
public Champion(String name, int hp, int attackDamage, int defense) {
this.name = name;
this.level = 1;
this.hp = hp;
this.attackDamage = attackDamage;
this.defense = defense;
}
public String getName() {
return name;
}
public int getLevel() {
return level;
}
public int getHp() {
return hp;
}
public int getAttackDamage() {
return attackDamage;
}
public void takeDamage(int damage) {
int actualDamage = damage - defense;
if (actualDamage < 0) {
actualDamage = 0;
}
hp -= actualDamage;
System.out.println(name + "이(가) " + actualDamage + " 피해를 입음! 남은 체력: " + hp);
}
public void basicAttack(Champion target) {
System.out.println(name + " → " + target.name + " 기본 공격!");
target.takeDamage(attackDamage);
}
public abstract void useQ(Champion target);
}
package com.example.firsttask;
public class Garen extends Champion implements Champion.MeleeChampion {
public Garen(String name) {
super(name, 620, 66, 36);
}
@Override
public void dash(Champion target) {
System.out.println("Garen dash!");
target.takeDamage(50);
}
@Override
public void useQ(Champion target) {
System.out.println("Garen이 Q스킬을 사용하였습니다!");
target.takeDamage(getAttackDamage() + 30);
}
}
package com.example.firsttask;
public class Ashe extends Champion {
public Ashe(String name) {
super(name, 570, 59, 28);
}
@Override
public void useQ(Champion target) {
System.out.println("Ashe가 Q스킬을 사용하였습니다!");
target.takeDamage(getAttackDamage() * 2);
}
}
package com.example.firsttask;
public class Main {
public static void main(String[] args) {
Champion ashe = new Ashe("애쉬");
Champion garen = new Garen("가렌");
ashe.basicAttack(garen);
garen.basicAttack(ashe);
ashe.useQ(garen);
garen.useQ(ashe);
}
}
☑️ 추상 클래스
☑️ 상속
☑️ 오버라이드
☑️ 다형성
☑️ 인터페이스
@Override
public void levelUp() {
System.out.println("Garen이 레벨업했습니다!");
int level = getLevel() + 1;
int hp= getHp() + 10;
int attackdamege = getAttackDamage() +10;
System.out.println("가렌의 레벨이 " + level+ "렙이 되어 hp가 " + hp + "로 증가하고 평타 데미지는 "
+ attackdamege + "으로 증가하였습니다.");
}
public void takeDamage(int damage) {
int actualDamage = damage - defense;
if (actualDamage < 0) {
actualDamage = 0;
}
hp -= actualDamage;
if(hp <= 0) {
System.out.println(name + " 사망!");
}
System.out.println(name + "이(가) " + actualDamage + " 피해를 입음! 남은 체력: " + hp);
}