2020.09.17 기초 자바 프로그래밍 RPG 게임 선생님 코드

 ------------------------ MyGame 클래스 

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

items[1] = new Item("가시갑옷" , 0 , 0, 0, 10); 

}

public static void main(String[] args) {

// TODO Auto-generated method stub


//class 만든 3개로 여기서 만들어야 한다. 

new MyGame(). start(); 

}

void start(){

             int input = 0 ; 

             while(true) { 

            System.out.println("1.내정보 \t2.사냥 \t3.종료"); 

            input = ScanUtil.nextInt();

             

            switch(input){ 

            case 1 : 

            c.showInfo(); 

            break; 

            case 2 : 

            hunt (); 

            break ; 

            case 3 :

            System.out.println(" 종료되었습니다. "); 

            System.exit(0);   //프로그램을 종료시키는 메소드 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) {  //battle 은 while 문에 붙인 이름 반복문에 이름을 붙일 수 있다. 

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.itemDrp());

break battle ; //몬스터가 죽으면 전투를 종료하는것 . 

}

m.attack(c);

break; 

case 2 : 

break battle; 

}

}

}

}



-----------------------------------------------------------------------------------------------------


Character 클래스 



package t_game;


public class Character {


//이름이 존재 

String name ;

int maxHp; //최대체력

int hp; // 체력

int maxMp; // 최대마나

int mp ; //마나 

int att; // 공격력 

int def; //방어력 

int exp; // 경험치 

int level ; // 레벨 

Item[] items; //보유 아이템  

//지금은 컴파일에러가 나지만 Item이라는 클래스를 만들면 사라질 것이다. 

//변수를 초기화해야하는데 생성자를 통해 초기화를 해줄거야.

//생성자는 클래스이름과 동일한 

Character(String name, int hp , int mp, int att, int def){ 

this.name = name ; 

this.maxHp = hp; 

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)");  //100이 넘어가면 레벨업을 해주는걸 표현

System.out.println("체력 : " + maxHp); 

System.out.println("마나 : " + 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].itemInfo());

}

}

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

//m.은 몬스터 

}

//경험치 획득 

void getExp( int exp ){ 

System.out.println(exp + "의 경험치를 획득하셨습니다."); 

this.exp += exp ; 

while ( 100 <= this.exp ){

       levelUp(); 

      this.exp -= 100 ; 

//레벨업을 할때 마다 100씩 감소 ( 100이상이되면 1씩 레벨업 ) 

}

}

void levelUp (){ 

level++; 

maxHp += 10 ; 

maxMp += 5; 

att += 2;

def +=2; 

        hp = maxHp ; // 게임에서 레벨업이 되면 체력을 100프로로 체워주고 시작하는것.  

        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; 

 

 

 

}

}

--------------------------------------------------------------------------------------------------

Monster class

package t_game;


public class Monster {


String name ;

int maxHp; //최대체력

int hp; // 체력

int maxMp; // 최대마나

int mp ; //마나 

int att; // 공격력 

int def; //방어력 

int exp; // 경험치 

int level ; // 레벨 

Item[] items; //보유 아이템  

//생성자 만들기 - 여러종류의 몬스터가 하나의 클래스를 사용, 이름이 달라지고 능력치 속성이 달라짐 -> 한번에 하려고 생성자 

Monster(String name, int hp , int mp , int att, int def, Item[] items){ 

this.name = name ; 

this.maxHp = hp ; 

this.hp = this.maxHp ; 

this.mp = this.maxMp ; 

this.att = att; 

this.def = def ; 

this.items = items; 

}


void attack (Character 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); 

//m.은 몬스터 

}

Item itemDrp (){ 

     return items[(int)(Math.random() * items.length)]; 

// 가지고있는 아이템중에 무작위로 하나를 떨어트려줌 .  

}

}

-------------------------------------------------------------------------------------------------

Item 클래스 

package t_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;

}

String itemInfo(){ 

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; 

}

}



--------------------------------------------------------------------------------------------------



댓글