示例#1
0
        protected ICard CallUp(Prompt prompt, IBlind blind)
        {
            var callUp = new List <ICard> {
                new Card.Card(CardID.Jack, CardPower.JackHeart, Suit.Hearts),
                new Card.Card(CardID.Jack, CardPower.JackSpade, Suit.Spades),
                new Card.Card(CardID.Jack, CardPower.JackClub, Suit.Clubs),
                new Card.Card(CardID.Queen, CardPower.QueenDiamond, Suit.Diamond),
                new Card.Card(CardID.Queen, CardPower.QueenHeart, Suit.Hearts),
                new Card.Card(CardID.Queen, CardPower.QueenSpade, Suit.Spades),
                new Card.Card(CardID.Queen, CardPower.QueenClub, Suit.Clubs)
            };

            foreach (var card in callUp)
            {
                if (Hand.Cards.Contains(card) || blind.BlindCards.Contains(card))
                {
                    continue;
                }
                prompt(PromptType.CalledUp, new Dictionary <PromptData, object>
                {
                    { PromptData.Card, card }
                });
                return(card);
            }
            return(null);
        }
示例#2
0
 public void AssignBlind(IBlind blind)
 {
     this.Blind = blind;
     foreach (var component in _components)
     {
         component.Color = Color.White;
     }
 }
示例#3
0
        public override ICard Pick(Prompt prompt, IBlind blind, bool forced, ICard partnerCard)
        {
            Hand.AddCard(blind.BlindCards[0]);
            Hand.AddCard(blind.BlindCards[1]);
            Hand.Cards.Sort((one, two) => two.Value - one.Value);
            int added = 0;
            int i     = 0;

            while (i < Hand.Cards.Count)
            {
                if (added == 2)
                {
                    break;
                }
                if (Hand.Cards[i].IsTrump())
                {
                    ++i;
                    continue;
                }
                blind.BlindCards[added++] = Hand.GetCard(i);
            }
            i = 0;
            while (added < 2 && i < Hand.Cards.Count)
            {
                if (Hand.Cards[i].ID == CardID.Queen || Hand.Cards[i].ID == CardID.Jack)
                {
                    ++i;
                    continue;
                }
                blind.BlindCards[added++] = Hand.GetCard(i);
            }
            if (added < 2)
            {
                Hand.Cards.Sort();
                while (added < 2)
                {
                    blind.BlindCards[added++] = Hand.Cards[0];
                }
            }
            if (forced && (Hand.Cards.Contains(partnerCard) || blind.BlindCards.Contains(partnerCard)))
            {
                return(CallUp(prompt, blind));
            }

            return(partnerCard);
        }
示例#4
0
        public override ICard PlayCard(Prompt prompt, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard)
        {
            List <ICard> cards = Hand.GetPlayableCards(rounds.Last().Trick.LeadingCard());

            cards.Sort();
            cards.Reverse();
            Hand.RemoveCard(cards[0]);
            prompt(PromptType.BotPlayCard, new Dictionary <PromptData, object> {
                { PromptData.Player, this },
                { PromptData.Card, cards[0] },
                { PromptData.Trick, rounds.Last().Trick }
            });
            return(cards[0]);
        }
示例#5
0
 public IPlayer Start(Prompt prompt, List <IPlayer> players, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard)
 {
     foreach (IPlayer player in players)
     {
         CurrentPlayer = player;
         Trick.AddCardAndPlayer(player, player.PlayCard(prompt, rounds, picker, blind, partnerCard));
     }
     return(Trick.TheWinnerPlayer());
 }
示例#6
0
        private string Prompt(PromptType prompt_type, Dictionary <PromptData, object> data)
        {
            string  prompt = "";
            int     index;
            ITrick  trick  = null;
            IPlayer player = null;
            IPlayer picker = null;
            IBlind  blind  = null;

            switch (prompt_type)
            {
            case PromptType.Pick:
                Console.Clear();
                prompt = "Your cards:\n";
                player = (IPlayer)data[PromptData.Player];
                foreach (ICard card in player.Hand)
                {
                    prompt += string.Format("{0}\n", card);
                }
                ;
                prompt += "\nDo you want to pick? (yes/no)\n";
                break;

            case PromptType.PickBlind:
                Console.Clear();
                prompt = "Blind cards:\n";
                blind  = (IBlind)data[PromptData.Blind];
                index  = 0;
                foreach (ICard card in blind)
                {
                    prompt += string.Format("{0}) {1}\n", index++, card);
                }
                ;
                prompt += "\nYour Cards:\n";
                index   = 0;
                player  = (IPlayer)data[PromptData.Player];
                foreach (ICard card in player.Hand)
                {
                    prompt += string.Format("{0}) {1}\n", index++, card);
                }
                ;
                break;

            case PromptType.PlayCard:
                Console.Clear();
                picker  = (IPlayer)data[PromptData.Picker];
                prompt  = string.Format("Picker: {0}\n", picker);
                prompt += "Cards Played\n";
                trick   = (ITrick)data[PromptData.Trick];
                foreach ((IPlayer, ICard)playerCard in trick)
                {
                    prompt += string.Format("{0}\n", playerCard);
                }
                ;
                prompt += "\nYour playable cards:\n";
                List <ICard> cards = (List <ICard>)data[PromptData.Cards];
                index = 0;
                cards.ForEach(card =>
                {
                    prompt += string.Format("{0}) {1}\n", index++, card);
                });
                break;

            case PromptType.RoundOver:
                trick   = ((IRound)data[PromptData.Round]).Trick;
                trick   = ((IRound)data[PromptData.Round]).Trick;
                prompt  = string.Format("{0} won the trick for {1} points\n", trick.TheWinnerPlayer(), trick.TrickValue());
                prompt += "All cards played:\n";
                foreach ((IPlayer, ICard)playerCard in trick)
                {
                    prompt += string.Format("{0}\n", playerCard);
                }
                ;
                break;

            case PromptType.GameOver:
                var game = (IGame)data[PromptData.Game];
                prompt  = string.Format("Picker {0} got {1} points\n", game.Picker, game.GetPickerScore());
                prompt += "Scoresheet:\n";
                table.Players.ForEach(playerIt =>
                {
                    prompt += string.Format("{0}: {1}  ", playerIt, table.ScrSheet.Scores[playerIt][table.Games.Count - 1]);
                });
                prompt += "\n";
                break;

            case PromptType.TableOver:
                prompt = "Totals:\n";
                table.Players.ForEach(playerIt =>
                {
                    prompt += string.Format("{0}: {1}  ", playerIt, table.ScrSheet.Total()[playerIt]);
                });
                break;

            case PromptType.CallUp:
                prompt = "Would you like to call up? (yes/no): ";
                break;

            case PromptType.CalledUp:
                prompt = string.Format("\nPicker called up to {0}\n", (ICard)data[PromptData.Card]);
                break;

            default:
                Console.Clear();
                return("");
            }
            Console.WriteLine(prompt);
            return(Console.ReadLine());
        }
示例#7
0
        public override ICard Pick(Prompt prompt, IBlind blind, bool forced, ICard partnerCard)
        {
            while (true)
            {
                var answer = prompt(PromptType.PickBlind, new Dictionary <PromptData, object>
                {
                    { PromptData.Player, this },
                    { PromptData.Blind, blind }
                });
                if (answer == "")
                {
                    continue;
                }
                if (answer == "done")
                {
                    break;
                }

                var split = answer.Split(' ');
                int blindCard;
                int handCard;
                try
                {
                    blindCard = int.Parse(split[0]);
                    handCard  = int.Parse(split[1]);
                }
                catch (System.FormatException)
                {
                    continue;
                }
                catch (System.IndexOutOfRangeException)
                {
                    continue;
                }
                Hand.Cards[handCard] = blind.SwapCard(blindCard, Hand.Cards[handCard]);
            }

            if (!forced || (!Hand.Cards.Contains(partnerCard) && !blind.BlindCards.Contains(partnerCard)))
            {
                return(partnerCard);
            }
            {
                var answer = "";
                while (true)
                {
                    answer = prompt(PromptType.CallUp, new Dictionary <PromptData, object>
                    {
                        { PromptData.Player, this }
                    });
                    if (answer != "")
                    {
                        break;
                    }
                }

                if (answer.ToLower() == "yes" || answer.ToLower() == "y")
                {
                    return(CallUp(prompt, blind));
                }
            }
            return(partnerCard);
        }
示例#8
0
        public override ICard PlayCard(Prompt prompt, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard)
        {
            ICard card         = null;
            var   currentTrick = rounds.Last().Trick;

            while (true)
            {
                var cards  = Hand.GetPlayableCards(currentTrick.LeadingCard());
                var answer = prompt(PromptType.PlayCard, new Dictionary <PromptData, object>
                {
                    { PromptData.Player, this },
                    { PromptData.Picker, picker },
                    { PromptData.Trick, currentTrick },
                    { PromptData.Cards, cards }
                });
                if (answer == "")
                {
                    continue;
                }

                try
                {
                    card = cards[int.Parse(answer)];
                    break;
                }
                catch (System.FormatException)
                {
                }
            }

            Hand.RemoveCard(card);
            return(card);
        }
示例#9
0
        public override ICard PlayCard(Prompt prompt, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard)
        {
            var trick = rounds.Last().Trick;
            var cards = Hand.GetPlayableCards(trick.LeadingCard());

            cards.Sort();
            cards.Reverse();
            ICard playThis;

            if (!_isPartner && picker != this)
            {
                _isPartner = Hand.Contains(partnerCard);
            }
            if (!trick.Any())
            {
                if (picker == this)
                {
                    playThis = cards[0];
                }
                else if (_isPartner)
                {
                    playThis = cards[0];
                }
                else
                {
                    playThis = cards.Aggregate((acc, next) => acc.IsTrump() && !next.IsTrump() ? next : acc);
                }
            }
            else
            {
                var winCard         = trick.TheWinnerCard();
                var isPickerWinning = trick.TheWinnerPlayer() == picker;
                if (isPickerWinning && _isPartner)
                {
                    playThis = cards.Aggregate((acc, next) => acc.Value >= next.Value ? acc : next);
                }
                else if (!isPickerWinning && _isPartner)
                {
                    playThis = cards[0];
                }
                else if (isPickerWinning && !_isPartner)
                {
                    if (cards[0].Power > winCard.Power)
                    {
                        playThis = cards[0];
                    }
                    else
                    {
                        cards.Sort();
                        playThis = cards.Aggregate((acc, next) => acc.Value <= next.Value ? acc : next);
                    }
                }
                else
                {
                    playThis = cards[0].Power > winCard.Power ? cards[0] : cards.Last();
                }
            }
            Hand.RemoveCard(playThis);
            prompt(PromptType.BotPlayCard, new Dictionary <PromptData, object> {
                { PromptData.Player, this },
                { PromptData.Card, playThis },
                { PromptData.Trick, rounds.Last().Trick }
            });
            return(playThis);
        }
示例#10
0
 public abstract ICard PlayCard(Prompt prompt, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard);
示例#11
0
 public abstract ICard Pick(Prompt prompt, IBlind blind, bool forced, ICard partnerCard);