이번에는 java의 상속이라는 특성을 사용해 아주아주아주 간단한 게임을 만들어 보겠습니다.


게임의 내용은 옛날의 다마고치를 생각하면 될거 같은데 캐릭터 키우기 입니다.



일단은 부모클래스부터 작성 하겠습니다.



public class Poket {
	public String race; // 종족
	public String name; // 캐릭터 이름
	public int age; // 나이
	public int power; // 파워
	public int energy; // 에너지
	int cnt;
	
	public Poket() // 생성자
	{
		System.out.println("시작");
	}
	
	public void eat() // 밥먹기
	{
		energy += 15; // 에너지 15씩 증가
		cnt++; // cnt는 1씩 증가
		aging(); // aging()매소드를 호출
	}
	
	public void sleep() // 자기
	{
		energy += 5;
		cnt++;
		aging();
	}
	
	public void exercise() // 운동
	{
		energy -= 10;
		power += 10;
	}
	
	public void aging() // 나이 먹기
	{
		if(cnt > 3) // cnt가 3보다 커지면
		{
			age++; // 나이를 먹는다
			cnt = 0;
		}
	}

	public void attack() // 공격하기
	{
		energy -= 15;
		power += 20;
	}
	
	public void print() // 현재 상태출력 하기
	{
		System.out.println("나이 : " +age);
		System.out.println("파워 : " +power);
		System.out.println("에너지 : " +energy);
	}
}


이번에는 여러가지 캐릭터들의 vo를 설정 하겠습니다. (중복 구문은 제거)


 

public class Lee extends Poket { // Poket 클래스로 부터 상속한다.
	public int cnt;
	public Lee(String name)
	{
		// Poket에서 가져왔기 때문에 따로 형태를 지정해주지 않아도된다.
		this.name = name; // 이름으로 초기화
		race = "Leesanghae";  // 종족은 이상해로 초기화
		age = 0; // 나이는 0으로 초기화
		power = 150; // 파워는 150으로 초기화
		energy = 200; // 에너지는 200으로 초기화
		cnt = 0; // cnt는 0
		System.out.println("이상해씨가 만들어졌습니다.");
	}

	public void eat() // 밥먹기
	{
		energy += 15; // 에너지 15씩 증가
		cnt++; // cnt는 1씩 증가
		aging(); // aging()매소드를 호출
	}
	
	public void sleep() // 자기
	{
		energy += 5;
		cnt++;
		aging();
	}
	
	public void exercise() // 운동
	{
		energy -= 10;
		power += 10;
	}
	
	public void aging() // 나이먹기
	{
		if(cnt > 3)
		{
			age++;
			cnt = 0;
		}
	}

	public void attack() // 공격
	{
		energy -= 15;
		power += 20;
	}
	
	public void print() // 마찬가지로 상태출력
	{
		System.out.println("나이 : " +age);
		System.out.println("파워 : " +power);
		System.out.println("에너지 : " +energy);
	}	
}



public class Gobook extends Poket {
	public int cnt;
	public Gobook (String name)
	{
		this.name = name;
		race = "Gobook";
		age = 0;
		power = 50;
		energy = 150;
		cnt = 0;
		System.out.println("꼬북이가 만들어졌습니다.");
	}
}


public class Picachu extends Poket {
	public int cnt;
	public Picachu(String name)
	{
		this.name = name;
		race = "Picachu";
		age = 0;
		power = 100;
		energy = 300;
		cnt = 0;
		System.out.println("피카츄가 만들어졌습니다.");
	}
}


마지막으로 이 클래스들을 구현할 Main함수를 생성합니다.

 

public class ExcMain {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); // 너무나도 익숙한 Scanner
		Poket p = null; // Poket 객체 선언 및 null값으로 초기화
		System.out.println("포켓몬을 선택하시오.");
		System.out.println("1. 피카츄\n2. 이상해씨\n3. 꼬부기");
				int x = sc.nextInt(); // 종족값을 입력받음
				System.out.println("이름을 입력하시오.");
				String name = sc.next(); // 이름을 입력받음
				
				if(x==1)
					p = new Picachu(name);
				else if(x==2)
					p = new Lee(name);
				else if(x==3)
					p = new Gobook(name);
				boolean flag = true;
				
				while(flag)
				{
					System.out.println("메뉴");
					System.out.println("1. 밥\n2. 잠\n3. 운동\n4. 공격\n5. 끝");
					x = sc.nextInt();
					switch(x)
					{
					case 1:
						o.eat();
						o.print();
						break;
						
					case 2:
						o.sleep();
						o.print();
						break;
						
					case 3:
						o.exercise();
						o.print();
						if(o.energy <= 0)
						{
							System.out.println("게임 종료");
							flag = false;
						}
						break;
						
					case 4:
						o.attack();
						o.print();
						if(o.energy <= 0)
						{
							System.out.println("게임 종료");
							flag = false;
						}
						break;
						
					case 5:
					flag = false;
					}
				}
	}
}


맨위에 작성된 Poket을 부모클래스로 가지고, 나머지 캐릭터들이 오버라이딩 해서 사용할 수 있다는 것을 가지고 만들었습니다.


'JAVA > java' 카테고리의 다른 글

Override 오버라이드  (0) 2017.09.07
객체지향(2)  (0) 2017.09.06
객체지향(1)  (0) 2017.09.06
Method  (0) 2017.09.05
Array(2) array & for & for-each  (0) 2017.09.05