3.1 주요 클래스 개요
Pixel Dungeon의 코드 구조는 다음과 같은 주요 클래스들로 구성됩니다:
핵심 시스템 클래스
- Game: 게임의 기본 클래스로, 게임 루프와 입력 처리를 담당합니다.
- PixelDungeon:
Game
의 하위 클래스로, 메인 액티비티 역할을 합니다.
- Dungeon: 게임의 전역 상태와 메서드를 관리하는 클래스입니다.
- Actor: 턴 기반 시스템의 기본 클래스로, 모든 게임 엔티티의 조상 클래스입니다.
- Scene: 게임의 각 화면(메인 메뉴, 게임 플레이, 랭킹 등)을 관리합니다.
- GameScene: 실제 게임 플레이 화면을 관리하는 클래스입니다.
캐릭터 관련 클래스
- Char: 모든 캐릭터(플레이어, 몬스터)의 기본 클래스입니다.
- Hero: 플레이어 캐릭터를 나타내는 클래스입니다.
- HeroClass: 플레이어 클래스(전사, 마법사 등)를 정의합니다.
- Mob: 모든 몬스터의 기본 클래스입니다.
- Buff: 캐릭터에 적용되는 상태 효과의 기본 클래스입니다.
아이템 관련 클래스
- Item: 모든 아이템의 기본 클래스입니다.
- Weapon: 모든 무기의 기본 클래스입니다.
- Armor: 모든 방어구의 기본 클래스입니다.
- Potion: 모든 물약의 기본 클래스입니다.
- Scroll: 모든 주문서의 기본 클래스입니다.
- Ring: 모든 반지의 기본 클래스입니다.
- Wand: 모든 지팡이의 기본 클래스입니다.
- Seed: 모든 씨앗의 기본 클래스입니다.
- Belongings: 플레이어의 소지품을 관리하는 클래스입니다.
던전 관련 클래스
- Level: 던전의 각 층을 나타내는 기본 클래스입니다.
- RegularLevel: 일반적인 던전 층의 생성 로직을 포함합니다.
- Room: 던전 내의 방을 나타내는 클래스입니다.
- Painter: 방과 통로를 던전 맵에 그리는 클래스입니다.
- Terrain: 던전 타일의 유형을 정의하는 상수들을 포함합니다.
시각적 표현 클래스
- Visual: 모든 시각적 요소의 기본 클래스입니다.
- Sprite: 게임 개체의 시각적 표현을 담당합니다.
- CharSprite: 캐릭터의 스프라이트를 관리합니다.
- ItemSprite: 아이템의 스프라이트를 관리합니다.
- DungeonTilemap: 던전 타일을 렌더링합니다.
- Window: 게임 내 창을 표시하는 기본 클래스입니다.
3.3 디자인 패턴
Pixel Dungeon은 다양한 디자인 패턴을 활용하여 구조화되어 있습니다:
싱글톤 패턴(Singleton Pattern)
게임의 전역 상태와 리소스를 관리하는 여러 클래스에 적용됩니다.
- Dungeon: 게임의 전역 상태를 관리하는 싱글톤
- GameScene: 현재 활성화된 게임 화면을 관리하는 싱글톤
- Assets: 게임 리소스를 관리하는 싱글톤
팩토리 패턴(Factory Pattern)
게임 객체의 생성을 담당하는 패턴입니다.
- Generator: 무작위 아이템 생성을 담당하는 팩토리
- Bestiary: 던전 층에 적합한 몬스터를 생성하는 팩토리
상태 패턴(State Pattern)
객체의 내부 상태에 따라 행동이 변하는 패턴입니다.
- Mob.AiState: 몬스터의 AI 상태를 관리(Sleeping, Wandering, Hunting, Fleeing)
전략 패턴(Strategy Pattern)
알고리즘 군을 정의하고 각각을 캡슐화하여 교체 가능하게 만드는 패턴입니다.
- Enchantment: 무기의 특수 효과를 다양하게 적용할 수 있는 전략
- Glyph: 방어구의 특수 효과를 다양하게 적용할 수 있는 전략
옵저버 패턴(Observer Pattern)
객체의 상태 변화를 다른 객체들에게 알리는 패턴입니다.
- Buff: 캐릭터의 상태 변화를 감지하고 처리하는 관찰자
컴포지트 패턴(Composite Pattern)
객체들을 트리 구조로 구성하는 패턴입니다.
- Group: 게임 시각적 요소들을 계층적으로 관리
- Scene → Group → Visual: 시각적 요소들의 계층 구조
프로토타입 패턴(Prototype Pattern)
기존 객체를 복제하여 새 객체를 생성하는 패턴입니다.
상태 패턴 구현 예:
// 몬스터 AI 상태 패턴 구현
public interface AiState {
boolean act(boolean enemyInFOV, boolean canAttack);
}
// 잠자는 상태
class Sleeping implements AiState {
@Override
public boolean act(boolean enemyInFOV, boolean canAttack) {
if (enemyInFOV) {
// 적이 시야에 들어오면 깨어남
return false; // 다음 상태로 전환
}
// 계속 잠
return true;
}
}
// 돌아다니는 상태
class Wandering implements AiState {
@Override
public boolean act(boolean enemyInFOV, boolean canAttack) {
if (enemyInFOV && canAttack) {
// 적이 보이고 공격 가능하면 사냥 상태로
return false; // 다음 상태로 전환
}
// 무작위 이동
// ...
return true;
}
}
// 사냥 상태
class Hunting implements AiState {
@Override
public boolean act(boolean enemyInFOV, boolean canAttack) {
if (enemyInFOV && canAttack) {
// 공격
// ...
} else {
// 적에게 접근
// ...
}
return true;
}
}