몬스터 죽이기

조수경·2021년 9월 28일
0

JAVA

목록 보기
14/26

캐틱터

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; 
			}
		}
	}
	
}
profile
신입 개발자 입니다!!!

0개의 댓글