본문 바로가기

개발자노트

클래스) 상속.. 포켓몬 예제 + 기능 모듈화

package class01;

import java.util.Random;
import java.util.Scanner;

class Pokemon {
	String name;
	int level;
	int exp;

	void action() {
		System.out.println(this.name + "이(가) ㅁㅁ공격!");
		if (this.check()) {
			this.success();
		} else {
			this.fail();
		}
	}

	boolean check() {
		Random rand = new Random();
		int num = rand.nextInt(5); // 성공 80% 실패 20%
		if (num == 0) {
			return false;
		}
		return true;
	}

	void success() {
		Random rand = new Random();
		int exp = rand.nextInt(201) + 10; // 10~210
		this.exp += exp;
		while (this.exp >= 100) {
			this.exp -= 100;
			this.level++;
			System.out.println(this.name + ", 레벨업!");
		}
		System.out.println(this.name + " 공격성공! 획득경험치: " + exp);
	}

	void fail() {
		System.out.println(this.name + " 공격실패...");
		if (this.level == 1) {
			System.out.println("레벨은 1미만이 불가능합니다.");
			return;
		}
		this.level--;
	}

	Pokemon(String name) {
		this.name = name;
		Random rand = new Random();
		this.level = rand.nextInt(5) + 5;
		this.exp = 0;
	}

	@Override
	public String toString() {
		String msg = this.name + " ";
		msg += "Lv." + this.level + " ";
		msg += "[" + this.exp + "/100]";
		return msg;
	}

	@Override
	public boolean equals(Object obj) {
		if (this.name.equals(obj)) { // 인자로 받은 name 문자열이 내 이름과 같니??
										// main()에서는 실제로는 문자열(String)을 보낸 상태
										// 받을 때는 Object로 받았기 때문에, 현재 상자가 Object
			return true;
		}
		return false;
	}
}

class Pikachu extends Pokemon {
	@Override
	void action() {
		System.out.println(this.name + "이(가) 백만볼트공격!");
		if (this.check()) {
			this.success();
		} else {
			this.fail();
		}
	}

	Pikachu() {
		super("피카츄");
	}
}

class Charmander extends Pokemon {
	@Override
	void action() {
		System.out.println(this.name + "이(가) 불꽃공격!");
		if (this.check()) {
			this.success();
		} else {
			this.fail();
		}
	}

	Charmander() {
		super("파이리");
	}
}

public class Test00 {
	public static void main(String[] args) {

		Pokemon[] data = new Pokemon[3];
		data[0] = new Pikachu();
		data[1] = new Pikachu();
		data[2] = new Charmander();

		// for (int i = 0; i < data.length; i++) {
		// data[i].action();
		// }

		// for (int i = 0; i < data.length; i++) {
		// System.out.println(data[i]);
		// }

		Scanner sc = new Scanner(System.in);
		System.out.println("입력: ");
		String name = sc.next();

		int cnt=0;
		for (int i = 0; i < data.length; i++) { // 배열의 처음~끝까지 하나하나 확인할예정
			if (data[i].equals(name)) { // name이랑 data[i]에 있는 객체(포켓몬)의 잉름이 같니??
				cnt++;
			}
		}

		System.out.print(name + "는(은)");
		if (cnt > 0) {
			System.out.println(cnt + "마리 존재합니다.");
		} else {
			System.out.println("없습니다...");
		}
	}
}