Mini Project - 8

규수·2026년 4월 25일

개발 공부 일지

목록 보기
32/44

오늘은 게임 내 구현 목표상의 마지막 파트인 바우처카드 구현과 바우처 카드 기반 게임 내 자원 강화 시스템에 대하여 구현한 내용을 정리해보겠습니다.

기획 흐름

바우처카드는 다음의 흐름으로 기획하였습니다.

1. 바우처카드는 기존 조커, 행성카드와 동일한 방식으로 상점 내 표시, 구매.. 코드 처리
2. 바우처카드 구매시 RoundManager에 설정한 속성 변경을 위한 호출처리
3. RoundManager에서 수치 변경에 따른 함수 호출을 통해 구매한 바우처카드의 효과를 기반으로 수치 증감
4. 완료되면 바우처카드는 삭제 처리. 이후, 게임을 재시작하기 전까지 생성되지 않도록 처리

구현 코드

바우처카드는 다음과 같이 코드를 구현하였습니다.

<style>
public class VoucherCard : BaseCard, IPointerEnterHandler, IPointerExitHandler
{
	[Header("VoucherCard Information")]
    public int sellPrice;
    public VoucherEffect voucherEffect;
    
    public void SetupCard(string id, int sellPrice, int voucherEffectIndex)
    {

        Initalize(id, sellPrice, voucherEffectIndex);
        gameObject.SetActive(false);
    }

    public void Initalize(string id, int sellPrice, int voucherEffectIndex)
    {
        if (voucherEffectIndex == 0) return;

        base.Initalize(id, "VoucherCard", voucherDescriptions[voucherEffectIndex]);

        this.sellPrice = sellPrice;
        this.voucherEffect = (VoucherEffect)voucherEffectIndex;
    }
    // RoundManager Instance 함수 호출
    public void UseVoucheerEffect(VoucherEffect voucherEffect)
    {
        if(RoundManager.Instance != null) RoundManager.Instance?.AddVoucherEffect(voucherEffect);
    } 
}
</style>
RoundManager.cs
<style>
public void AddVoucherEffect(VoucherEffect voucherEffect)
{
    if (voucherEffect == VoucherEffect.TwiceCoin)
    {
        playerCoin += 15;
        UpdateGameInfo();
        return; 
    }

    if (!voucherEffects.Contains(voucherEffect))
    {
        voucherEffects.Add(voucherEffect);
    }
    ApplyRoundChanges();
}

public void ApplyRoundChanges()
{
    foreach (VoucherEffect effect in voucherEffects)
    {
        switch (effect)
        {
            case VoucherEffect.AddHands: remainHand += 1; break;
            case VoucherEffect.AddDiscards: remainDiscard += 1; break;
            case VoucherEffect.AddHandsAndReduceDiscards: remainHand += 1; remainDiscard -= 1; break;
            case VoucherEffect.AddDiscardsAndReduceHands: remainHand -= 1; remainDiscard += 1; break;
        }
    }
    UpdateGameInfo();
}
</style>

이번 바우처 카드의 효과에 따른 RoundManager의 정보 변경에 있어 함수를 호출하는 방식으로 구현하였습니다.

테스트 이후, 작성한 코드에 대한 리뷰를 진행하였는데 이후 리팩토링 시기에 코드 구현 방식을 변경해야겠다는 생각이 들었습니다.

그 이유로 이전의 구현 방식과 클래스 간의 디커플링을 고려하였을 때, 이벤트-구독 방식을 적용하고 이벤트에서 바우처효과를 매개변수로 전달하는 방식이 구현의 일관성을 지킴과 동시에 RoundManager와의 결합도를 낮추는 방법이라고 생각되었기 때문입니다.

따라서 해당 부분에 대해서도 추후에 일관된 코드 구현방식을 통해 코드 가독성 및 클래스간의 결합도를 낮추어 볼 수 있도록 수정할 계획입니다.

0개의 댓글