다음과 같은 조건을 만족하는 프로그램을 작성하시오
영웅 게임 프로그램이다.
해당 구현 클래스 다이어그램과 클래스 구조를 참고하여 프로젝트를 완성하시오.
[vo]
package edu.kh.oop.practice.model.vo;
public class Hero {
// 속성
// 필드 == 멤버 변수
private String nickName; // 닉네임
private String job; // 직업
private int hp; // 체력
private int mp; // 마력
private int level; // 레벨
private double exp; // 경험치
// 기본생성자
public Hero() {}
// 매개변수생성자
public Hero(String nickName, String job, int hp, int mp, int level, double exp) {
this.nickName = nickName;
this.job = job;
this.hp = hp;
this.mp = mp;
this.level = level;
this.exp = exp;
System.out.printf(
"=============캐릭터 생성=============\n"
+ "%s 직업으로 '%s' 님이 생성되었습니다.\n"
+ "현재 레벨 : %d\n"
+ "현재 hp : %d\n"
+ "현재 mp : %d\n"
+ "현재 경험치 : %.1f\n",
job, nickName, level, hp, mp, exp );
}
// 기능
// getter/setter
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public double getExp() {
return exp;
}
public void setExp(double exp) {
this.exp = exp;
}
/*
* 전달받은 경험치를 현재 경험치에 누적하고,
* 공격했다는 메세지 출력.
* (단, 현재 경험치가 300 이상이면
* 현재 레벨을 1 증가시키고,
* 레벨이 올랐다는 메세지 출력)
* */
public void attack(double exp) {
this.exp += exp;
System.out.printf("'%s' 은/는 공격을 했다!!! 현재 경험치 : %.1f\n",
nickName, this.exp );
if(this.exp >= 300) {
level += 1;
System.out.println("레벨이 올랐습니다!! 현재레벨 : " + level);
}
}
/*
* 대시 할 때 마다 현재 mp에서 -10씩 감소되며
* 대시했다는 메세지 출력.
* (단, 현재 mp가 0 이하라면
* 마력이 부족하여 대시할 수 없다는 메세지 출력)
* */
public void dash() {
if(mp <= 0) {
System.out.println("[마력 부족]더 이상 대시 할 수 없어요~!");
} else {
mp -= 10; // mp = mp - 10;
System.out.printf("'%s'의 엄청 빠른 대시!!! 남은 마력 : %d\n",
nickName, mp );
}
}
/*
* 호출 시 해당 메서드를 호출한 객체의 현재 정보를 출력
* */
@Override
public String toString() {
return "========'%s'님의 정보========\n"
+ "- 현재 레벨 : %d\n"
+ "- 현재 hp : %d\n"
+ "- 현재 mp : %d\n"
+ "- 현재 exp : %.1f\n";
}
}
[service]
package edu.kh.oop.practice.model.service;
import edu.kh.oop.practice.model.vo.Hero;
public class HeroService {
public void practice() {
Hero warrior = new Hero("이구역짱", "전사", 200, 20, 1, 0);
Hero wizard = new Hero("Zi존위자드", "마법사", 100, 100, 1, 0);
System.out.printf("============%s 시점============\n", warrior.getNickName());
warrior.attack(100);
warrior.attack(50.5);
warrior.attack(49.5);
warrior.dash();
warrior.dash();
warrior.dash();
System.out.printf(warrior.toString(),
warrior.getNickName(),
warrior.getLevel(),
warrior.getHp(),
warrior.getMp(),
warrior.getExp() );
System.out.printf("============%s 시점============\n", wizard.getNickName());
wizard.attack(300);
wizard.dash();
wizard.attack(300);
wizard.attack(300);
System.out.printf(wizard.toString(),
wizard.getNickName(),
wizard.getLevel(),
wizard.getHp(),
wizard.getMp(),
wizard.getExp() );
}
}
[run]
package edu.kh.oop.practice.run;
import edu.kh.oop.practice.model.service.BookService;
import edu.kh.oop.practice.model.service.HeroService;
public class PracticeRun {
public static void main(String[] args) {
// BookService bs = new BookService();
// bs.practice();
// 클래스 안에 생성자가 하나도 없다면
// 컴파일러가 기본생성자는 자동으로 만들어줌
// -> 그래서 우리가 BookService() 이렇게 사용 가능한거다!
// -> 생성자가 하나라도 있으면 기본생성자 자동으로 생성 X
// -> 매개변수생성자 만들었다면, 기본생성자 개발자가 만들어야함
HeroService hs = new HeroService();
hs.practice();
}
}

