示例#1
0
 public SuitSetView ToDto(SuitSet suitSet)
 {
     return(new SuitSetView()
     {
         Id = suitSet.Id,
         Name = suitSet.Name,
         Suits = suitSet.Suits.ToDictionary(s => Suits.Find(c => c.Id == s.Key), s => s.Value)
     });
 }
示例#2
0
        private static void Main(string[] args)
        {
            var suitset = SuitSet.From <FrenchSuits>(s => s == FrenchSuits.Hearts || s == FrenchSuits.Diamonds ? Color.Red : Color.Black);
            var rankset = RankSet.From <DurakRanks>(r => (int)r, new[] { DurakRanks.Jack, DurakRanks.Queen, DurakRanks.King });
            var rules   = new Rules();
            var parties = CreateParties(2);
            var game    = new Game(rankset, suitset, rules, parties);
            var dealer  = new Dealer(game.Table, rules, game.Parties);

            game.Init();

            for (var dealNumber = 0; dealNumber < 2; dealNumber++)
            {
                // score incremented between deals

                Log($"deal #{dealNumber}");

                dealer.Deal();
                // TODO case when there is no cards in Stock
                var trump     = Trump.LastCard(game.Table.Stock !.Pile);
                var trickPile = new TrickPile(rules.FollowSuit, trump);
                game.Table.GameField.PlacePile(trickPile);
                var roundNumber = 0;
                do
                {
                    Log($"Begin round #{roundNumber}");
                    game.Round.Begin();

                    // assume single movement per player

                    // every player make single PlayCard move or until allowed

                    for (var moveNumver = 0; moveNumver < 4; moveNumver++)
                    {
                        Log($"move #{moveNumver}, wait move of {game.Round.CurrentPlayer}");
                        ConsoleWriter.PrintHand(game.Round.CurrentPlayer);

                        var movement = GetMovement(game.Round.CurrentPlayer);

                        Log($"{game.Round.CurrentPlayer} plays {ConsoleWriter.GetCardView(movement.Card!)}");
                        game.Move(movement);
                    }

                    Log($"End round #{roundNumber++}");
                    ConsoleWriter.PrintTable(game.Table, Log);

                    game.Round.End();
                }while (!rules.Ending.IsEnded(game));

                Log($"deal #{dealNumber} ended");
            }
        }
示例#3
0
        public int GetMaxPlayers(SuitSet suits, RankSet ranks)
        {
            var pack = MaterializeRequiredPack(suits, ranks);

            return(pack.Size / HandSize);
        }
示例#4
0
 public Pack MaterializeRequiredPack(SuitSet suits, RankSet ranks) => new Pack(suits, ranks, true, DecksCount);