초급JAVA 10 - RPG 게임만들기

voilà!·2021년 11월 7일
1

초급JAVA

목록 보기
20/24

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;
				
			}
		}
	}
}

0개의 댓글

관련 채용 정보