示例#1
0
        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);
        }
示例#2
0
        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}");
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
 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();
     }
 }
示例#6
0
        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();
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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));
            }
        }