본문 바로가기

UNITY

UNITY_20230925[팀 과제-로그라이크 RPG, 디자인 패턴-전략 패턴]

20230925부로 팀 과제 프로젝트를 시작한다. 우리 팀은 2D 로그라이크 RPG게임을 제작하기로 결정했다.

내가 담당한 부분은 게임의 맵 생성이다. 저번 강의에서 학습한 단순 TILEMAP으로 채우기가 아닌, 절차적 맵 생성 알고리즘을 이용한 랜덤 맵 구현이다. 

이 기능에 대해 조사해 보니, 이진공간분할(BSP)이라는 알고리즘이 있었고, 마침 프로젝트의 레퍼런스가 될 몇몇 게임의 맵과 생성 방식이 유사하다고 생각해, 이틀 간 이 BSP에 대해 공부를 좀 하고 본격적인 맵 구현 작업을 진행할 생각이다.

BSP 알고리즘을 이용한 맵 생성, 파란 사각형이 분할로 생성된 공간이고, 검은 선이 각 공간을 잇는 통로 개념이다.

여러 자료를 찾아 보고 있는데, 역시 하루 이틀로는 이해가 안 될 내용이다. 추석 연휴 때도 반드시 공부해야 한다.


디자인 패턴 - 전략 패턴


특정한 작업(알고리즘)을 독립적으로 정의하고 캡슐화하여, 해당 작업을 동적으로 교체할 수 있도록 하는 패턴

아래는 전략 패턴의 예시를 포함한 설명이다.

다양한 오리를 구현하는 방법

어떻게 다양한 오리를 구현하는가? 울음(quack), 헤엄(swim), 외형(display)로 구분해 구현한다.

오리 클래스라는 상위 클래스에 위 3개의 메서드를 가지고,
하위 청둥오리, 쇠오리, 러버덕 하위 클래스는 위 메서드를 가질 수 있다.

그런데, 오리 클래스에 비행(fly)메서드가 추가된다면?
러버덕 클래스에서는 사용하지 않을 메서드다. 이 정도야 override 비행() 으로 메서드 내용을 지우면 된다.

하지만, 날지 못하는 오리 클래스가 수천개 들어간다면? 비행 말고도 식용 가능(Eatable)메서드 같은 오리 클래스 내의 차이를 만들어 내는 메서드가 존재한다면? 일일이 다 수정하나? 그런 코드는 없다.

상속받는 하위 클래스에는 공통적으로 가지는 메서드, 차이점을 두고 가지는 메서드가 있다.
그럼 이 차이점을 어떻게 구현해야 하는가? 아래는 그 순서다.

 

  1. 인터페이스를 사용한다. 비행, 식용 가능 메서드는 상위 클래스에서 정의하지 않는다. 공통점 메서드(display)는 하나의 상위 클래스(duck)에서, 차이점 메서드(quack, fly, eatable)는 따로 각각의 인터페이스(IQuack, IFly, IEatble)에서 정의한다.
  2. 인터페이스에서 구현된 차이점 메서드를 이 인터페이스의 하위 클래스 (SayQuack, SoundSqueak, CanFly, CantFly, CanEat, CantEat)에서 구현한다.
  3. 공통점 메서드를 구현한 상위 클래스에서 위 인터페이스를 객체화하고, 차이점 메서드를 실행시키는 메서드를 구현한다.
  4. 상위 클래스를 상속받는 각각의 하위 클래스(청둥오리, 쇠오리, 러버덕, 베이징덕)에서 차이점 메서드를 각각 대응시켜 실행하는 메서드를 구현한다.