diff --git a/game/src/main/java/com/survivalcoding/Diagram.puml b/game/src/main/java/com/survivalcoding/Diagram.puml new file mode 100644 index 0000000..21ef59b --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Diagram.puml @@ -0,0 +1,74 @@ +@startuml + +class Hero { + - String name + - int hp + - int maxHp + + getName() : String + + setName(String) : void + + getHp() : int + + setHp(int) : void + + getMaxHp() : int + + setMaxHp(int) : void +} + +class Cleric { + + int mp + + heal(Hero) : void +} + +class Wizard { + - int hp + - int mp + - String name + - Wand wand + + getHp() : int + + setHp(int) : void + + getMp() : int + + setMp(int) : void + + getName() : String + + setName(String) : void + + getWand() : Wand + + setWand(Wand) : void + + heal(Hero) : void +} + +class GreatWizard { + + heal(Hero) : void + + superHeal(Hero) : void +} + +class Wand { + - String name + - double power + + getName() : String + + setName(String) : void + + getPower() : double + + setPower(double) : void +} + +class Slime { + + String suffix + + int hp + + attack(Hero) : void +} + +class PoisonSlime { + - int poisonCount + + attack(Hero) : void +} + +' 상속 관계 +Hero <|-- Cleric +Wizard <|-- GreatWizard +Slime <|-- PoisonSlime + +' 연관 관계 +Wizard --> Wand : has +PoisonSlime ..> Hero : attacks +Slime ..> Hero : attacks +Cleric ..> Hero : heals +Wizard ..> Hero : heals +GreatWizard ..> Hero : superHeals + +@enduml \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/GreatWizard.java b/game/src/main/java/com/survivalcoding/GreatWizard.java new file mode 100644 index 0000000..80e2021 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/GreatWizard.java @@ -0,0 +1,29 @@ +package com.survivalcoding; + +public class GreatWizard extends Wizard { + + public GreatWizard() { + setMp(150); + } + + @Override + void heal(Hero hero) { + if (getMp() < 5) { + System.out.println("Not enough MP"); + return; + } + hero.setHp(hero.getHp() + 25); + setMp(getMp() - 5); + System.out.println("Cast heal. Character HP: " + hero.getHp()); + } + + void superHeal(Hero hero) { + if (getMp() < 50) { + System.out.println("Not enough MP"); + return; + } + hero.setHp(hero.getMaxHp()); // hp를 최대로 + setMp(getMp() - 50); + System.out.println("Cast super heal. Character HP: " + hero.getHp()); + } +} \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/Hero.java b/game/src/main/java/com/survivalcoding/Hero.java index c83593b..9dd5022 100644 --- a/game/src/main/java/com/survivalcoding/Hero.java +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -3,6 +3,7 @@ public class Hero { private String name; private int hp; + private int maxHp = 100; public String getName() { return name; @@ -19,4 +20,12 @@ public int getHp() { public void setHp(int hp) { this.hp = hp; } -} + + public int getMaxHp() { + return maxHp; + } + + public void setMaxHp(int maxHp) { + this.maxHp = maxHp; + } +} \ No newline at end of file diff --git a/game/src/main/java/com/survivalcoding/PoisonSlime.java b/game/src/main/java/com/survivalcoding/PoisonSlime.java new file mode 100644 index 0000000..6f064d8 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/PoisonSlime.java @@ -0,0 +1,25 @@ +package com.survivalcoding; + +public class PoisonSlime extends Slime { + private int poisonCount = 5; + + public PoisonSlime(String suffix) { + super(suffix); + this.suffix = suffix; + } + + @Override + void attack(Hero hero) { + super.attack(hero); + + if (poisonCount != 0) { + System.out.println("Poison attack!"); + + int poisonDamage = hero.getHp() / 5; + hero.setHp(hero.getHp() - poisonDamage); + System.out.println(poisonDamage + "point damage"); + + poisonCount--; + } + } +} diff --git a/game/src/main/java/com/survivalcoding/Question0102.java b/game/src/main/java/com/survivalcoding/Question0102.java new file mode 100644 index 0000000..fd43f1a --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Question0102.java @@ -0,0 +1,15 @@ +package com.survivalcoding; + +// 01 +// 1. student is person (o) +// 2. Engine is car (x) +// 3. Child is father (x) +// 4. Sushi is Food (o) +// 5. Man is SuperMan (x) + + +// 02 +// 1. i_phone17 --|> Phone --|> Device +// 2. Avante --|> Car --|> Vehicle +// 3. En/Kr Dictionary --|> Dictionary --|> Book + diff --git a/game/src/main/java/com/survivalcoding/Slime.java b/game/src/main/java/com/survivalcoding/Slime.java new file mode 100644 index 0000000..8b5ce0e --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Slime.java @@ -0,0 +1,19 @@ +package com.survivalcoding; + +public class Slime { + String suffix; + int hp; + + public Slime(String suffix) { + this.suffix = suffix; + } + + + void attack(Hero hero) { + System.out.println("Slime " + suffix + "attacked"); + System.out.println("10 point damage"); + + hero.setHp(hero.getHp() - 10); + } +} + diff --git a/game/src/main/java/com/survivalcoding/Wizard.java b/game/src/main/java/com/survivalcoding/Wizard.java index 96716ee..83b6e15 100644 --- a/game/src/main/java/com/survivalcoding/Wizard.java +++ b/game/src/main/java/com/survivalcoding/Wizard.java @@ -2,7 +2,7 @@ public class Wizard { private int hp; - private int mp; + private int mp = 100; // 초기값 100 추가 private String name; private Wand wand; @@ -51,9 +51,12 @@ public void setWand(Wand wand) { } void heal(Hero hero) { - int basePoint = 10; - int recovPoint = (int) (basePoint * this.wand.getPower()); - hero.setHp(hero.getHp() + recovPoint); + if (mp < 10) { + System.out.println("Not enough MP"); + return; + } + hero.setHp(hero.getHp() + 20); + mp -= 10; + System.out.println("Cast heal. Character HP: " + hero.getHp()); } - -} +} \ No newline at end of file diff --git a/game/src/test/java/com/survivalcoding/WizardTest.java b/game/src/test/java/com/survivalcoding/WizardTest.java index 8d59ab1..77d1d7d 100644 --- a/game/src/test/java/com/survivalcoding/WizardTest.java +++ b/game/src/test/java/com/survivalcoding/WizardTest.java @@ -76,4 +76,19 @@ void setWand_normal() { assertEquals(wand, wizard.getWand()); } + + @Test + @DisplayName("heal prints mana insufficient message when mp is under 10") + void heal_prints_insufficient_message_when_mp_under_10() { + + Wizard wizard = new Wizard(); + wizard.setMp(5); + Hero hero = new Hero(); + hero.setHp(50); + + wizard.heal(hero); + + assertEquals(50, hero.getHp()); // hp 변화 없음 + assertEquals(5, wizard.getMp()); // mp 변화 없음 + } } \ No newline at end of file