package CHAPTER05;

class GameCharacter {

	// 1. 접근 제어자 적용 (캡슐화)
	private String name;
	private int level;
	private int health;
	protected String type;

	// 2. 생성자 오버로딩
	public GameCharacter() {
		this("Unknown", 1, 100, "기본형");
	}

	public GameCharacter(String name) {
		this(name, 1, 100, "기본형");
	}

	public GameCharacter(String name, int level) {
		this(name, level, 100, "기본형");
	}

	public GameCharacter(String name, int level, int health, String type) {
		this.name = name;
		this.level = level;
		this.health = health;
		this.type = type;
	}

	// 3. 캡슐화 (Getter & Setter)
	public String getName() {
		return name;
	}

	public int getLevel() {
		return level;
	}

	public int getHealth() {
		return health;
	}

	public String getType() {
		return type;
	}

	public void setHealth(int health) {
		if (health >= 0) {
			this.health = health;
		} else {
			System.out.println("체력은 0 이상이어야 합니다.");
		}
	}

	// 캐릭터 정보 출력
	public void displayInfo() {
		System.out.println("이름: " + name + ", 레벨: " + level + ", 체력: " + health + ", 유형: " + type);
	}
}

//메인 클래스 (실행)
public class LAB02_GameCharacter {
	public static void main(String[] args) {
		// 1. 생성자 오버로딩을 활용한 캐릭터 생성
		GameCharacter character1 = new GameCharacter();
		GameCharacter character2 = new GameCharacter("엘프");
		GameCharacter character3 = new GameCharacter("드래곤", 50, 1000, "보스");

		// 2. 캐릭터 정보 출력
		character1.displayInfo();
		character2.displayInfo();
		character3.displayInfo();

		// 3. 캡슐화 적용된 필드 수정 (Setter 사용)
		System.out.println("\n드래곤의 체력을 800으로 변경...");
		character3.setHealth(800);
		character3.displayInfo();
	}
}