private static Card?GetCard(IClueGame game, string category = "") { var selectedNumber = 0; if (category == "") { var categories = game.CardsByCategory.Keys; selectedNumber = ShowMenu("Select Category", "Pick", game.CardsByCategory.Keys.ToList(), true); if (selectedNumber != 0) { category = game.CardsByCategory.Keys.ToList()[selectedNumber - 1]; } else { return(null); } } IList <string> cardNames = new List <string>(); foreach (var card in game.CardsByCategory[category].ToList()) { cardNames.Add(card.ToString()); } selectedNumber = ShowMenu($"Select Card ({category})", "Pick", cardNames, true); if (selectedNumber != 0) { return(game.CardsByCategory[category].ToList()[selectedNumber - 1]); } // else return(null); }
private static void ShowPlayers(IClueGame game) { // get sorted player list var sortedPlayers = new List <string>(new SortedSet <string>(game.AllPlayers)); var num = 0; foreach (var player in sortedPlayers) { Console.WriteLine($"{++num}) {player}"); } }
private static void ShowPlayersPossibilities(IClueGame game, ClueSolver solver) { Console.WriteLine(); Console.WriteLine("BY PLAYER"); Console.WriteLine("--------------------"); Console.WriteLine(); foreach (var player in game.AllPlayers) { ShowPlayerPossibilities(solver, player); } }
private static string GetPlayer(IClueGame game) { var selectedNumber = ShowMenu("Select Player", "Pick", game.AllPlayers.ToList(), true); if (selectedNumber != 0) { return(game.AllPlayers.ToList()[selectedNumber - 1]); } // else return(null); }
private static void ShowHands(IClueGame game) { Console.WriteLine(); Console.WriteLine("PLAYER HANDS"); Console.WriteLine("--------------------"); Console.WriteLine(); foreach (var player in game.AllPlayers) { Console.WriteLine($"{player}"); Console.WriteLine(string.Join(", ", game.PlayerHand(player))); Console.WriteLine(); } }
private static void ShowSuggestionHistory(IClueGame game) { var longestNameLength = 0; foreach (var player in game.AllPlayers) { longestNameLength = player.Length > longestNameLength ? player.Length : longestNameLength; } Console.WriteLine("Suggestion History"); Console.WriteLine("------------------"); foreach (var suggestion in game.Suggestions) { Console.WriteLine($" {suggestion.Suggester.PadRight(longestNameLength)}: {string.Join(", ", suggestion.SuggestedCards)}"); } Console.WriteLine(); }
private static IEnumerable <string> GetPlayerList(IClueGame game) { ISet <string> players = new SortedSet <string>(); IList <string> availPlayers = game.AllPlayers.ToList(); var selectedNumber = -1; do { selectedNumber = ShowMenu("Select Player", "Pick", availPlayers, true); if (selectedNumber != 0) { players.Add(availPlayers[selectedNumber - 1]); availPlayers.Remove(availPlayers[selectedNumber - 1]); } } while (selectedNumber != 0); return(players); }
private static IEnumerable <Card> GetOneOfEachCard(IClueGame game) { ISet <Card> cards = new HashSet <Card>(); var categories = game.CardsByCategory.Keys; foreach (var category in categories) { var card = GetCard(game, category); if (card.HasValue) { cards.Add(card.Value); } else { return(new Card[] { }); } } return(cards); }
public ClueSolver(IClueGame game) { Game = game; var cards = Game.AllCards; CardConstraints = new Dictionary <Card, Constraint <Card, string> >(); // setup cards var allCards = new Dictionary <string, ISet <Card> >(); foreach (Card card in cards) { if (!allCards.ContainsKey(card.Category)) { allCards.Add(card.Category, new SortedSet <Card>()); } allCards[card.Category].Add(card); CardConstraints[card] = new Constraint <Card, string>(card, game.AllPlayers); CardConstraints[card].Solved += CardConstraint_Solved; } Cards = new Dictionary <string, ISet <Card> >(allCards); // setup each players collection of constraints PlayerConstraints = new Dictionary <string, ISet <Constraint <string, Card> > >(); foreach (var player in game.AllPlayers) { PlayerConstraints[player] = new HashSet <Constraint <string, Card> >(); } // setup envelope constraints foreach (var category in Cards.Keys) { // add a constraint of having at least one of each category PlayerConstraints[Game.EnvelopePlayer].Add(new Constraint <string, Card>(Game.EnvelopePlayer, Cards[category], 1)); } }