
이전에 구현한 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());
}
}
}
이를 연결해서 구현한다
잘 구현된 것 을 확인할 수 있다
'개발일지 > 게임개발' 카테고리의 다른 글
| Project_DT - 카드 드래그 가이드 개발 (2) | 2025.09.25 |
|---|---|
| Project_DT - 카드 사용 구현 (2) | 2025.09.23 |
| Project_DT - 덱 기능 설계, 구현 (0) | 2025.09.23 |
| Project_DT - 구글 시트 parsing 기능 만들기 (0) | 2025.09.19 |
| Project_DT - 턴제 전투, 적 상태 구현 (0) | 2025.09.18 |