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) }); }
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"); } }
public int GetMaxPlayers(SuitSet suits, RankSet ranks) { var pack = MaterializeRequiredPack(suits, ranks); return(pack.Size / HandSize); }
public Pack MaterializeRequiredPack(SuitSet suits, RankSet ranks) => new Pack(suits, ranks, true, DecksCount);