示例#1
0
        public void WhoIsTheWinner()
        {
            UserHand winnerHand = new UserHand();

            winnerHand.Cards.Add(new Card(Color.CLUBS, Name.TWO));



            foreach (var playerItem in MyUser.UserHands)
            {
                if (playerItem.GetValue() <= 21)
                {
                    if (playerItem.GetValue() > winnerHand.GetValue())
                    {
                        MyGame.Winner = MyUser;
                        winnerHand    = playerItem;
                    }
                    else if (playerItem.GetValue() == winnerHand.GetValue())
                    {
                        MyGame.Winner = MyUser;
                        winnerHand    = playerItem;
                    }
                }
            }

            if (Bank.UserHands[0].GetValue() <= 21)
            {
                if (Bank.UserHands[0].GetValue() > winnerHand.GetValue())
                {
                    MyGame.Winner = Bank;
                    winnerHand    = Bank.UserHands[0];
                }
            }
            EndGame(winnerHand);
        }
示例#2
0
 public void EndGame(UserHand winnerHand)
 {
     //player win
     if (MyGame.Winner == MyUser)
     {
         UpdateStack(winnerHand.Bet * 2.5);
         foreach (var item in MyUser.UserHands)
         {
             if (item != winnerHand)
             {
                 UpdateStack(-item.Bet);
             }
         }
         this.dialog = new MessageDialog("Vous avez gagné : " + winnerHand.Bet * 2.5);
     }
     //player loose
     else if (MyGame.Winner == Bank || MyGame.Winner == null)
     {
         Double currentBet = 0;
         foreach (var item in MyUser.UserHands)
         {
             UpdateStack(-item.Bet);
             currentBet += item.Bet;
         }
         UpdateStack(-winnerHand.Bet);
         this.dialog = new MessageDialog("Vous avez perdu : " + -winnerHand.Bet);
     }
     // check assurance
     if (MyGame.Winner == Bank && winnerHand.GetValue() == 21)
     {
         UpdateStack(MyUser.Assurance);
         this.dialog = new MessageDialog("Votre assurance vous rapporte : " + MyUser.Assurance);
     }
     RestartTextBox(this.dialog);
 }
示例#3
0
    private bool checkHandToDraw(UserHand userRef)
    {
        int cardHandCounter = 0;

        bool checkDraw = false;

        for (int i = 0; i < userRef.GetCardHand().Count; i++)
        {
            if (userRef.GetCardHand()[i].GetComponent <CardBehaviour>().GetUniqueCardIDNumber() != pileOfCardsRef.GetCardRef().GetComponent <CardBehaviour>().GetUniqueCardIDNumber() && userRef.GetCardHand()[i].GetComponent <CardBehaviour>().GetUniqueCardIDColor() != pileOfCardsRef.GetCardRef().GetComponent <CardBehaviour>().GetUniqueCardIDColor())
            {
                cardHandCounter++;
            }
        }

        if (cardHandCounter == userRef.GetCardHand().Count&& userRef.GetHandState() != UserHand.HandState.WaitForTurn)
        {
            checkDraw = true;
        }
        else
        {
            checkDraw = false;
        }

        ableToDraw = checkDraw;
        return(ableToDraw);
    }
示例#4
0
 /// <summary>
 /// Sorts the user’s hand.
 /// </summary>
 public static void SortUserHand()
 {
     if (!IsPlaying)
     {
         throw new Exception();
     }
     else
     {
         UserHand.SortHand();
     }
 }
示例#5
0
    public void EndOfTurn(UserHand handOfUser)
    {
        //Debug.Log("ENDOFTURN!");

        if (handOfUser.GetCardHand().Count == 1)
        {
            if (unoCall == false)
            {
                handOfUser.DrawCardInHand(handOfUser.GetCardHand().Count);
                handOfUser.DrawCardInHand(handOfUser.GetCardHand().Count);
            }
        }
    }
示例#6
0
        public bool VerifyExistingUser(string username)
        {
            Cp_user tstUser = UserHand.SelectUser(username);

            if (tstUser == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
示例#7
0
    public void StartOfTurn(UserHand handOfUser)
    {
        //Debug.Log("STARTOFTURN!");

        if (handOfUser.GetCardHand().Count <= 2)
        {
            checkInteractiveButton(true);
        }
        else
        {
            checkInteractiveButton(false);
        }
    }
示例#8
0
 public void GetCard(UserHand userHand)
 {
     if (this.GameTable.Deck.Cards[0].IsCutCard)
     {
         //reinit the deck
         this.Nav.GameTable.Deck.Cards.Clear();
         this.Nav.GameTable.CreateGameDeck();
         this.Nav.GameTable.Deck.Cards.RemoveRange(0, 4);
     }
     else
     {
         // distribute card
         userHand.Cards.Add(this.GameTable.Deck.Cards[0]);
         GameTable.Deck.Cards.RemoveAt(0);
     }
 }
示例#9
0
        /// <summary>
        /// Attempt to play the chosen card for the user according to the rules
        /// of the game.
        /// </summary>
        /// <param name="cardNum"> Card's index in hand</param>
        /// <param name="chosenSuit">Suit if the card is eight</param>
        /// <returns>Return the action according to the rules</returns>
        public static ActionResult UserPlayCard(int cardNum, Suit?chosenSuit = null)
        {
            Card cardPlayed = UserHand.GetCard(cardNum);
            Suit newSuit    = chosenSuit == null?cardPlayed.GetSuit() : (Suit)chosenSuit;

            if (!IsPlaying || !IsUserTurn)
            {
                throw new Exception();
            }

            if (cardPlayed.GetFaceValue() == FaceValue.Eight && chosenSuit == null)
            {
                return(ActionResult.SuitRequired);
            }

            return(PlayCard(UserHand, cardNum, newSuit, ComputerHand));
        }
示例#10
0
        public string Stand()
        {
            int userTotal   = UserHand.HandTotal();
            int dealerTotal = DealerHand.HandTotal();

            if (userTotal <= 21)
            {
                if (Math.Abs(21 - userTotal) < Math.Abs(21 - dealerTotal))
                {
                    return("user");
                }
            }
            if (userTotal <= 21 && userTotal == dealerTotal)
            {
                return("draw");
            }

            return("dealer");
        }
示例#11
0
    // Start is called before the first frame update
    void Start()
    {
        gMRef = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManager>();

        cardRef = GameObject.FindGameObjectWithTag("Card");

        userHandRef = GameObject.FindGameObjectWithTag("User").GetComponentInChildren <UserHand>();

        AIHandRef = GameObject.FindGameObjectWithTag("AI").GetComponentInChildren <UserHand>();

        pileOfCardsRef = GameObject.FindGameObjectWithTag("PileOfCards").GetComponent <PileOfCardsBehaviour>();

        GenerateDeck(deckOfCards);

        pileOfCardsRef.SetDeck(this.gameObject);

        userHandRef.SetDeck(this.gameObject);

        AIHandRef.SetDeck(this.gameObject);
    }
示例#12
0
        /// <summary>
        /// a
        /// </summary>
        /// <returns></returns>
        public static ActionResult UserDrawCard()
        {
            if (IsPlaying == false)
            {
                throw new System.ArgumentException("This game is not start!");
            }
            if (IsUserTurn == false)
            {
                throw new System.ArgumentException("This is not your turn!");
            }


            if (TopDiscard.GetFaceValue() == FaceValue.Eight)
            {
                return(ActionResult.CannotDraw);
            }

            foreach (Card c in UserHand)
            {
                if (c.GetFaceValue() == TopDiscard.GetFaceValue() || c.GetSuit() == TopDiscard.GetSuit())
                {
                    return(ActionResult.CannotDraw);
                }
            }

            if (_drawPile.GetCount() == 0)
            {
                _discardPile.Reverse();
                while (_discardPile.GetCount() > 1)
                {
                    _drawPile.AddCard(_discardPile.DealOneCard());
                }
                return(ActionResult.FlippedDeck);
            }

            Card drawCard = _drawPile.DealOneCard();

            UserHand.AddCard(drawCard);

            if (drawCard.GetFaceValue() == TopDiscard.GetFaceValue() || drawCard.GetSuit() == TopDiscard.GetSuit())
            {
                return(ActionResult.DrewPlayableCard);
            }
            else
            {
                if (UserHand.GetCount() == 13)
                {
                    IsUserTurn = false;
                    if (ComputerHand.GetCount() == 13)
                    {
                        return(ActionResult.DrewAndResetPiles);
                    }
                    else
                    {
                        return(ActionResult.DrewAndNoMovePossible);
                    }
                }
                else
                {
                    return(ActionResult.DrewUnplayableCard);
                }
            }
        }
 /// <summary>
 /// Sorts the cards held by the User
 /// </summary>
 public static void SortUserHand()
 {
     UserHand.SortHand();
 }
示例#14
0
 public void WriteTo(DataBuffer buffer)
 {
     Id.WriteTo(buffer);
     UserHand.WriteTo(buffer);
 }
示例#15
0
        /// <summary>
        /// a
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="chosenSuit"></param>
        /// <returns></returns>
        public static ActionResult UserPlayCard(int cardNum, Suit?chosenSuit = null)
        {
            if (IsPlaying == false)
            {
                throw new System.ArgumentException("This game is not start!");
            }
            if (IsUserTurn == false)
            {
                throw new System.ArgumentException("This is not your turn!");
            }

            Card card = _userhand.GetCard(cardNum);

            if (_discardPile.GetCount() == 1 && TopDiscard.GetFaceValue() == FaceValue.Eight)
            {
                IsUserTurn = false;
                _userhand.RemoveCardAt(cardNum);
                _discardPile.AddCard(card);
                return(ActionResult.ValidPlay);
            }

            if (card.GetFaceValue() == FaceValue.Eight)
            {
                if (!chosenSuit.HasValue)
                {
                    return(ActionResult.SuitRequired);
                }

                IsUserTurn = false;
                _userhand.RemoveCardAt(cardNum);
                _discardPile.AddCard(new Card(chosenSuit, FaceValue.Eight));
                return(ActionResult.ValidPlay);
            }

            if (card.GetFaceValue() == TopDiscard.GetFaceValue() || card.GetSuit() == TopDiscard.GetSuit())
            {
                _userhand.RemoveCardAt(cardNum);
                _discardPile.AddCard(card);

                if (UserHand.GetCount() == 0)
                {
                    IsPlaying = false;
                    return(ActionResult.WinningPlay);
                }

                if (ComputerHand.GetCount() == 13)
                {
                    foreach (Card c in ComputerHand)
                    {
                        if (c.GetFaceValue() == TopDiscard.GetFaceValue() || c.GetSuit() == TopDiscard.GetSuit())
                        {
                            IsUserTurn = false;
                            return(ActionResult.ValidPlay);
                        }
                    }
                    return(ActionResult.ValidPlayAndExtraTurn);
                }

                IsUserTurn = false;
                return(ActionResult.ValidPlay);
            }

            // Invalid Play

            foreach (Card c in UserHand)
            {
                if (c.GetFaceValue() == TopDiscard.GetFaceValue() || c.GetSuit() == TopDiscard.GetSuit() || c.GetFaceValue() == FaceValue.Eight)
                {
                    return(ActionResult.InvalidPlay);
                }
            }

            return(ActionResult.InvalidPlayAndMustDraw);
        }
示例#16
0
        /// <summary>
        /// a
        /// </summary>
        /// <returns></returns>
        public static ActionResult ComputerAction()
        {
            if (IsPlaying == false)
            {
                throw new System.ArgumentException("This game is not start!");
            }
            if (IsUserTurn == true)
            {
                throw new System.ArgumentException("This is not your turn!");
            }


            if (TopDiscard.GetFaceValue() == FaceValue.Eight)
            {
                IsUserTurn = true;
                _discardPile.AddCard(ComputerHand.GetCard(0));
                ComputerHand.RemoveCardAt(0);
                return(ActionResult.ValidPlay);
            }

            for (int j = 0; j < 3; ++j) // j = 0, match face, j = 1, match suit, j = 2, match eight
            {
                for (int i = ComputerHand.GetCount() - 1; i >= 0; --i)
                {
                    Card c = ComputerHand.GetCard(i);
                    if ((c.GetFaceValue() == TopDiscard.GetFaceValue() && j == 0) || (c.GetSuit() == TopDiscard.GetSuit() && j == 1) || (c.GetFaceValue() == FaceValue.Eight && j == 2))
                    {
                        IsUserTurn = false;
                        ComputerHand.RemoveCardAt(i);
                        _discardPile.AddCard(c);

                        if (ComputerHand.GetCount() == 0)
                        {
                            IsPlaying = false;
                            return(ActionResult.WinningPlay);
                        }

                        if (UserHand.GetCount() == 13)
                        {
                            foreach (Card c1 in UserHand)
                            {
                                if (c1.GetFaceValue() == TopDiscard.GetFaceValue() ||
                                    c1.GetSuit() == TopDiscard.GetSuit())
                                {
                                    IsUserTurn = true;
                                    return(ActionResult.ValidPlay);
                                }
                            }

                            IsUserTurn = false;
                            return(ActionResult.ValidPlayAndExtraTurn);
                        }

                        IsUserTurn = true;
                        return(ActionResult.ValidPlay);
                    }
                }
            }

            if (_drawPile.GetCount() == 0)
            {
                _discardPile.Reverse();
                while (_discardPile.GetCount() > 1)
                {
                    _drawPile.AddCard(_discardPile.DealOneCard());
                }
                return(ActionResult.FlippedDeck);
            }

            Card drawCard = _drawPile.DealOneCard();

            ComputerHand.AddCard(drawCard);

            if (drawCard.GetFaceValue() == TopDiscard.GetFaceValue() || drawCard.GetSuit() == TopDiscard.GetSuit())
            {
                return(ActionResult.DrewPlayableCard);
            }
            else
            {
                if (ComputerHand.GetCount() == 13)
                {
                    IsUserTurn = true;
                    if (UserHand.GetCount() == 13)
                    {
                        return(ActionResult.DrewAndResetPiles);
                    }
                    else
                    {
                        return(ActionResult.DrewAndNoMovePossible);
                    }
                }
                else
                {
                    return(ActionResult.DrewUnplayableCard);
                }
            }

            /*
             * if (card.GetFaceValue() == FaceValue.Eight)
             * {
             *  if (!chosenSuit.HasValue)
             *  {
             *      return ActionResult.SuitRequired;
             *  }
             *
             *  IsUserTurn = false;
             *  _userhand.RemoveCardAt(cardNum);
             *  _discardPile.AddCard(new Card(chosenSuit, FaceValue.Eight));
             *  return ActionResult.ValidPlay;
             * }
             *
             * if (card.GetFaceValue() == TopDiscard.GetFaceValue() || card.GetSuit() == TopDiscard.GetSuit())
             * {
             *  _userhand.RemoveCardAt(cardNum);
             *  _discardPile.AddCard(card);
             *
             *  if (UserHand.GetCount() == 0)
             *  {
             *      IsPlaying = false;
             *      return ActionResult.WinningPlay;
             *  }
             *
             *  if (ComputerHand.GetCount() == 13)
             *  {
             *      foreach (Card c in ComputerHand)
             *      {
             *          if (c.GetFaceValue() == TopDiscard.GetFaceValue() || c.GetSuit() == TopDiscard.GetSuit())
             *          {
             *              IsUserTurn = false;
             *              return ActionResult.ValidPlay;
             *          }
             *      }
             *      return ActionResult.ValidPlayAndExtraTurn;
             *  }
             *
             *  IsUserTurn = false;
             *  return ActionResult.ValidPlay;
             * }
             *
             * // Invalid Play
             *
             * foreach (Card c in UserHand)
             * {
             *  if (c.GetFaceValue() == TopDiscard.GetFaceValue() || c.GetSuit() == TopDiscard.GetSuit())
             *  {
             *      return ActionResult.InvalidPlay;
             *  }
             * }
             *
             * return ActionResult.InvalidPlayAndMustDraw;
             */
        }
示例#17
0
 public UserHand SetUserHand(UserHand userHand)
 {
     userCardHand = userHand;
     return(userCardHand);
 }