Exemplo n.º 1
0
        public void AcceptCard(IFrenchSuitedCard card)
        {
            if (IsOpeningMove() && !IsOpeningMoveCard(card))
            {
                throw new InvalidMoveException($"Can not play '{card.Name}' as opening move");
            }

            if (IsStartingMoveOnSuit(card))
            {
                if (IsNotValidOpeningCard(card))
                {
                    throw new InvalidMoveException($"Opening move for a suit must be a {OpeningMoveRank}");
                }
            }
            else
            {
                if (HasCardBeenPlayedAlready(card))
                {
                    throw new InvalidMoveException($"Card '{card.Name}' has already been played");
                }
                if (IsCardNotAdjacentToExistingCard(card))
                {
                    throw new InvalidMoveException($"Card '{card.Name}' is not adjacent to a previously played card");
                }
            }

            AddCardToPlayed(card);

            OnCardAccepted(this, new CardPlayedAcceptedEventArgs(card));
        }
Exemplo n.º 2
0
        private bool IsCardNotAdjacentToExistingCard(IFrenchSuitedCard card)
        {
            var playedSuit = _playedCards[card.Suit];
            var isAdjacent = playedSuit.Any(x => Math.Abs(x.Rank - card.Rank) == 1);

            return(!isAdjacent);
        }
Exemplo n.º 3
0
 public int CompareTo(IFrenchSuitedCard other)
 {
     if (ReferenceEquals(this, other))
     {
         return(0);
     }
     if (ReferenceEquals(null, other))
     {
         return(1);
     }
     return(Number.CompareTo(other.Number));
 }
Exemplo n.º 4
0
        private int CountOfFutureCards(IFrenchSuitedCard card)
        {
            if (card.Rank > Rank.Seven)
            {
                return(_playersHand.CountOfHigherCards(card));
            }

            if (card.Rank < Rank.Seven)
            {
                return(_playersHand.CountOfLowerCards(card));
            }

            return(0);
        }
Exemplo n.º 5
0
 public void DisplayCard(IFrenchSuitedCard card)
 {
     if (card.Suit == Suit.Clubs)
     {
         _clubsStackPresenter.ShowCard(card);
     }
     if (card.Suit == Suit.Hearts)
     {
         _heartsStackPresenter.ShowCard(card);
     }
     if (card.Suit == Suit.Diamonds)
     {
         _diamondsStackPresenter.ShowCard(card);
     }
     if (card.Suit == Suit.Spades)
     {
         _spadesStackPresenter.ShowCard(card);
     }
 }
Exemplo n.º 6
0
        private void MakeMove(IPlayer player, IFrenchSuitedCard card)
        {
            try
            {
                _gameService.AcceptCard(card);
                player.Hand.RemoveCard(card);
                DisplayHands();
                this.richTextBox1.AppendText($"{player.Name} played: {card.Name}\n", player.Colour);

                if (IsWinningMove(player))
                {
                    EndGame(player);
                    return;
                }

                _players.Enqueue(_activePlayer);
                _activePlayer = _players.Dequeue();


                if (_activePlayer.GamePlayStrategy == null)
                {
                    _player1HandPresenter.Enabled = true;
                }
                else
                {
                    var c = _activePlayer.GamePlayStrategy.GetMove(_gameService.PlayedCards, _activePlayer.Hand.Cards);
                    MakeMove(_activePlayer, c);
                }
            }
            catch (KnockException)
            {
                PlayKnock();
                this.richTextBox1.AppendText($"{_activePlayer.Name} Knocked\n", _activePlayer.Colour);
                NextPlayer();
            }
        }
Exemplo n.º 7
0
 private void AddCardToPlayed(IFrenchSuitedCard card)
 {
     _playedCards[card.Suit].Add(card);
 }
Exemplo n.º 8
0
        private bool HasCardBeenPlayedAlready(IFrenchSuitedCard card)
        {
            var b = _playedCards[card.Suit].Any(x => x.Rank == card.Rank);

            return(b);
        }
Exemplo n.º 9
0
 private bool IsNotValidOpeningCard(IFrenchSuitedCard card)
 {
     return(card.Rank != OpeningMoveRank);
 }
Exemplo n.º 10
0
 private bool IsStartingMoveOnSuit(IFrenchSuitedCard card)
 {
     return(_playedCards[card.Suit].Count == 0);
 }
Exemplo n.º 11
0
 public ScoreCard(IFrenchSuitedCard card)
 {
     Card  = card;
     Score = 0;
 }
Exemplo n.º 12
0
 private bool IsCardsAdjacent(IFrenchSuitedCard cardA, IFrenchSuitedCard cardB)
 {
     return((Math.Abs(cardA.Rank - cardB.Rank) == 1) && cardA.Suit == cardB.Suit);
 }
Exemplo n.º 13
0
 public int CountOfLowerCards(IFrenchSuitedCard card)
 {
     return(Cards.Count(x => card.Suit == x.Suit && card.Rank < Rank.Seven && card.Rank > x.Rank));
 }
Exemplo n.º 14
0
 public void RemoveCard(IFrenchSuitedCard card)
 {
     Cards.Remove(card);
 }
 public CardPlayedEventArgs(IPlayer player, IFrenchSuitedCard card)
 {
     Player = player;
     Card   = card;
 }
 public CardPlayedAcceptedEventArgs(IFrenchSuitedCard card)
 {
     Card = card;
 }
Exemplo n.º 17
0
        public void PlayCard(IFrenchSuitedCard card)
        {
            var handler = CardPlayed;

            handler?.Invoke(this, new CardPlayedEventArgs(this, card));
        }
Exemplo n.º 18
0
 private bool IsOpeningMoveCard(IFrenchSuitedCard card)
 {
     return(card.Suit == GameRules.OpeningSuit && card.Rank == GameRules.FirstRank);
 }