본문 바로가기
개발일지/게임개발

Project_DT - 플레이어 드로우 기능

by 라이티아 2025. 9. 23.

이전에 구현한 deck을 상속한 여러 컴포넌트를 사용한다

 

using UnityEngine;

public class Player : Character
{
    [Header("Decks")]
    [SerializeField]
    private Deck _drawDeck;
    [SerializeField]
    private Deck _handDeck;
    [SerializeField]
    private Deck _graveyardDeck;

    void Start()
    {
        if (TurnManager.Instance != null)
            TurnManager.Instance.OnTurnChanged += TurnChanged;
    }

    private void TurnChanged(TurnManager.TurnOwner owner)
    {
        if (owner == TurnManager.TurnOwner.Player)
        {
            Debug.Log("Player's Turn Start");
        }
        else
        {
            Debug.Log("Player's Turn End");
        }
    }

    private void DrawCard(int n)
    {
        _handDeck. = _drawDeck.DrawCard();
    }
}

플레이어가 턴의 시작에 돌입할 시 드로우하는 기능을 구현하려 한다

 

이때 DrawCard라는 함수로 드로우를 받는다

 

아직 Deck에 한장을 넣는 기능이 없어서 따로 구현한다

 

    // 덱에 카드를 상단에 세팅
    public void SetCardToTop(int cardId)
    {
        _cards.Add(cardId);
    }
    private void TurnChanged(TurnManager.TurnOwner owner)
    {
        if (owner == TurnManager.TurnOwner.Player)
        {
            Debug.Log("Player's Turn Start");
            DrawCard(1);
        }
        else
        {
            Debug.Log("Player's Turn End");
        }
    }

    private void DrawCard(int n)
    {
        for (int i = 0; i < n; i++)
        {
            _handDeck.SetCardToTop(_drawDeck.DrawCard());
        }
    }

플레이어의 턴이 들어올 시 카드를 n으로 받아 드로우를 한다

 

예외 처리로 뽑으려 하는 덱이 0장인 경우도 처리해야 한다

 

deck에서 예외 조건을 처리할 수 있도록 bool반환 함수를 작성한다

 

    /// <summary>
    /// 덱에 카드가 남아 있는가 확인
    /// </summary>
    /// <returns></returns>
    public bool IsDeckEmpty()
    {
        return _cards.Count == 0;
    }
    private void DrawCard(int n)
    {
        for (int i = 0; i < n; i++)
        {
            if (!_drawDeck.IsDeckEmpty())
            {
                _handDeck.SetCardToTop(_drawDeck.DrawCard());
            }
        }
    }

이를 연결해서 구현한다

 

잘 구현된 것 을 확인할 수 있다