/// <summary> /// Verifies that cards given by player are not duplicate and that player has those cards /// </summary> /// <param name="hand">Player's cards</param> /// <param name="initialMove">Players attempted move</param> /// <returns>True, if move is legal</returns> public static bool IsLegal(Hand hand, InitialMove initialMove) { //Check that cards are different var givenCards = new[] { initialMove.ToBottle, initialMove.ToLeft, initialMove.ToRight }; if (givenCards.Distinct().Count() != givenCards.Length) { return(false); } //Check that player actually has those cards return(givenCards.All(hand.HasCard)); }
public void IsLegal_ReturnsTrueIfPlayeHasCards() { var cards = new Card[] { new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 13, DefaultScore), new Card(CardType.Blue, 14, DefaultScore) }; var initialMove = new InitialMove(new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 13, DefaultScore), new Card(CardType.Blue, 14, DefaultScore)); Assert.IsTrue(InitialMoveRule.IsLegal(new Hand(cards), initialMove)); }
public void IsLegal_ReturnsFalseIfCardGivenIsNotInPlayersCards() { var cards = new Card[] { new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 13, DefaultScore), new Card(CardType.Blue, 14, DefaultScore) }; var initialMove = new InitialMove(new Card(CardType.Red, 12, DefaultScore), new Card(CardType.Red, 13, DefaultScore), new Card(CardType.Red, 14, DefaultScore)); Assert.False(InitialMoveRule.IsLegal(new Hand(cards), initialMove)); }
public void IsLegal_ReturnsFalseIfCardIsGivenMultipleTimes() { var cards = new Card[] { new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 13, DefaultScore), new Card(CardType.Blue, 14, DefaultScore) }; var initialMove = new InitialMove( new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 12, DefaultScore), new Card(CardType.Blue, 13, DefaultScore)); Assert.False(InitialMoveRule.IsLegal(new Hand(cards), initialMove)); }