private static void RunBridgeGame() { var set = new BridgeSet(); var game = new BridgeGame(PlayerPosition.East); var players = Enumerable.Range(0, 4).Select(n => { var position = (PlayerPosition)n; return new Player(position, set.Cards[position]); }).ToArray(); var table = new ConsoleBridgeTable(); table.ShowTable(set); Console.WriteLine(); Console.WriteLine("Game Started:"); Console.WriteLine(string.Empty.PadLeft(Console.BufferWidth, '*')); while (!game.Finished) { Console.Write(game.TurnStarter.ToString()[0] + ": "); for (int i = 0; i < 4; i++) { var player = players.First(p => p.Position == game.Next); var card = player.Play(game); game.RecordOutCard(card); table.ShowCard(card); } Console.WriteLine(); Console.ReadLine(); } }
public Card Play(BridgeGame game) { if (cards.Count < 1) throw new InvalidOperationException(); var rnd = new Random(); Card c; if (game.FirstTurnCard == null) { c = cards[rnd.Next(cards.Count)]; } else { var type = game.FirstTurnCard.Type; if (!groupedCards.ContainsKey(type) || groupedCards[type].Count < 1) //No cards of the type remaining { c = cards[rnd.Next(cards.Count)]; } else { c = groupedCards[type][rnd.Next(groupedCards[type].Count)]; } } groupedCards[c.Type].Remove(c); cards.Remove(c); return c; }