Exemplo n.º 1
0
        private int ValueCard(Card card, CardSuite trump, CardSuite first)
        {
            int value = (int)card.Figure;

            if (value == 14)
            {
                value++;
            }
            if (value == 10)
            {
                value = 14;
            }
            if (card.Suite == trump)
            {
                value += 20;
            }
            if (value == 29)
            {
                value = 36;
            }
            if (value == 31)
            {
                value = 37;
            }
            if (card.Suite != trump && card.Suite != first)
            {
                value -= 20;
            }
            return(value);
        }
Exemplo n.º 2
0
 public RoundContext(int roundNum, CardSuite trumpSuite)
 {
     RoundNum   = roundNum;
     TrumpSuite = trumpSuite;
     Tricks     = new List <TrickContext>();
     Bids       = new Dictionary <Player, int>();
     Results    = new Dictionary <Player, int>();
 }
Exemplo n.º 3
0
 public GraphicCard(CardSuite suite, CardFigure figure) : base(suite, figure)
 {
     Pb = new CardPictureBox(this)
     {
         SizeMode = PictureBoxSizeMode.Zoom,
         Image    = IsOpened ? images[this] : faceDownImage
     };
 }
Exemplo n.º 4
0
        private void PlaySingleRound(int roundNum)
        {
            _frontend.DisplayStartRound(roundNum);

            // shuffle, deal, and initialize round context
            _curDeck.Shuffle();
            _frontend.DisplayDealInProgess(3 /*message duration seconds*/);
            DealDeck(roundNum);
            Card      trumpCard  = _curDeck.Cards.Count > 0 ? _curDeck.PopTop() : null;
            CardSuite trumpSuite = trumpCard != null ? trumpCard.Suite : CardSuite.SPECIAL;

            _gameContext.Rounds.Add(new RoundContext(roundNum, trumpSuite));
            var curRound = _gameContext.CurRound;

            curRound.Dealer = roundNum == 1
                ? _players[0]
                : _players[(_players.IndexOf(_gameContext.PrevRound.Dealer) + 1) % _players.Count];
            _players.ForEach(player => curRound.Results[player] = 0);

            _frontend.DisplayDealDone(curRound.Dealer, trumpCard);

            // bid on current round
            _players.ForEach(player => curRound.Bids[player] = player.MakeBid(curRound));
            int totalBids = curRound.Bids.Aggregate(0, (accumulator, bidPair) => accumulator + bidPair.Value);

            _frontend.DisplayBidOutcome(roundNum, totalBids);

            // execute tricks and record results
            for (int trickNum = 1; trickNum <= roundNum; trickNum++)
            {
                PlaySingleTrick(trickNum);
                Player winner = curRound.CurTrick.Winner;
                if (curRound.Results.ContainsKey(winner))
                {
                    curRound.Results[winner]++;
                }
                else
                {
                    curRound.Results[winner] = 1;
                }
            }

            // resolve round scores
            _players.ForEach(player =>
            {
                int diff = Math.Abs(curRound.Bids[player] - curRound.Results[player]);
                if (diff == 0)
                {
                    _gameContext.PlayerScores[player] += (BASELINE_SCORE + curRound.Bids[player] * HIT_SCORE);
                }
                else
                {
                    _gameContext.PlayerScores[player] += (diff * MISS_SCORE);
                }
            });

            _frontend.DisplayRoundScores(_gameContext);
        }
Exemplo n.º 5
0
 public Card(CardSuite suite, CardFace face, bool isBlackjack = false)
 {
     Suite = suite;
     Face  = face;
     if (isBlackjack)
     {
         HandleBlackjackValue();
     }
 }
Exemplo n.º 6
0
 public Card(CardSuite suite, CardNumber number)
 {
     CardSuite  = suite;
     CardNumber = number;
     if ((int)CardNumber == 11 || (int)CardNumber == 12 || (int)CardNumber == 13)
     {
         CardValue = 10;
     }
     else if ((int)CardNumber == 1)
     {
         CardValue = 11;
     }
     else
     {
         CardValue = (int)CardNumber;
     }
 }
Exemplo n.º 7
0
        public static Card CalcWinningCard(List <Card> cardsPlayed, CardSuite trumpSuite, CardSuite?leadingSuite)
        {
            Card winningCard = null;

            foreach (var curCard in cardsPlayed)
            {
                if (curCard.Value == CardValue.WIZARD)
                {
                    winningCard = curCard;
                    break;
                }
                else if (curCard.Value == CardValue.JESTER)
                {
                    continue;
                }

                if (winningCard == null)
                {
                    winningCard = curCard;
                }
                else if (curCard.Suite == trumpSuite)
                {
                    if (winningCard.Suite == trumpSuite)
                    {
                        if (curCard.Value > winningCard.Value)
                        {
                            winningCard = curCard;
                        }
                    }
                    else
                    {
                        // if winning suite is not trump suite, current card is now winner
                        winningCard = curCard;
                    }
                }
                else if (curCard.Suite == leadingSuite)
                {
                    if (winningCard.Suite == leadingSuite && curCard.Value > winningCard.Value)
                    {
                        winningCard = curCard;
                    }
                }
            }
            return(winningCard);
        }
Exemplo n.º 8
0
 public override Card GetCard(CardFigure figure, CardSuite suite)
 {
     return(new GraphicCard(suite, figure));
 }
Exemplo n.º 9
0
 public Card(CardSuite cardSuite, int cardValue)
 {
     CardSuite = cardSuite;
     CardValue = cardValue;
 }
Exemplo n.º 10
0
 /// <summary>
 /// Set a card face
 /// </summary>
 /// <param name="cf"></param>
 /// <param name="value"></param>
 private void SetCardFace(CardSuite cf, int value)
 {
     var cardPath = CardObject.GetCardFacePath();
     LoadCardGraphicFromXAML(cardPath);
 }
Exemplo n.º 11
0
 public Card(CardValue value, CardSuite suite)
 {
     v = value;
     s = suite;
 }
Exemplo n.º 12
0
 public DebertzRoundCompairer(CardSuite trump, CardSuite first)
 {
     Trump = trump;
     First = first;
 }
Exemplo n.º 13
0
        // simulates playing each card in _hand against an in-progress trick, plays random cards to finish and score the trick
        // returns a dictionary of cards in _hand to number of wins
        // @param hiddenCards refers to the cards in the deck that could potentialy be played by other players
        private Dictionary <Card, int> SimulateTrick(TrickContext trick, List <Card> hiddenCards, CardSuite trumpSuite, int playerCount, int simCount)
        {
            var playableCards = CardUtils.GetPlayableCards(_hand, trick.LeadingSuite);
            Dictionary <Card, int> winsByCard = playableCards.Aggregate(new Dictionary <Card, int>(), (acc, card) => { acc[card] = 0; return(acc); });

            for (int i = 0; i < simCount; i++)
            {
                foreach (var card in playableCards)
                {
                    var curSimRemainingCards = new List <Card>(hiddenCards);
                    var simPlayedCards       = new List <Card>(trick.CardsPlayed);
                    simPlayedCards.Add(card);

                    // each remaining player plays a random card from a randomly generated hand
                    for (int j = simPlayedCards.Count(); j < playerCount; j++)
                    {
                        // rand hand selected from the remaining cards specific to this simulation
                        var randHand = takeRandomCardsFromList(curSimRemainingCards, _hand.Count());
                        var playableCardsFromRandHand = CardUtils.GetPlayableCards(randHand, trick.LeadingSuite);
                        simPlayedCards.Add(playableCardsFromRandHand[_rand.Next() % playableCardsFromRandHand.Count()]);
                    }
                    var winningCard = CardUtils.CalcWinningCard(simPlayedCards, trumpSuite, trick.LeadingSuite);

                    if (card.Equals(winningCard))
                    {
                        winsByCard[card]++;
                    }
                }
            }

            return(winsByCard);
            //Dictionary<Card, double> winPercentagesByCard = new Dictionary<Card, double>();
            //foreach(var winCardPair in winsByCard)
            //{
            //    double winPctg = winCardPair.Value * 1.0 / SIMULATION_COUNT;
            //    winPercentagesByCard[winCardPair.Key] = winPctg;
            //}
            //return winPercentagesByCard;
        }
Exemplo n.º 14
0
 public Card(CardSuite suite, CardValue value)
 {
     this.suite = suite;
     this.value = value;
 }
Exemplo n.º 15
0
 public Card(Id id, CardNumber number, CardSuite suite)
 {
     Id     = id;
     Number = number;
     Suite  = suite;
 }
Exemplo n.º 16
0
 public Card(CardSuite suit, int value)
 {
     this.suit  = suit;
     this.value = value;
 }
Exemplo n.º 17
0
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            string    suite         = null;
            CardSuite dictionaryKey = CardSuite.NO_SUITE;

            for (int suiteDecider = 0; suiteDecider < 4; suiteDecider++)
            {
                switch (suiteDecider)
                {
                case 0:
                    suite         = "h";
                    dictionaryKey = CardSuite.HEARTS;
                    break;

                case 1:
                    suite         = "d";
                    dictionaryKey = CardSuite.DIAMONDS;
                    break;

                case 2:
                    suite         = "c";
                    dictionaryKey = CardSuite.CLUBS;
                    break;

                case 3:
                    suite         = "s";
                    dictionaryKey = CardSuite.SPADES;
                    break;
                }
                List <Card> temp = new List <Card>();
                for (int i = 0; i < 13; i++)
                {
                    string cardGetter = (string)suite + (i + 1);
                    temp.Add(new Card(Content.Load <Texture2D>(@"cards/" + cardGetter), Content.Load <Texture2D>("cardBack"), true, dictionaryKey, i + 1));
                }
                for (int i = 0; i < 4; i++)
                {
                    winSlots[i] = new WinSlot(new Point(385 + 120 * i, 15), Content.Load <Texture2D>("slotHighlight"));
                }
                font = Content.Load <SpriteFont>("Font");
                suiteDictionary.Add(dictionaryKey, temp);
                deck = new Deck(25, 10, Content.Load <Texture2D>("cardBack"), Content.Load <Texture2D>("slotHighlight"));
            }

            //make all the slot objects
            Random random = new Random();

            for (int i = 0; i < poolSlots.Length; i++)
            {
                poolSlots[i] = new Slot(25 + 120 * i, 140, Content.Load <Texture2D>(@"slotHighlight"));
                for (int c = 0; c < i + 1; c++)
                {
                    int cardNum;
                    switch (random.Next(4))
                    {
                    case 0:
                        if (suiteDictionary[CardSuite.CLUBS].Count == 0)
                        {
                            c--;
                        }
                        else
                        {
                            cardNum = random.Next(suiteDictionary[CardSuite.CLUBS].Count - 1);
                            poolSlots[i].addCard(suiteDictionary[CardSuite.CLUBS][cardNum]);
                            suiteDictionary[CardSuite.CLUBS][cardNum].cardsSlot = poolSlots[i];
                            suiteDictionary[CardSuite.CLUBS].RemoveAt(cardNum);
                        }
                        break;

                    case 1:
                        if (suiteDictionary[CardSuite.DIAMONDS].Count == 0)
                        {
                            c--;
                        }
                        else
                        {
                            cardNum = random.Next(suiteDictionary[CardSuite.DIAMONDS].Count - 1);
                            poolSlots[i].addCard(suiteDictionary[CardSuite.DIAMONDS][cardNum]);
                            suiteDictionary[CardSuite.DIAMONDS][cardNum].cardsSlot = poolSlots[i];
                            suiteDictionary[CardSuite.DIAMONDS].RemoveAt(cardNum);
                        }
                        break;

                    case 2:
                        if (suiteDictionary[CardSuite.HEARTS].Count == 0)
                        {
                            c--;
                        }
                        else
                        {
                            cardNum = random.Next(suiteDictionary[CardSuite.HEARTS].Count - 1);
                            poolSlots[i].addCard(suiteDictionary[CardSuite.HEARTS][cardNum]);
                            suiteDictionary[CardSuite.HEARTS][cardNum].cardsSlot = poolSlots[i];
                            suiteDictionary[CardSuite.HEARTS].RemoveAt(cardNum);
                        }
                        break;

                    case 3:
                        if (suiteDictionary[CardSuite.SPADES].Count == 0)
                        {
                            c--;
                        }
                        else
                        {
                            cardNum = random.Next(suiteDictionary[CardSuite.SPADES].Count - 1);
                            poolSlots[i].addCard(suiteDictionary[CardSuite.SPADES][cardNum]);
                            suiteDictionary[CardSuite.SPADES][cardNum].cardsSlot = poolSlots[i];
                            suiteDictionary[CardSuite.SPADES].RemoveAt(cardNum);
                        }
                        break;
                    }
                }
            }
            List <Card> clubs    = suiteDictionary[CardSuite.CLUBS];
            List <Card> spades   = suiteDictionary[CardSuite.SPADES];
            List <Card> diamonds = suiteDictionary[CardSuite.DIAMONDS];
            List <Card> hearts   = suiteDictionary[CardSuite.HEARTS];

            while (deck.cardsInDeck.Count != 24)
            {
                int randomCardNumber;
                switch (random.Next(4))
                {
                case 0:
                    if (clubs.Count != 0)
                    {
                        randomCardNumber = random.Next(clubs.Count - 1);
                        deck.cardsInDeck.Add(clubs[randomCardNumber]);
                        clubs.RemoveAt(randomCardNumber);
                    }
                    break;

                case 1:
                    if (diamonds.Count != 0)
                    {
                        randomCardNumber = random.Next(diamonds.Count - 1);
                        deck.cardsInDeck.Add(diamonds[randomCardNumber]);
                        diamonds.RemoveAt(randomCardNumber);
                    }
                    break;

                case 2:
                    if (hearts.Count != 0)
                    {
                        randomCardNumber = random.Next(hearts.Count - 1);
                        deck.cardsInDeck.Add(hearts[randomCardNumber]);
                        hearts.RemoveAt(randomCardNumber);
                    }
                    break;

                case 3:
                    if (spades.Count != 0)
                    {
                        randomCardNumber = random.Next(spades.Count - 1);
                        deck.cardsInDeck.Add(spades[randomCardNumber]);
                        spades.RemoveAt(randomCardNumber);
                    }
                    break;
                }
            }
        }
Exemplo n.º 18
0
 public Card(CardValue value, CardSuite suite)
 {
     Value = value;
     Suite = suite;
 }
Exemplo n.º 19
0
 public Card(int value, int suite)
 {
     v = (CardValue)value;
     s = (CardSuite)suite;
 }
 public Card(CardNumber number, CardSuite suite)
 {
     this.Suite    = suite;
     this.Number   = number;
     this.FacingUp = true;
 }
Exemplo n.º 21
0
 public virtual Card GetCard(CardFigure figure, CardSuite suite)
 {
     return(new Card(suite, figure));
 }
Exemplo n.º 22
0
 public Card(int cardName, int cardSuite)
 {
     this.cardName  = (CardName)cardName;
     this.cardSuite = (CardSuite)cardSuite;
 }
Exemplo n.º 23
0
 public Card(CardSuite suite)
 {
     Suite = suite;
 }
Exemplo n.º 24
0
 public Card(int value, int suite)
 {
     v = (CardValue)value;
     s = (CardSuite)suite;
 }
Exemplo n.º 25
0
 public Card(CardValue value, CardSuite suite)
 {
     v = value;
     s = suite;
 }
Exemplo n.º 26
0
 public Card(CardSuite suite, CardFace face)
 {
     this.suite = suite;
     this.face  = face;
 }
Exemplo n.º 27
0
 public Card(CardSuite cardSuite, CardValue cardValue)
 {
     this.CardValue = cardValue;
     this.CardSuite = cardSuite;
 }
Exemplo n.º 28
0
 public PlayingCard(CardFaceValue faceValue, CardSuite suite)
 {
     FaceValue = faceValue;
     Suite     = suite;
 }
Exemplo n.º 29
0
 public GraphicCard(CardPictureBox pb, CardSuite suite, CardFigure figure) : base(suite, figure)
 {
     Pb          = pb;
     Pb.SizeMode = PictureBoxSizeMode.Zoom;
     Pb.Image    = IsOpened ? images[this] : faceDownImage;
 }
Exemplo n.º 30
0
 public Card(CardSuite suite, CardFigure figure)
 {
     Suite    = suite;
     Figure   = figure;
     IsOpened = false;
 }
Exemplo n.º 31
0
 public Card(CardSuite suite, int value)
 {
     CardSuite = suite;
     CardValue = value;
 }
Exemplo n.º 32
0
 public Card(CardSuite suite, CardRank rank)
 {
     Suite = suite;
     Rank  = rank;
 }
Exemplo n.º 33
0
 protected bool validateSuite(CardSuite suite)
 {
     return(Enum.IsDefined(typeof(CardSuite), suite));
 }