Ejemplo n.º 1
0
        public int[] PlayRound()
        {
            var cards = CardCollection.AllCards();

            //Deal cards
            var playerCards = Dealer.Deal(CardCollection.AllCards(), PlayerCount);
            var minHandSize = playerCards.Min(hand => hand.Cards().Count());
            var seats       = Enumerable.Range(0, PlayerCount).Select(i =>
            {
                return(new Seat(i, _players[i], playerCards[i]));
            }).ToArray();

            InitialMove[] initialMoves = DoInitialMoves(playerCards);
            GiveInitialCards(playerCards, initialMoves);

            var         scoreCount     = new ScoreCount(PlayerCount);
            TrickResult previousWinner = null;

            for (int i = 0; i < minHandSize - 1; i++)
            {
                previousWinner = new TrickEngine(seats).PlayTrick(previousWinner);
                scoreCount.Add(previousWinner.Winner.Index, previousWinner.WinnerPrice());
            }

            var bottleTax = initialMoves.Sum(move => move.ToBottle.Score);
            var scores    = Scores(scoreCount, previousWinner.BottleOwner.Index, bottleTax);

            foreach (var player in _players)
            {
                player.RoundEnded(scores);
            }

            return(scores);
        }
Ejemplo n.º 2
0
    public TrickResult PlayTrick(TrickResult previousResult)
    {
        var bottlePrice = previousResult != null ? previousResult.BottlePrice : 19;
        var bottleOwner = previousResult?.BottleOwner;
        // Create player order
        var order = Enumerable.Range(0, PlayerCount)
                    .Select(index =>
        {
            var startIndex = previousResult != null ? previousResult.Winner.Index : 0;

            var current = (startIndex + index) % PlayerCount;
            return(_seats[current]);
        });

        List <Play> playedCards = AskMoves();

        // Decide winner
        Play winner = GetWinner(playedCards, bottlePrice);

        if (winner.Card.Number < bottlePrice)
        {
            bottleOwner = _seats[winner.Index];
            bottlePrice = winner.Card.Number;
        }

        var cardsBySeat = playedCards.OrderBy(play => play.Index).Select(play => play.Card);
        var result      = new Core.External.TrickResult(bottlePrice, cardsBySeat.ToArray());

        foreach (var seat in _seats)
        {
            seat.Player.TrickFinished(result);
        }
        return(new TrickResult(bottlePrice, _seats[winner.Index], bottleOwner, cardsBySeat.ToArray()));
    }
Ejemplo n.º 3
0
 public object Any(SolveGame solveGame)
 {
     var response = new SolveGameResponse();
     var dds = new DdsConnect();
     var trickResult = new TrickResult();
     GameReplayer.Replay(solveGame.PBN,
                      (game, player, card) =>
                      {
                          var result = dds.SolveBoard(game);
                          MapCards(result, (suit, rank, score) =>
                          {
                              trickResult[player.FirstLetter].Add(new CardResult
                              {
                                  Suit = suit.ShortName,
                                  Rank = rank.ShortName,
                                  Score = score
                              });
                          });
                      },
                      (number) =>
                      {
                          trickResult.Number = number;
                          response.Tricks.Add(trickResult);
                          trickResult = new TrickResult();
                      }
         );
     return response;
 }
Ejemplo n.º 4
0
        public object Any(SolveGame solveGame)
        {
            var response    = new SolveGameResponse();
            var dds         = new DdsConnect();
            var trickResult = new TrickResult();

            GameReplayer.Replay(solveGame.PBN,
                                (game, player, card) =>
            {
                var result = dds.SolveBoard(game);
                MapCards(result, (suit, rank, score) =>
                {
                    trickResult[player.FirstLetter].Add(new CardResult
                    {
                        Suit  = suit.ShortName,
                        Rank  = rank.ShortName,
                        Score = score
                    });
                });
            },
                                (number) =>
            {
                trickResult.Number = number;
                response.Tricks.Add(trickResult);
                trickResult = new TrickResult();
            }
                                );
            return(response);
        }