기초JAVA 14강 - 게임만들기

Whatever·2021년 9월 28일
0

기초 JAVA

목록 보기
14/26

저번 주 과제 : 에어컨 만들기

class SemAirCon{

boolean power;
int temperature = 24;
int windPower = 2;

void power(){

// if(power == true){
// power = false;
// }else if(power == false){
// power = true;
// }

        power = !power;
		System.out.println(power ? "에어컨이 켜졌습니다." : "에어컨이 꺼졌습니다.");
}

void temperatureUp(){
	if(power){
		if(temperature < 30){
			temperature++;
		}
		System.out.println("현재 온도는 " + temperature + "도 입니다.");	
	}
	
}

void temperatureDown(){
	if(power){
		if(temperature > 18){
			temperature--;
		}
		System.out.println("현재 온도는 " + temperature + "도 입니다.");	
	}
	
}

void changeWindPower(){//바람세기 3단계, 3이 넘어가면 다시 1로 만들기
	if(power){
		if(++windPower >3){
			windPower = 1;
		}
		System.out.println("현재 바람세기는 " + windPower + "단 입니다."); 
	}
	
}

public static void main(String[] args) {//main메서드는 main치고 Ctrl + Space
	SemAirCon ac = new SemAirCon();
	
	while(true){
		System.out.println("1.전원\t2.온도+\t3.온도-\t4.바람세기\t0.종료");
		int input = ScanUtil.nextInt();
		switch(input){
		case 1: ac.power(); break;
		case 2: ac.temperatureUp(); break;
		case 3: ac.temperatureDown(); break;
		case 4: ac.changeWindPower(); break;
		case 0: 
			System.out.println("프로그램을 종료합니다.");
			System.exit(0); // 프로그램을 강제로 종료하는 메서드
		}
	}

}

RPG 게임 만들기

캐릭터 클래스 생성

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]; //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 = 0;
	if(att > m.def){
		damage = att - m.def;
	}else if(att == m.def){
		damage = 1;
	}
	m.hp -= damage;
	System.out.println(damage);
	
	//선생님 코드
	/*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.pringln(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!!");

// int value = 0;
// level = exp >= 100 + value ? level++ : level;
// value += 5;
}

//아이템을 얻는 메서드
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;
}

}

몬스터 클래스

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){
	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)];
}
}

아이템 클래스

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(){
	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;
}

}    

실행할 클래스

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, 0, 10);
}

public static void main(String[] args) {
	new MyGame().start(); 
    //따로 start 메서드를 만든 이유 : 인스턴스 변수를 main메서드 안에서 사용 불가
}

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;
}
m.attack(c);
break;

		case 2:
			System.out.println("도망쳤습니다.");
			break battle;					
		}
	}
}

0개의 댓글

관련 채용 정보