diff --git a/game/src/main/Exercise.md b/game/src/main/Exercise.md new file mode 100644 index 0000000..896ea8b --- /dev/null +++ b/game/src/main/Exercise.md @@ -0,0 +1,22 @@ +11장 상속 연습문제 + +#문제 1 + +**정답** : 2,3,5 + +2번 : 엔진은 자동차의 부품이지만 자동차는 아니다 + +3번 : 자식은 아버지가 아니다 + +5번 : 서로의 개념이 바뀌었음 + +#문제 2 + +**정답** : + +(1) : 부모클래스 - Electronic devices / 자식클래스 - iphone + +(2) : 부모클래스 - Transportation / 자식클래스 - bmw + +(3) : 부모클래스 - BOOK / 자식클래스 - EnglishDictionary + 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..6a831a3 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/GreatWizard.java @@ -0,0 +1,24 @@ +package com.survivalcoding; + +public class GreatWizard extends Wizard { + + public GreatWizard() { + this.mp = 150; + this.heal = 25; + this.mpCost = 5; + } + + public void heal(Hero hero) { + super.heal(hero); + } + + public void superHeal(Hero hero) { + if (this.mp >= 50) { + hero.setHp(Hero.MAX_HP); + this.mp -= 50; + System.out.println("슈퍼 힐을 시전했습니다. " + hero.name + "HP : " + hero.getHp()); + } else { + System.out.println("마나가 부족합니다"); + } + } +} diff --git a/game/src/main/java/com/survivalcoding/Hero.java b/game/src/main/java/com/survivalcoding/Hero.java index ce52b3a..bfeb152 100644 --- a/game/src/main/java/com/survivalcoding/Hero.java +++ b/game/src/main/java/com/survivalcoding/Hero.java @@ -1,8 +1,42 @@ package com.survivalcoding; +import java.util.Random; + public class Hero { + static final int MAX_HP = 100; + static int money = 100; + String name; int hp; + Sword sword; + + Hero() { + this.name = "임용사"; + this.hp = 100; + } + + Hero(String name) { + this.name = name; + this.hp = 99; + } + + public Hero(String name, int hp) { + this.name = name; + this.hp = hp; + } + + public int getHp() { + return this.hp; + } + + public void setHp(int hp) { + this.hp = Math.min(hp, MAX_HP); + } + + static void setRandomMoney() { + money = new Random().nextInt(1000); + System.out.println("초기금 : " + money); + } // 나는 공격하면 hp 가 1씩 빠진다 void attack() { @@ -10,4 +44,29 @@ void attack() { // sout System.out.println("공격했다"); } + + void run() { + System.out.println(this.name + "는 도망쳤다!"); + System.out.println("GAME OVER"); + System.out.println("최종 HP는" + this.hp + "입니다"); + } + + void sit(int sec) { + //앉은 초 수만큼 hp 증가 + this.hp += sec; + + System.out.println(this.name + "는" + sec + "초 앉았다"); + System.out.println("HP가" + sec + "포인트 회복되었다"); + } + + void slip() { + this.hp -= 5; + System.out.println(this.name + "는 넘어졌다!"); + System.out.println("5의 데미지!"); + } + + void sleep() { + this.hp = 100; + System.out.println(this.name + "는 잠을 자고 회복했다!"); + } } diff --git a/game/src/main/java/com/survivalcoding/Main.java b/game/src/main/java/com/survivalcoding/Main.java index 03dc735..bebd0be 100644 --- a/game/src/main/java/com/survivalcoding/Main.java +++ b/game/src/main/java/com/survivalcoding/Main.java @@ -4,16 +4,72 @@ // click the icon in the gutter. public class Main { public static void main(String[] args) { - // 인스턴스 생성 - Hero hero = new Hero(); - hero.hp = 10; - hero.attack(); // 9 - hero.attack(); // 8 + //용사 이름, hp를 설정 + Hero hero = new Hero("김용사"); + Hero hero2 = new Hero(); - System.out.println(hero.hp); // 8 + SuperHero superHero = new SuperHero("홍길동", 100); + superHero.run(); - int a = 10; - long l = 10L; // literal 리터럴 + PoisonSlime poisonSlime = new PoisonSlime("독"); + poisonSlime.setHp(100); + poisonSlime.attack(superHero); + +// Wizard wizard = new Wizard(); +// wizard.heal(hero); + + GreatWizard grateWizard = new GreatWizard(); + grateWizard.heal(superHero); + grateWizard.superHeal(superHero); + + + //hero.name = "김용사"; + //hero.hp = 100; +// System.out.println("용사" + hero.name + "를 생성했습니다!"); +// System.out.println("용사의 체력은" + hero.hp + "입니다!"); +// System.out.println("용사의 재력은" + Hero.money + "입니다!"); +// Hero.money = 200; +// System.out.println("용사의 재력은" + Hero.money + "입니다!"); +// +// System.out.println("용사" + hero2.name + "를 생성했습니다!"); +// System.out.println("용사의 체력은" + hero2.hp + "입니다!"); +// Hero.setRandomMoney(); +// System.out.println("용사의 재력은" + Hero.money + "입니다!"); +// +// Wizard wizard = new Wizard(); +// wizard.name = "김법사"; +// wizard.hp = 50; + +// wizard.heal(hero); + + //검 이름, 데미지 설정 +// Sword sword = new Sword(); +// sword.name = "불의 검"; +// sword.damage = 10; +// System.out.println("현재 무기는" + sword.name + "입니다!"); +// +// Kinoko kinoko1 = new Kinoko(); +// kinoko1.hp = 50; +// kinoko1.suffix = 'A'; +// +// Kinoko kinoko2 = new Kinoko(); +// kinoko2.hp = 51; +// kinoko2.suffix = 'B'; + + //용사에게 5초 앉기 , 넘어지기 , 25초앉기 , 도망을 지시 +// hero.sit(5); +// hero.slip(); +// hero.sit(25); +// hero.run(); + + //용사 공격 +// hero.attack(); // 9 +// hero.attack(); // 8 + +// System.out.println(hero.hp); // 8 + +// int a = 10; +// long l = 10L; // literal 리터럴 } } \ 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..fb560df --- /dev/null +++ b/game/src/main/java/com/survivalcoding/PoisonSlime.java @@ -0,0 +1,24 @@ +package com.survivalcoding; + +public class PoisonSlime extends Slime { + + private int poisonCount = 5; //독 공격 가능 횟수 + + public PoisonSlime(String suffix) { + super(suffix); + } + + @Override + public void attack(Hero hero) { + super.attack(hero); + + if (poisonCount != 0) { + System.out.println("추가로, 독 포자를 살포했다!"); + int poisonDamage = hero.getHp() / 5; //독데미지 + hero.setHp(hero.getHp() - poisonDamage); + System.out.println(poisonDamage + "포인트 데미지"); + this.poisonCount--; //독 공격 가능 횟수 차감 + } + } + +} 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..efd8938 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Slime.java @@ -0,0 +1,28 @@ +package com.survivalcoding; + +public class Slime { + final String suffix; + int hp; + + public Slime(String suffix) { + this.suffix = suffix; + } + + public String getSuffix() { + return this.suffix; + } + + public int getHp() { + return this.hp; + } + + public void setHp(int hp) { + this.hp = hp; + } + + void attack(Hero hero) { + System.out.println("슬라임 " + suffix + "이/가 공격했다"); + System.out.println("10의 데미지"); + 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 new file mode 100644 index 0000000..075c355 --- /dev/null +++ b/game/src/main/java/com/survivalcoding/Wizard.java @@ -0,0 +1,21 @@ +package com.survivalcoding; + +public class Wizard { + String name; + int hp; + //protected : 자식클래스 사용 가능하도록 만듬 + protected int heal = 20; + protected int mp = 100; + protected int mpCost = 10; + + public void heal(Hero hero) { + System.out.println("현재 체력 : " + hero.getHp()); + if (this.mp >= 10) { + hero.setHp(hero.getHp() + heal); + this.mp -= mpCost; + System.out.println("힐을 시전했습니다. " + hero.name + "HP : " + hero.getHp()); + } else { + System.out.println("마나가 부족합니다"); + } + } +}