Exemple #1
0
    void Choice()
    {
        do
        {
            bool isLoop = true;
            do
            {
                switch (GetBestChoice(resultInfo.dealerIdx))
                {
                case ChoiceKind.Hit:

                    GetCardPlayer();

                    isLoop = (!player.GetCurrentHand.IsStopChoice && PreferHit(resultInfo.dealerIdx));

                    break;

                case ChoiceKind.Stand:
                    isLoop = false;
                    break;

                case ChoiceKind.DoubleDown:

                    player.DoubleDown();

                    GetCardPlayer();

                    isLoop = false;

                    break;

                case ChoiceKind.Split:

                    AI_PlayerHand secondHand = player.Split(player.GetCurrentHand.IsDoubleAce);
                    GetCardPlayer();

                    AI_Card secondCard = deck.Pop();
                    player.AddCCNumber(secondCard.cardCountingScore);
                    secondHand.Push(secondCard, false);

                    break;

                case ChoiceKind.Surrender:

                    player.GetCurrentHand.AmountOfBetting = 0;
                    player.GetCurrentHand.IsSurrender     = true;
                    isLoop = false;

                    break;

                case ChoiceKind.NotDetermined:

                    isLoop = false;

                    break;
                }
            } while (isLoop && !player.GetCurrentHand.IsStopChoice);
        } while(player.UpdateAndCheckAllPossibleHand());
    }
Exemple #2
0
    public virtual AI_Card Pop()
    {
        AI_Card popCard = cards[cards.Count - 1];

        cards.RemoveAt(cards.Count - 1);

        return(popCard);
    }
Exemple #3
0
    void GetCardPlayer()
    {
        AI_Card newCard = deck.Pop();

        player.AddCCNumber(newCard.cardCountingScore);

        player.GetCard(newCard);
    }
    public void Discard(AI_Card card)
    {
        //if (discards.Contains(card))
        //{
        //    Debug.Log("이미 카드가 존재한다 in Push() of Deck");
        //}

        discards.Add(card);
    }
    public AI_Card Pop()
    {
        int randIdx = Random.Range(0, cards.Count);

        AI_Card returnCard = cards[randIdx];

        cards.RemoveAt(randIdx);

        return(returnCard);
    }
    //____________________________________카드 처리 관련____________________________

    public void GetCard(AI_Card card)
    {
        bool isFirstHand = false;

        // 카드 추가전에 계산되기 때문에
        // 조건 수치를 2->1로 줄인다(origin=IsFirstHand)
        if (cards.Count <= 1)
        {
            isFirstHand = true;
        }

        Push(card, isFirstHand);
    }
Exemple #7
0
    public void GetCard(AI_Card card)
    {
        AI_PlayerHand hand = GetCurrentHand;

        bool isFirstHand = false;

        // 카드 추가전에 계산되기 때문에
        // 조건 수치를 2->1로 줄인다(origin=IsFirstHand)
        if (hands.Count == 1 && hands[0].GetCardCount <= 1)
        {
            isFirstHand = true;
        }

        hand.Push(card, isFirstHand); // (in)카드 하이라이트 +
    }
Exemple #8
0
    void GetCardDealer(bool isHold = false)
    {
        AI_Card newCard = deck.Pop(); // Get Card

        //
        if (isHold)
        {
            holeCardCountingNumber = newCard.cardCountingScore;
        }
        else
        {
            player.AddCCNumber(newCard.cardCountingScore);
        }

        dealer.GetCard(newCard);
    }
    void InitCard()
    {
        for (int j = 0; j < numOfDeck; ++j)
        {
            int cardNum = 0; // 변경용 조건문이 대입문보다 앞에 있기때문에 0부터 시작

            for (int i = 0; i < 52; ++i)
            {
                GameObject newObj  = (GameObject)Instantiate(card, Vector3.zero, Quaternion.identity);
                AI_Card    newCard = newObj.AddComponent <AI_Card>();
                if (i % 4 == 0 && cardNum < 10)
                {
                    ++cardNum;
                }
                newCard.Init(cardNum);
                cards.Add(newCard);
            }
        }
    }
Exemple #10
0
    public AI_PlayerHand Split(bool isAce)
    {
        AI_Card card = GetCurrentHand.Pop();
        float   bet  = GetCurrentHand.AmountOfBetting;

        AI_PlayerHand splitHand = AddHand();

        if (isAce)
        {
            GetCurrentHand.SetSplitAce();
            splitHand.SetSplitAce();
        }

        // 그 핸드에 정보 전달
        splitHand.Push(card, false);
        splitHand.Betting();

        return(splitHand);
    }
Exemple #11
0
    public virtual void Push(AI_Card card, bool isFirstHand)
    {
        cards.Add(card);

        CheckValue(isFirstHand);
    }
 public void Push(AI_Card card)
 {
     cards.Add(card);
 }
Exemple #13
0
    void Choice()
    {
        ChoiceKind curChoice = ChoiceKind.NotDetermined;

        do
        {
            if (IsFirstChoiceNotDetermined())
            {
                ReadOnlyCollection <ChoiceKind> possibleOptions = GetPossibleOptions();

                curChoice = possibleOptions[Random.Range(0, possibleOptions.Count)];

                resultInfo.firstChoice = curChoice;
            }
            else
            {
                curChoice = GetBestChoice(resultInfo.dealerIdx);
            }

            while (true)
            {
                bool loop = true;

                switch (curChoice)
                {
                case ChoiceKind.Hit:
                    GetCardPlayer();

                    loop = (!player.GetCurrentHand.IsStopChoice && PreferHit(resultInfo.dealerIdx));

                    break;

                case ChoiceKind.Stand:
                    loop = false;
                    break;

                case ChoiceKind.DoubleDown:

                    player.DoubleDown();

                    int  preCount  = player.CCNumber;
                    int  preValue  = (int)player.GetCurrentHand.value;
                    bool isPreSoft = player.GetCurrentHand.IsSoft;

                    GetCardPlayer();

                    if (preValue >= 12 && isPreSoft == false)
                    {
                        if (player.GetCurrentHand.value == HAND_VALUE.BURST_PLAYER)
                        {
                            DB_Manager.Instance.AddBurstInfo(preCount, preValue);
                        }
                        else
                        {
                            DB_Manager.Instance.AddNotBurstInfo(preCount, preValue);
                        }
                    }

                    loop = false;

                    break;

                case ChoiceKind.Split:

                    AI_PlayerHand secondHand = null;
                    AI_Card       secondCard = deck.Pop();

                    player.AddCCNumber(secondCard.cardCountingScore);

                    secondHand = player.Split(player.GetCurrentHand.IsDoubleAce);
                    GetCardPlayer();
                    secondHand.Push(secondCard, false);

                    curChoice = GetBestChoice(resultInfo.dealerIdx);
                    loop      = (curChoice != ChoiceKind.Stand);

                    break;

                case ChoiceKind.Surrender:

                    player.GetCurrentHand.AmountOfBetting = 0;
                    player.GetCurrentHand.IsSurrender     = true;
                    loop = false;

                    break;

                case ChoiceKind.NotDetermined:

                    Debug.LogError("Stand is base choice, so whatever else should be determined in this stage");
                    loop = false;
                    break;
                }

                if (loop == false)
                {
                    break;
                }
            }
        } while (player.UpdateAndCheckAllPossibleHand());
    }
Exemple #14
0
    public override void Push(AI_Card card, bool isFirstHand)
    {
        base.Push(card, isFirstHand); // 부모설정, 오프셋위치, 리스트push, 값 업데이트

        UpdateChoices(isFirstHand);   // 가능 초이스 업데이트
    }