캐틱터
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;//hp를 최대 체력에 넣어주면
this.maxMp = mp;
this.hp = this.maxHp; // 최대 체력이 초기의 체력이 됨
this.mp = this.maxMp;
this.att = att;
this.def = def;
this.level = 1; //1레벨부터 시작
this.exp = 0;//경험치 0부터 시작
this.items = new Item[10];//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 = this.att - m.def;//캐릭터의 공격력에서 몬스터의 방어력이 빠진게 데미지
damage = damage <= 0 ? 1: damage;//데미지가 0보다 작거나 같으면 1 아니면 데미지
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);
/*if(this.att > m.def){
damage = this.att - m.def;
}else if(this.att < m.def){
--this.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){ //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;
}
}
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 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){//Character타입에 지역 변수 c을 파라미터로 - 케릭터가 몬스터를 공격
int damage = this.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)];
//아이템 배령레 어떤 인덱스를 발생시킬건데 그것을 랜덤으로
}
}
아이템
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;
}
//toString()은 객체의 정보를 문자열로 반환해주는 메서드
public String 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;
}
}
출력
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]; //10칸 배열 생성 = 아이템은 10종류 중에 지금은 2개를 만든것
items[0] = new Item("무한의대검", 0, 0, 10, 0);
items[1] = new Item("가시갑옷", 0, 0, 0, 10);
}
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,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; // whlie문 빠져나가기
}
m.attack(c);
break;
case 2: //도망
System.out.println("도망쳤습니다.");
break battle;
}
}
}
}