public void DrawingAKrakenBustsWithoutAdditionalDraws() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 7 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Keys, Value = 5 }, 1); GameHelpers.BringCardFromDeckToField(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }); GameHelpers.ClearDiscardPile(ref gameFixture); gameFixture.TakeAction(Actions.Draw); gameFixture.Field.Count.Should().Be(0); gameFixture.DiscardPile.Count.Should().Be(2); List <Card> deckCards = typeof(Deck).GetField("Cards", BindingFlags.NonPublic | BindingFlags.Instance) .GetValue(gameFixture.Deck) as List <Card>; deckCards[0].Should().BeEquivalentTo(new Card { Suit = Suites.Keys, Value = 5 }); gameFixture.CurrentPlayersTurn.Should().Be(Players.PlayerTwo); }
public void DrawingIntoAHookButBustingBusts() { Game gameFixture = new Game(); Card FiveOfHooks = new Card() { Suit = Suites.Hooks, Value = 5 }; Card SevenOfHooks = new Card() { Suit = Suites.Hooks, Value = 7 }; GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfHooks); GameHelpers.BringCardToPositionInDeck(ref gameFixture, SevenOfHooks, 0); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.Draw }, options => options.WithoutStrictOrdering()); gameFixture.Field.Count.Should().Be(0); gameFixture.CurrentPlayersTurn.Should().Be(Players.PlayerTwo); gameFixture.ScoreZones[0].PointsShowing().Should().Be(0); gameFixture.DiscardPile.Count.Should().Be(12); }
public void DrawingAMapFirstButTheDiscardIsEmptyDoesntEndTheKraken() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Maps, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }, 2); GameHelpers.ClearDiscardPile(ref gameFixture); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions> { Actions.Draw, Actions.TakeAll }, options => options.WithoutStrictOrdering()); gameFixture.Field.Count.Should().Be(3); gameFixture.Field[2].Should().Match(a => (a as Card).Suit == Suites.Oracles && (a as Card).Value == 5); }
public void BustingWithAnAnchorOutProtectsEarlierCards() { Game gameFixture = new Game(); Card FiveOfKeys = new Card() { Suit = Suites.Keys, Value = 5 }; Card FiveOfAnchors = new Card() { Suit = Suites.Anchors, Value = 5 }; Card SevenOfKeys = new Card() { Suit = Suites.Keys, Value = 7 }; GameHelpers.ClearDiscardPile(ref gameFixture); GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfKeys); GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfAnchors); GameHelpers.BringCardToPositionInDeck(ref gameFixture, SevenOfKeys, 0); GameHelpers.SetCurrentActions(ref gameFixture, new List <Actions> { Actions.Draw }); gameFixture.TakeAction(Actions.Draw); gameFixture.ScoreZones[0].PointsShowing().Should().Be(5); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Anchors).Should().BeNull(); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Keys).Should().NotBeNull(); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Keys).Value.Should().Be(5); gameFixture.DiscardPile.Count.Should().Be(2); }
public void DrawingIntoAMapMakesYouChooseTarget() { Game gameFixture = new Game(); Card FiveOfMaps = new Card() { Suit = Suites.Maps, Value = 5 }; GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfMaps, 0); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.ChooseMapTarget }); }
public void DrawingAKrakenCausesTwoMoreDraws() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Keys, Value = 5 }, 2); gameFixture.TakeAction(Actions.Draw); gameFixture.Field.Count.Should().Be(3); }
public void CanPeekTheDeckIfOracleIsMostRecentCard() { Game gameFixture = new Game(); Card FiveOfOracles = new Card() { Suit = Suites.Oracles, Value = 5 }; Card FiveOfKeys = new Card { Suit = Suites.Keys, Value = 5 }; GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfOracles); GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfKeys, 0); var topCardActual = gameFixture.PeekTopCardOfDeck(); topCardActual.Should().Be(FiveOfKeys); }
public void DrawingAHookWhenYoutHaveNoCardsDoesNothing() { Game gameFixture = new Game(); Card FiveOfHooks = new Card() { Suit = Suites.Hooks, Value = 5 }; GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfHooks, 0); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.Draw, Actions.TakeAll }, options => options.WithoutStrictOrdering()); }
public void DrawingAMapWhenTheDiscardPileHasNoCardsDoesNothing() { Game gameFixture = new Game(); Card FiveOfMaps = new Card { Suit = Suites.Maps, Value = 5 }; GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfMaps, 0); GameHelpers.ClearDiscardPile(ref gameFixture); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.Draw, Actions.TakeAll }, options => options.WithoutStrictOrdering()); }
public void DrawingAMapFirstEndsTheKraken() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Maps, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }, 2); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo(new List <Actions> { Actions.ChooseMapTarget }); gameFixture.Field.Count.Should().Be(2); }
public void DrawingIntoAHookMakesYouChooseTarget() { Game gameFixture = new Game(); Card FiveOfHooks = new Card() { Suit = Suites.Hooks, Value = 5 }; Card FiveOfKeys = new Card { Suit = Suites.Keys, Value = 5 }; GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfHooks, 0); GameHelpers.BringCardFromDeckToScoreZone(ref gameFixture, FiveOfKeys, 0); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.ChooseHookTarget }); }
public void DrawingAMapWhenTheDiscardPileHasOneCardStillWorks() { Game gameFixture = new Game(); Card FiveOfMaps = new Card { Suit = Suites.Maps, Value = 5 }; Card FiveOfKeys = new Card { Suit = Suites.Keys, Value = 5 }; GameHelpers.BringCardToPositionInDeck(ref gameFixture, FiveOfMaps, 0); GameHelpers.ClearDiscardPile(ref gameFixture); GameHelpers.BringCardFromDeckToDiscardPile(ref gameFixture, FiveOfKeys); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions>() { Actions.ChooseMapTarget }); }
public void BustingWithBothAChestAndAKeyBehindAnAnchorStillGetsABonus() { Game gameFixture = new Game(); Card FiveOfKeys = new Card { Suit = Suites.Keys, Value = 5 }; Card FiveOfChests = new Card { Suit = Suites.Chests, Value = 5 }; GameHelpers.ClearDiscardPile(ref gameFixture); GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfKeys); GameHelpers.BringCardFromDeckToField(ref gameFixture, FiveOfChests); GameHelpers.BringCardFromDeckToField(ref gameFixture, new Card { Suit = Suites.Anchors, Value = 5 }); GameHelpers.BringCardFromDeckToField(ref gameFixture, new Card { Suit = Suites.Mermaids, Value = 5 }); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Mermaids, Value = 9 }, 0); GameHelpers.BringCardFromDeckToDiscardPile(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }); GameHelpers.SetCurrentActions(ref gameFixture, new List <Actions> { Actions.Draw }); gameFixture.TakeAction(Actions.Draw); gameFixture.ScoreZones[0].PointsShowing().Should().Be(15); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Keys).Value.Should().Be(5); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Chests).Value.Should().Be(5); gameFixture.ScoreZones[0].HighestOfSuit(Suites.Oracles).Value.Should().Be(5); gameFixture.DiscardPile.Count.Should().Be(3); }
public void DrawingACannonFirstPausesTheKrakenButResumesAfterAShotWasTaken() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Cannons, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }, 2); GameHelpers.BringCardFromDeckToScoreZone(ref gameFixture, new Card { Suit = Suites.Keys, Value = 5 }, 1); GameHelpers.ClearDiscardPile(ref gameFixture); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo(new List <Actions> { Actions.CannonThenBackToKraken }); gameFixture.Field.Count.Should().Be(2); gameFixture.TakeAction(Actions.CannonThenBackToKraken, new Card { Suit = Suites.Keys, Value = 5 }); gameFixture.DiscardPile.Count.Should().Be(1); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo( new List <Actions> { Actions.Draw, Actions.TakeAll }, options => options.WithoutStrictOrdering()); gameFixture.Field.Count.Should().Be(3); gameFixture.Field[2].Should().Match(a => (a as Card).Suit == Suites.Oracles && (a as Card).Value == 5); }
public void SecondDrawWithAnEffectTriggersTheEffect() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Swords, Value = 5 }, 2); GameHelpers.BringCardFromDeckToScoreZone(ref gameFixture, new Card { Suit = Suites.Keys, Value = 5 }, 1); gameFixture.TakeAction(Actions.Draw); gameFixture.CurrentAvailableActions.Should().BeEquivalentTo(new List <Actions> { Actions.ChooseSwordTarget }); gameFixture.Field.Count.Should().Be(3); }
public void SecondDrawCanTriggerBust() { Game gameFixture = new Game(); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Krakens, Value = 5 }, 0); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Keys, Value = 5 }, 1); GameHelpers.BringCardToPositionInDeck(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 7 }, 2); GameHelpers.BringCardFromDeckToField(ref gameFixture, new Card { Suit = Suites.Oracles, Value = 5 }); GameHelpers.ClearDiscardPile(ref gameFixture); gameFixture.TakeAction(Actions.Draw); gameFixture.Field.Count.Should().Be(0); gameFixture.DiscardPile.Count.Should().Be(4); gameFixture.CurrentPlayersTurn.Should().Be(Players.PlayerTwo); }