Character 클래스
package f_game;
public class Character {
String name; //이름
int maxHp; //최대체력
int maxMp; //최대마나
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
int level; //레벨
int exp; //경험치
Item[] items; //보유아이템을 저장할 배열
Character(String name, int hp, int mp, int att, int def){ //생성자 만들어서 변수 초기화
this.name = name;
this.maxHp = hp;
this.maxMp = mp;
this.hp = this.maxHp;
this.mp = this.maxMp;
this.att = att;
this.def = def;
this.level = 1;
this.exp = 0;
this.items = new Item[10];
}
//상태를 보여주는 메서드
void showInfo(){
System.out.println("================================");
System.out.println("------------- 상태 ---------------");
System.out.println("이름 : "+ name);
System.out.println("레벨 : "+ level + "("+ exp + "/100)");
System.out.println("체력 : "+ hp + "/" + maxHp);
System.out.println("마나 : "+ mp + "/" + maxMp);
System.out.println("공격 : "+ att);
System.out.println("방어 : "+ def);
System.out.println("------------ 아이템 --------------");
for(int i = 0; i < items.length; i++){
if(items[i] != null){
System.out.println(items[i]);
}
}
System.out.println("================================");
}
//공격메서드 -파라미터로 공격 대상을 받아야 함
void attack(Monster m){
int damage = att - m.def;
damage = damage <= 0 ? 1 : damage;
m.hp = m.hp < damage ? m.hp - m.hp : m.hp - damage;
System.out.println(name + "이 공격적으로 " + m.name + "에게 "
+ damage + "만큼 데미지를 주었습니다.");
System.out.println(m.name + "의 현재 HP : "+ m.hp);
}
//경험치를 얻는 메서드
void getExp(int exp){
System.out.println(exp + "의 경험치를 획득하였습니다.");
this.exp += exp;
while(100<=this.exp){
levelUp();
this.exp -= 100;
}
}
//일정 경험치를 얻으면 레벨업, 능력치 증가?/ 아이템을 얻는 메서드
void levelUp(){
level++;
maxHp += 10;
maxMp += 5;
att += 2;
def += 2;
hp = maxHp;
mp = maxMp;
System.out.println("LEVEL UP!!");
}
//아이템 가지고 있으면 능력치 증가?
void getItem(Item item){
System.out.println(item.name + "을 획득하였습니다.");
for(int i = 0; i < items.length; i++){
if(items[i]==null){
items[i] = item;
break;
}
}
maxHp += item.hp;
maxMp += item.mp;
att += item.att;
def += item.def;
}
}
Item 클래스
package f_game;
public class Item {
String name; //이름
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
Item(String name, int hp, int mp, int att, int def){
this.name = name;
this.hp = hp;
this.mp = mp;
this.att = att;
this.def = def;
}
public String toString(){ //toString() 객체의 정보를 문자열로 반환해주는 메서드
String info = name + " :";
if(0 < hp) info += " 체력+"+hp;
if(0 < mp) info += " 마나+"+mp;
if(0 < att) info += " 공격+"+att;
if(0 < def) info += " 방어+"+def;
return info;
}
}
Monster 클래스
package f_game;
public class Monster {
String name; //이름
int maxHp; //최대체력
int maxMp; //최대마나
int hp; //체력
int mp; //마나
int att; //공격력
int def; //방어력
Item[] items; //보유아이템을 저장할 배열
Monster(String name, int maxHp, int matMp, int hp, int mp, int att, int def, Item[] items){
this.name = name;
this.maxHp = hp;
this.maxMp = mp;
this.hp = this.maxHp;
this.mp = this.maxMp;
this.att = att;
this.def = def;
this.items = items;
}
void attack(Character c){
int damage = att - c.def;
damage = damage <= 0 ? 1 : damage;
c.hp = c.hp < damage ? c.hp - c.hp : c.hp - damage;
System.out.println(name + "가 공격적으로" + c.name + "에게"
+ damage + "만큼 데미지를 주었습니다.");
System.out.println(c.name + "의 현재 HP :"+ c.hp);
}
Item itemDrop(){
return items[(int)(Math.random() * items.length)]; //보유한 아이템에 랜덤인덱스 생성해서 리턴
}
}
MyGame 클래스 (게임 실행)
package f_game;
import e_oop.ScanUtil;
public class MyGame {
Character c;
Item[] items;
MyGame(){
c = new Character("구암동불주먹", 100, 50, 20, 10);
items = new Item[10];
items[0] = new Item("무한의대검",0,0,10,0);
items[1] = new Item("가시갑옷",0,0,10,0);
}
public static void main(String[] args) {
new MyGame().start();
}
void start(){
int input = 0;
while(true){
System.out.println("1.내정보\t2.사냥\t0.종료");
input = ScanUtil.nextInt();
switch (input) {
case 1 :
c.showInfo();
break;
case 2 :
hunt();
break;
case 0 :
System.out.println("종료되었습니다.");
System.exit(0);
break;
}
}
}
void hunt(){
Monster m = new Monster("고블린", 20, 10, 15, 10
, 5, 5, new Item[]{items[0], items[1]});
System.out.println(m.name + "을 만났습니다. 전투를 시작합니다.");
int input = 0;
battle : while(true){
System.out.println("1.공격\t2.도망");
input = ScanUtil.nextInt();
switch (input) {
case 1 :
c.attack(m);
if(m.hp <= 0){
System.out.println(m.name + "을 처치하였습니다.");
c.getExp(150);
c.getItem(m.itemDrop());
break battle;
}
m.attack(c);
break;
case 2 :
System.out.println("도망쳤습니다.");
break battle;
}
}
}
}