Unity/로봇 체스 개발 일지

[Unity] 게임 규칙 설정 : GameManager

suppresswisely 2025. 1. 9. 15:16

요약

게임이 원활하게 돌아가기 위해 게임의 규칙을 설정하고 관리하게 하는 코드를 작성하였다. 

코드는 몬스터 사망 처리, 플레그 회수, 턴 관리를 담당하는 알고리즘으로 이루어져 있다.

특히 게임 규칙에서 중요한 것은 플레이어 턴에서 몬스터 턴으로 넘어갈 때 몬스터 중에서 플레이어와 가장 가까운 몬스터 먼저 움직일 권한이 주어진다. 이렇게 되지 않는다면 몬스터가 올바른 동작을 하지 않게 된다.


게임 규칙

플레이어가 움직일 수 있는 턴, 몬스터가 움직일 수 있는 턴이 존재한다.
플레이어와 몬스터는 각각 공격 1번 이동 1번을 할 수 있다.
플레이어 턴은 몬스터의 동작이 끝나면 올리는 플래그가 모두 올라갈 때 돌아온다.
몬스터 턴은 플레이어가 턴 종료 버튼을 누를 시 돌아온다.
몬스터 턴에는 플레이어와 가장 가까운 몬스터에게 권한을 부여한다.
동작을 마친 몬스터는 다음으로 플레이어와 가까운 몬스터에게 권한을 넘긴다.


가장 가까운 몬스터에게 권한을 먼저 부여하는 이유

*몬스터(빨강색), 플레이어(파랑색)

 

다음과 같은 상황에서 몬스터의 올바른 동작은 아래와 같을 것이다.

하지만 이는 가장 가까운 몬스터가 우선권을 가졌을 때의 경우이고 만약 아니면

 

이러한 식으로 이상하게 움직이는 경우가 발생한다.


GameManager.cs

public class GameManager : MonoBehaviour
{
    ... 생략 ...
    // 몬스터의 움직임의 규칙을 담당하는 알고리즘
    if (monsterTurn && SummonedMonster.Count > 0)
    {
        ButtonLock = true;
        // 몬스터가 N번 행동 할수 있도록 함
        if (monsterTurnCount < 2)
        {
            if (CheckMonsterAuthority())
            {
                if (CheckMonsterFlag())
                {
                    MonsterDeathProcessing();
                    ResetMonsterFlags();
                    FindNearbyMonsters();
                    SummonedMonsterAuthorityCount = 0;
                    monsterTurnCount++;
                }
            }
        }
    }
    ... 생략 ...
}

 

CheckMonsterAuthority(): 몬스터의 동작 권한이 마지막 몬스터 까지 가면 True

CheckMonsterFlag(): 모든 몬스터의 플래그가 올라가면 True

MonsterDeathProcessing(): 몬스터가 죽으면 사망 처리

ResetMonsterFlags(): 몬스터 플래그 재정렬

FindNearbyMonsters(): 플레이어와 몬스터 거리 확인 후 가까운 몬스터에게 우선으로 움직이는 권한 부여