Example #1
0
 internal void Add(Collection <Card> added)
 {
     foreach (Card card in added)
     {
         AIHand.Add(card);
     }
 }
Example #2
0
        private Card GetHighestCardOfSuit(PlayState playState, Suit suit)
        {
            Card ret = null;

            if ((playState.Trick.Contains(new Card(Suit.Spades, FaceValue.Ace, true)) ||
                 playState.Trick.Contains(new Card(Suit.Spades, FaceValue.King, true))) &&
                AIHand.Contains(Suit.Spades, FaceValue.Queen) && playState.Lead.CardSuit == Suit.Spades)
            {
                return(new Card(Suit.Spades, FaceValue.Queen, true));
            }

            foreach (Card c in AIHand.Cards)
            {
                if (c.CardSuit == suit)
                {
                    if (ret == null)
                    {
                        ret = c;
                    }
                    else if (ret.CardRank < c.CardRank)
                    {
                        if (!(c.CardValue == FaceValue.Queen && c.CardSuit == Suit.Spades))
                        {
                            ret = c;
                        }
                    }
                }
            }
            return(ret);
        }
Example #3
0
        internal Card Play(PlayState playState)
        {
            Card ret = null;

            if (playState.Trick.Count == 0)
            {
                if ((ret = ChooseLead(playState)) == null)
                {
                    throw new InvalidOperationException("AI - CHOOSE LEAD FAILED!");
                }
            }
            else
            if ((ret = ChooseFollow(playState)) == null)
            {
                throw new InvalidOperationException("AI - CHOOSE FOLLOW FAILED!");
            }

            if (!AIHand.Contains(ret.CardSuit, ret.CardValue))
            {
                throw new InvalidOperationException("AI - PLAYED CARD NOT IN HAND !");
            }

            AIHand.Remove(ret);
            AIHand.Sort();
            return(ret);
        }
Example #4
0
        /* AI Card Action Methods */
        private Card ChooseLead(PlayState playState)
        {
            Card ret;

            if (AIHand.Contains(Suit.Clubs, FaceValue.Two))
            {
                return(new Card(Suit.Clubs, FaceValue.Two, true));
            }
            else
            {
                if (!playState.QueenHasBeenPlayed && !AIHand.Contains(Suit.Spades, FaceValue.Queen))
                {
                    ret = GetHighestSpadeBelowQueen(playState);
                }
                else if (playState.IsBroken)
                {
                    ret = GetLowestCard();
                }
                else
                {
                    ret = GetLowestNonPointCard();
                }

                if (ret == null)
                {
                    ret = GetLowestCard();
                }

                return(ret);
            }
        }
Example #5
0
        private Card GetHighestNonPointCard()
        {
            int removeValue = (int)CardRank.AceHigh;

            if (AIHand.Contains(Suit.Spades, FaceValue.Ace))
            {
                return(new Card(Suit.Spades, FaceValue.Ace, true));
            }
            else if (AIHand.Contains(Suit.Spades, FaceValue.King))
            {
                return(new Card(Suit.Spades, FaceValue.King, true));
            }

            while (removeValue >= 0)
            {
                for (int i = AIHand.Cards.Count - 1; i >= 0; i--)
                {
                    if (AIHand.Cards[i].CardSuit != Suit.Hearts)
                    {
                        if (!(AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen))
                        {
                            if (AIHand.Cards[i].CardRank >= removeValue)
                            {
                                return(AIHand.Cards[i]);
                            }
                        }
                    }
                }
                removeValue--;
            }
            return(null);
        }
Example #6
0
 private void Remove(Collection <Card> removed)
 {
     foreach (Card c in removed)
     {
         AIHand.Remove(c);
     }
 }
Example #7
0
 internal bool HasTwoOfClubs()
 {
     if (AIHand.Contains(Suit.Clubs, FaceValue.Two))
     {
         return(true);
     }
     return(false);
 }
Example #8
0
        internal void SetHand(Hand hand)
        {
            _AIHand.SetHand(hand.Cards);

            if (AIHand.Contains(Suit.Spades, FaceValue.Queen))
            {
                preferredSpades = false;
            }
        }
Example #9
0
    void Update()
    {
        if(manager.activateShootingAI && transform.position.y < 0.6f)
        {
            if(enemyHand == null){
                enemyHand = GameObject.FindGameObjectWithTag("EnemyAIHand").GetComponent<AIHand>();
                enemyHand.FollowEnemy(this);
            }
        }

        if (!wasCaptured && transform.position.y > -0.15f)
            MoveToShip ();
    }
Example #10
0
        private Card ChooseFollow(PlayState playState)
        {
            Card ret = null;

            if (!HasSuit(playState.Lead.CardSuit))
            {
                if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two)
                {
                    ret = GetHighestNonPointCard();
                }
                else if (AIHand.Contains(Suit.Spades, FaceValue.Queen))
                {
                    ret = new Card(Suit.Spades, FaceValue.Queen, true);
                }
                else
                {
                    ret = GetHighestHeartOrOtherCard();
                }
            }
            else
            {
                if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two)
                {
                    ret = GetHighestCardOfSuit(playState, Suit.Clubs);
                }
                else if (playState.Trick.Count < 3 || PointInTrick(playState))
                {
                    ret = TryToNotWinTrick(playState, GetHighestTrickCard(playState), playState.Trick.Count == 3 ? true : false);
                }
                else
                {
                    ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit);
                }

                if (ret.CardSuit != playState.Lead.CardSuit)
                {
                    throw new InvalidOperationException("AI - NOT FOLLOWING SUIT");
                }
            }

            if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two)
            {
                if (ret.CardSuit == Suit.Spades && ret.CardValue == FaceValue.Queen || ret.CardSuit == Suit.Hearts)
                {
                    throw new InvalidOperationException("AI - PLAYED POINT CARD FIRST TRICK!");
                }
            }

            return(ret);
        }
Example #11
0
 public new void Awake()
 {
     MatrixValue  = 1;
     InstanceType = 1;
     instance     = this;
     CardSlotList.Add(CardSlot0);
     CardSlotList.Add(CardSlot1);
     CardSlotList.Add(CardSlot2);
     CardSlotList.Add(CardSlot3);
     CardSlotList.Add(CardSlot4);
     CardSlotList.Add(CardSlot5);
     CardSlotList.Add(CardSlot6);
     CardSlotList.Add(CardSlot7);
     CardSlotList.Add(CardSlot8);
     CardSlotList.Add(CardSlot9);
     CardSlotList.Add(CardSlot10);
     if (!silent)
     {
         InitializeCardSlots();
     }
     //Debug.Log("Check y (AI):" + CardSlotList[4].TargetTransform.position.y);
 }
Example #12
0
 public void Awake()
 {
     instance   = this;
     PlayerHand = GameObject.Find("PlayerHand").GetComponent <PlayerHand>();
     AIHand     = GameObject.Find("AIHand").GetComponent <AIHand>();
 }
Example #13
0
 private void Awake()
 {
     main = this;
 }
Example #14
0
    void Update()
    {
        if(manager.activateTreasureAI && transform.position.y < 0.6f)
        {
            if(treasureHand == null){
                treasureHand = GameObject.FindGameObjectWithTag("TreasureAIHand").GetComponent<AIHand>();
                treasureHand.FollowTreasure(this);
            }

        }

        if(!treasureFilled)
            DoTreasureFill();
        else
            MoveToShip();
    }
Example #15
0
        internal ReadOnlyCollection <int> PassIndexes()
        {
            Collection <int> ret = new Collection <int>();
            int suit             = CheckShortSuited();

            if (AIHand.Contains(Suit.Spades, FaceValue.Queen))
            {
                ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.Queen));
            }

            if (AIHand.Contains(Suit.Spades, FaceValue.King))
            {
                ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.King));
            }

            if (AIHand.Contains(Suit.Spades, FaceValue.Ace))
            {
                ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.Ace));
            }

            if (suit != -1 && ret.Count == 0)
            {
                for (int i = 0; i < AIHand.Cards.Count && ret.Count < 3; i++)
                {
                    if (AIHand.Cards[i].CardSuit == (Suit)suit && !ret.Contains(i))
                    {
                        ret.Add(i);
                    }
                }
            }

            //Return High Cards Starting with Hearts
            int removeValue = (int)CardRank.Ten;

            while (ret.Count < 3)
            {
                for (int i = AIHand.Cards.Count - 1; i >= 0 && ret.Count < 3; i--)
                {
                    if (AIHand.Cards[i].CardRank >= removeValue)
                    {
                        if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Ace)
                        {
                            if (!ret.Contains(i))
                            {
                                ret.Add(i);
                            }
                        }
                        else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.King)
                        {
                            if (!ret.Contains(i))
                            {
                                ret.Add(i);
                            }
                        }
                        else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen)
                        {
                            if (!ret.Contains(i))
                            {
                                ret.Add(i);
                            }
                        }
                        else if (!ret.Contains(i))
                        {
                            ret.Add(i);
                        }
                    }
                }
                removeValue--;
            }

            return(new ReadOnlyCollection <int>(ret));
        }
Example #16
0
        internal Collection <Card> Pass()
        {
            if (AIHand.Cards.Count != 13)
            {
                throw new InvalidOperationException("AI - HAND IS NOT FULL ON PASS");
            }

            Collection <Card> ret = new Collection <Card>();
            int suit = CheckShortSuited();

            if (AIHand.Contains(Suit.Spades, FaceValue.Queen))
            {
                ret.Add(new Card(Suit.Spades, FaceValue.Queen, true));
            }

            if (AIHand.Contains(Suit.Spades, FaceValue.King))
            {
                ret.Add(new Card(Suit.Spades, FaceValue.King, true));
            }

            if (AIHand.Contains(Suit.Spades, FaceValue.Ace))
            {
                ret.Add(new Card(Suit.Spades, FaceValue.Ace, true));
            }

            if (suit != -1 && ret.Count == 0)
            {
                for (int i = 0; i < AIHand.Cards.Count && ret.Count < 3; i++)
                {
                    if (AIHand.Cards[i].CardSuit == (Suit)suit && !ret.Contains(AIHand.Cards[i]))
                    {
                        ret.Add(AIHand.Cards[i]);
                    }
                }
            }

            //Return High Cards Starting with Hearts
            int removeValue = (int)CardRank.Ten;

            while (ret.Count < 3)
            {
                for (int i = AIHand.Cards.Count - 1; i >= 0 && ret.Count < 3; i--)
                {
                    if (AIHand.Cards[i].CardRank >= removeValue)
                    {
                        if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Ace)
                        {
                            if (!ret.Contains(new Card(Suit.Spades, FaceValue.Ace, true)))
                            {
                                ret.Add(AIHand.Cards[i]);
                            }
                        }
                        else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.King)
                        {
                            if (!ret.Contains(new Card(Suit.Spades, FaceValue.King, true)))
                            {
                                ret.Add(AIHand.Cards[i]);
                            }
                        }
                        else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen)
                        {
                            if (!ret.Contains(new Card(Suit.Spades, FaceValue.Queen, true)))
                            {
                                ret.Add(AIHand.Cards[i]);
                            }
                        }
                        else if (!ret.Contains(AIHand.Cards[i]))
                        {
                            ret.Add(AIHand.Cards[i]);
                        }
                    }
                }
                removeValue--;
            }

            Remove(ret);

            if (AIHand.Cards.Count != 10)
            {
                throw new InvalidOperationException("AI - NOT REMOVING CORRECTLY");
            }

            return(ret);
        }
Example #17
0
        private Card TryToNotWinTrick(PlayState playState, Card highCard, bool last)
        {
            if ((playState.Trick.Contains(new Card(Suit.Spades, FaceValue.Ace, true)) ||
                 playState.Trick.Contains(new Card(Suit.Spades, FaceValue.King, true))) &&
                AIHand.Contains(Suit.Spades, FaceValue.Queen) && playState.Lead.CardSuit == Suit.Spades)
            {
                return(new Card(Suit.Spades, FaceValue.Queen, true));
            }
            Card ret = null;

            foreach (Card c in AIHand.Cards)
            {
                if (c.CardSuit == playState.Lead.CardSuit)
                {
                    if (c.CardRank <= highCard.CardRank)
                    {
                        if (!(c.CardSuit == Suit.Spades && c.CardValue == FaceValue.Queen))
                        {
                            ret = c;
                        }
                    }
                }
            }

            if (ret == null)
            {
                if (playState.Lead.CardSuit == Suit.Spades)
                {
                    if (AIHand.Contains(Suit.Spades, FaceValue.King) && AIHand.Contains(Suit.Spades, FaceValue.Queen))
                    {
                        ret = new Card(Suit.Spades, FaceValue.King, true);
                    }
                    else if (AIHand.Contains(Suit.Spades, FaceValue.Ace) && AIHand.Contains(Suit.Spades, FaceValue.Queen))
                    {
                        ret = new Card(Suit.Spades, FaceValue.Ace, true);
                    }
                    else if (last == true)
                    {
                        ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit);
                    }
                    else
                    {
                        ret = GetLowestCardOfSuit(playState.Lead.CardSuit);
                    }
                }
                else
                {
                    if (last == true)
                    {
                        ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit);
                    }
                    else
                    {
                        ret = GetLowestCardOfSuit(playState.Lead.CardSuit);
                    }
                }
            }

            if (ret.CardSuit != playState.Lead.CardSuit)
            {
                throw new InvalidOperationException("AI - NOT FOLLOWING SUIT");
            }
            return(ret);
        }