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); }
public void AssignBlind(IBlind blind) { this.Blind = blind; foreach (var component in _components) { component.Color = Color.White; } }
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); }
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]); }
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()); }
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()); }
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); }
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); }
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); }
public abstract ICard PlayCard(Prompt prompt, List <IRound> rounds, IPlayer picker, IBlind blind, ICard partnerCard);
public abstract ICard Pick(Prompt prompt, IBlind blind, bool forced, ICard partnerCard);