public void BuildAndRavage_BecomesTwoBuilds() { List <string> invaderLog = new List <string>(); // Given: Going to Ravage / Build in Jungle var(user, ctx) = TestSpirit.SetupGame(PowerCard.For <CallToTrade>(), (gs) => { var jungleCard = new InvaderCard(Terrain.Jungle); gs.InvaderDeck = InvaderDeck.BuildTestDeck(jungleCard, jungleCard, jungleCard, jungleCard); gs.NewLogEntry += (s) => invaderLog.Add(s.Msg()); }); // Given: advance to 2nd round where we have a ravage user.DoesNothingForARound(); invaderLog.Clear(); // Given: a space that IS-RAVAGE AND BUILD var spaceCtx = ctx.AllSpaces .Select(ctx.Target) .Last(s => s.MatchesRavageCard && s.MatchesBuildCard); // last stays away from city and ocean invaderLog.Add("Selected target:" + spaceCtx.Space.Label); // And: it has 3 explorers (in case dahan attacks during ravage, would still 1 left over Given_HasOnly3Explorers(spaceCtx); Given_Has2Dahan(spaceCtx); Given_NoSuroundingTowns(spaceCtx); Given_NoSuroundingDahan(spaceCtx); When_GrowsBuysAndActivatesCard(user, spaceCtx); spaceCtx.Tokens.InvaderSummary().ShouldBe("1C@3,1T@2,4E@1"); }
static public InvaderDeck MountainThenAllSands() { var sand = new InvaderCard(Terrain.Sand); return(InvaderDeck.BuildTestDeck( new InvaderCard(Terrain.Mountain), // initial explorer in mountains sand, sand, sand, sand, sand )); }
public Task Initialize(GameSettings settings) { return(Task.Run(() => { foreach (var boardId in settings.BoardIds) { _boards.Add(_boardRepository.Get(boardId)); } InvaderDeck = _invaderDeckFactory.Create(_invaderDeckOrder); })); }
public MassiveFlooding_Tests() : base() { // Given: River spirit.UsePowerProgression(); gs = new GameState(spirit, Board.BuildBoardA()) { InvaderDeck = InvaderDeck.Unshuffled(), Phase = Phase.Slow }; game = new SinglePlayerGame(gs); }
public void StopsAllInvaderActions() { List <string> invaderLog = new List <string>(); var(user, ctx) = TestSpirit.SetupGame(PowerCard.For <IndomitableClaim>(), (gs) => { var jungleCard = new InvaderCard(Terrain.Jungle); gs.InvaderDeck = InvaderDeck.BuildTestDeck(jungleCard, jungleCard, jungleCard, jungleCard); gs.NewLogEntry += (s) => invaderLog.Add(s.Msg()); }); // Given: there a ravage card user.Grows(); user.IsDoneBuyingCards(); invaderLog.Clear(); // and: there is a space that IS-RAVAGE AND BUILD (aka: Jungle - see above) var spaceCtx = ctx.AllSpaces .Select(ctx.Target) .Last(s => s.MatchesRavageCard && s.MatchesBuildCard); // last stays away from city and ocean invaderLog.Add("Selected target:" + spaceCtx.Space.Label); // And: we have a presence in that land ctx.Self.Presence.PlaceOn(spaceCtx.Space, spaceCtx.GameState); // And: it has 3 explorers spaceCtx.Tokens.InitDefault(Invader.Explorer, 3); spaceCtx.Tokens.InitDefault(Invader.Town, 0); spaceCtx.Tokens.InitDefault(Invader.City, 0); // if we had to advance cards, might have buit a city spaceCtx.Tokens.InvaderSummary().ShouldBe("3E@1", "Unable to init to 3 exploreres."); // And 2 dahan spaceCtx.Dahan.Init(2); // When: grows and purchases card user.Grows(); user.PlaysCard(IndomitableClaim.Name); // And: has enough elements to trigger the bonus ctx.Self.Elements[Element.Sun] = 2; ctx.Self.Elements[Element.Earth] = 3; // When: Activates Card user.SelectsFastAction(IndomitableClaim.Name); user.TargetsLand_IgnoreOptions(spaceCtx.Space.Label); user.PullsPresenceFromTrack(ctx.Self.Presence.Energy.RevealOptions.Single()); // Then: nothing changed spaceCtx.Tokens.InvaderSummary().ShouldBe("3E@1", "should be same that we started with"); // Make sure that we actually executed the Ravage Build / Explore Bit invaderLog.Count(s => s.Contains("Exploring")).ShouldBeGreaterThan(0); }
/// <summary> /// Called AFTER everything has been configured. and BEFORE players make first move. /// </summary> public void Initialize() { // ! this has to go first since ManyMinds requires the beast to be in place foreach (var board in Island.Boards) { Tokens[board[2]].Disease.Init(1); var lowest = board.Spaces.Skip(1).OfType <Space1>().First(s => s.StartUpCounts.Empty); Tokens[lowest].Beasts.Adjust(1); } foreach (var board in Island.Boards) { foreach (var space in board.Spaces) { ((Space1)space).InitTokens(Tokens[space]); } } // Explore InvaderDeck.Explore[0].Explore(this).Wait(); InvaderDeck.Advance(); InitSpirits(); // Blight BlightCard.OnGameStart(this); Tokens.TokenAdded.ForGame.Add(async args => { if (args.Token == TokenType.Blight) { await BlightAdded(args); } }); Tokens.TokenRemoved.ForGame.Add(args => { if (args.Token == TokenType.Blight && !args.Reason.IsOneOf( RemoveReason.MovedFrom, // pushing / gathering blight RemoveReason.Replaced // just in case... ) ) { this.blightOnCard += args.Count; } }); }
public void Memento_RoundTrip() { // Given: a deck in some advanced state var sut = new InvaderDeck(new System.Random()); Advance(sut); // And: we have saved the desired state var memento = sut.SaveToMemento(); string expected = TakeSnapShot(sut); // And: advanced beyond the saved state Advance(sut); // When: we restore the saved state sut.LoadFrom(memento); // Then: we should get back the expted state TakeSnapShot(sut).ShouldBe(expected); }
public Quarantine_Tests() { var powerCard = PowerCard.For <CallToTend>(); var(userLocal, ctxLocal) = TestSpirit.SetupGame(powerCard, gs => { gs.NewLogEntry += (s) => { if (s is InvaderActionEntry) { log.Enqueue(s.Msg()); } }; gs.InvaderDeck = InvaderDeck.BuildTestDeck( new InvaderCard(Terrain.Sand), // not on coast InvaderCard.Stage2Costal(), new InvaderCard(Terrain.Jungle) ); }); user = userLocal; ctx = ctxLocal; log.Clear(); // skip over initial Explorer setup }
private void SetUpSweden(int level) { if (level == 0 || level == 1) { CreateFearDeck(); SetUpFearCards(3, 3, 3); } else if (level == 2) { CreateFearDeck(10); SetUpFearCards(3, 4, 3); } else if (level == 3) { CreateFearDeck(10); SetUpFearCards(3, 4, 3); } else if (level == 4) { CreateFearDeck(11); SetUpFearCards(3, 4, 4); } else if (level == 5) { CreateFearDeck(12); SetUpFearCards(4, 4, 4); } else if (level == 6) { CreateFearDeck(13); SetUpFearCards(4, 4, 5); } if (level >= 4) { InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); } }
/// <summary> Replaces all Invader Cards with null-cards that don't ravage/build/explore</summary> static public void DisableInvaderDeck(this GameState gs) { var nullCard = new InvaderCard(Terrain.None); gs.InvaderDeck = InvaderDeck.BuildTestDeck(new byte[12].Select(_ => nullCard).ToArray()); }
static string TakeSnapShot(InvaderDeck sut) { // And: record cards return(sut.Ravage[0].Text + " : " + sut.Build[0].Text + " : " + sut.Explore[0].Text); }
static void Advance(InvaderDeck sut) { sut.Advance(); sut.Advance(); sut.Advance(); }
private void CreateInvaderDeck() { InvaderBox.Clear(); InvaderDeck.Clear(); // construct and initialize all Invader cards by Phase for (int i = 1; i <= 4; i++) { String backPath = "assets/cards/invader/cards-invader-00.png"; ImageSource back = new BitmapImage(new Uri(backPath, UriKind.Relative)); String s = "0" + i.ToString(); String frontPath = "assets/cards/invader/cards-invader-" + s + ".png"; ImageSource front = new BitmapImage(new Uri(frontPath, UriKind.Relative)); InvaderCard ic = new InvaderCard(i, 1, front, back); InvaderDeck.Add(ic); } InvaderDeck.Shuffle(); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); ObservableCollection <InvaderCard> phase2 = new ObservableCollection <InvaderCard>(); for (int i = 6; i <= 10; i++) { String backPath = "assets/cards/invader/cards-invader-05.png"; ImageSource back = new BitmapImage(new Uri(backPath, UriKind.Relative)); String s = ""; if (i < 10) { s = "0" + i.ToString(); } else { s = i.ToString(); } String frontPath = "assets/cards/invader/cards-invader-" + s + ".png"; ImageSource front = new BitmapImage(new Uri(frontPath, UriKind.Relative)); InvaderCard ic = new InvaderCard(i, 2, front, back); phase2.Add(ic); } phase2.Shuffle(); InvaderBox.Add(phase2[0]); phase2.RemoveAt(0); foreach (InvaderCard c in phase2) { InvaderDeck.Add(c); } ObservableCollection <InvaderCard> phase3 = new ObservableCollection <InvaderCard>(); for (int i = 12; i <= 17; i++) { String backPath = "assets/cards/invader/cards-invader-11.png"; ImageSource back = new BitmapImage(new Uri(backPath, UriKind.Relative)); String s = i.ToString(); String frontPath = "assets/cards/invader/cards-invader-" + s + ".png"; ImageSource front = new BitmapImage(new Uri(frontPath, UriKind.Relative)); InvaderCard ic = new InvaderCard(i, 3, front, back); phase3.Add(ic); } phase3.Shuffle(); InvaderBox.Add(phase3[0]); phase3.RemoveAt(0); foreach (InvaderCard c in phase3) { InvaderDeck.Add(c); } }
private void SetUpBrandenburgPrussia(int level) { if (level == 0 || level == 1 || level == 2) { CreateFearDeck(); SetUpFearCards(3, 3, 3); } if (level == 2) { InvaderDeck.Move(InvaderDeck.Count - 1, 3); } else if (level == 3) { CreateFearDeck(10); SetUpFearCards(3, 4, 3); InvaderDeck.Move(InvaderDeck.Count - 1, 3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); } else if (level == 4) { CreateFearDeck(11); SetUpFearCards(4, 4, 3); InvaderDeck.Move(InvaderDeck.Count - 1, 3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); InvaderBox.Add(InvaderDeck[3]); InvaderDeck.RemoveAt(3); } else if (level == 5) { CreateFearDeck(11); SetUpFearCards(4, 4, 3); InvaderDeck.Move(InvaderDeck.Count - 1, 3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); InvaderBox.Add(InvaderDeck[3]); InvaderDeck.RemoveAt(3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); } else if (level == 6) { CreateFearDeck(12); SetUpFearCards(4, 4, 4); InvaderDeck.Move(InvaderDeck.Count - 1, 3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); InvaderBox.Add(InvaderDeck[3]); InvaderDeck.RemoveAt(3); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); InvaderBox.Add(InvaderDeck[0]); InvaderDeck.RemoveAt(0); } }