프로젝트/스네이크 프로젝트

[스네이크] - StatePattern을 활용한 게임 상태 관리

MuscleDeveloper5683 2025. 1. 7. 16:12
728x90
SMALL

 

게임을 하다보면 여러가지 상태가 있을 것이다.

 

1. 게임 실패

2. 게임 성공

3. 새로운 게 임

 

위와 같은 게임의 상태를 관리하기 위해 State Pattern을 사용해 각 게임상태를 관리해보자.

 

 

상황 

 

1. 목표점수를 달성하지 못하거나 시간초가 오버돼 게임에 실패했을 경우

- 다시하기를 통해 목표점수 그대로 도전한다.

 

2. 목표점수를 달성해 다음 단계로 넘어가야할 경우

- 다음단계를 통해 다음 목표점수로 도전한다.

 

3. 새로운 게임을 시작할 경우

- 초기 목표점수로 게임을 새롭게 도전한다.

 

 

우선 State Pattern의 기반을 제공할 인터페이스 스크립트를 만들자.

 

1. State Pattern의 기반을 제공할 인터페이스 스크립트 - IGameState.cs

게임의 다양한 상태(예: NewGame, CurrentGame, NextGame, GameOver)를 독립적으로 정의하고,
각 상태에서 수행해야 할 동작을 통합적으로 관리하기 위한 구조를 제공

 

 

 

2. 게임 상태를 관리할 수 있는 값들을 GameManager에서 변수를 추가해주자.

 

 

 

또한 상태체크를 할 수 있는 변수를 추가후 업데이트에서도 체크해주자

 

 

 

 

  • ?. 연산자는 null 체크를 안전하게 수행하는 기능을 한다.
  • 변수(CurrentState)가 null일 수도 있기 때문에 - ?. (Null-Conditional Operator)**를 사용한다.
  • 만약 currentState가 null이면 아무 작업도 하지 않고 바로 다음 코드로 넘어간다.

 

 

 

 

현재 상태를 새로운 상태로 변경하는 메서드를 추가하고 적용시켜주자

 

 

 

 

3. State Pattern을 사용하여 게임의 주요 상태를 정의하고 관리할 스크립트 - NewGameState.cs

각 상태(NewGame, CurrentGame, NextGame, GameOver)는 IGameState 인터페이스를 구현하여 상태별로

  • 초기화(EnterState),
  • 동작(UpdateState),
  • 종료(ExitState)

를 처리GameManager는 이 상태들을 관리하며, 상태 간의 전환이 유연하게 이루어진다.

 

 

 

3.1 - 각 상태에 맞는 클래스들 생성(새로운 게임, 다음 게임, 현재 게임, 게임 오버)

 

 

 

3.2 - 각 상태 클래스에 맞게 조건 수정

 

새로운 게임 다음 게임
현재 게임 게임 오버

 

 

 

3.3 - 각 상태 클래스에 상황에 맞게 적용

 

새로운 게임 (로비에서 게임시작 버튼) 다음 게임 (성공 팝업에서 다음단계 버튼)
현재 게임 (실패 팝업에서 다시하기 버튼) 게임 오버 (60초 시간 오버로 게임 종료)

 

 

 

결과

 

로비씬에서 새로운 게임을 생성 했을 경우

 

 

 

성공 후 다음 게임으로 넘어갈 때

 

 

 

실패 후 게임을 다시하기 할 경우

 

728x90