Ejemplo n.º 1
0
        public ScenarioRunner ReceivesYearOfPlentyCardPlayedEvent(ResourceTypes firstResource, ResourceTypes secondResource, string playerName = null)
        {
            var playerId  = playerName != null ? this.playerAgentsByName[playerName].Id : this.currentPlayerAgent.Id;
            var gameEvent = new YearOfPlentyCardPlayedEvent(playerId, firstResource, secondResource);

            this.AddEventInstruction(gameEvent);
            return(this);
        }
        public void Scenario_OpponentUsesYearOfPlentyCardAndGetsResourcesofDifferentTypes()
        {
            // Arrange
            var bankId              = Guid.NewGuid();
            var yearOfPlentyCard    = new YearOfPlentyDevelopmentCard();
            var testInstances       = this.TestSetupWithExplictGameBoard(bankId, yearOfPlentyCard, new MockGameBoardWithNoResourcesCollected());
            var localGameController = testInstances.LocalGameController;

            testInstances.Dice.AddSequence(new uint[] { 8, 8, 8, 8, 8, 8, 8, 8 });

            var player         = testInstances.MainPlayer;
            var firstOpponent  = testInstances.FirstOpponent;
            var secondOpponent = testInstances.SecondOpponent;
            var thirdOpponent  = testInstances.ThirdOpponent;

            firstOpponent.AddResources(ResourceClutch.DevelopmentCard);
            firstOpponent.AddBuyDevelopmentCardChoice(1).EndTurn()
            .AddPlayYearOfPlentyCardInstruction(new PlayYearOfPlentyCardInstruction {
                FirstResourceChoice = ResourceTypes.Brick, SecondResourceChoice = ResourceTypes.Grain
            }).EndTurn();

            var       turn      = 0;
            GameToken turnToken = null;

            localGameController.StartPlayerTurnEvent = (GameToken t) => { turnToken = t; turn++; };

            var gameEvents = new List <List <GameEvent> >();

            localGameController.GameEvents = (List <GameEvent> e) => { gameEvents.Add(e); };

            localGameController.StartGamePlay();
            localGameController.EndTurn(turnToken); // Opponent buys development card
            localGameController.EndTurn(turnToken); // Opponent plays year of plenty card

            // Assert
            var expectedBuyDevelopmentCardEvent = new BuyDevelopmentCardEvent(firstOpponent.Id);

            var expectedResourceTransactionList = new ResourceTransactionList();

            expectedResourceTransactionList.Add(new ResourceTransaction(firstOpponent.Id, bankId, new ResourceClutch(1, 1, 0, 0, 0)));
            var expectedPlayYearOfPlentyCardEvent = new YearOfPlentyCardPlayedEvent(firstOpponent.Id, ResourceTypes.Brick, ResourceTypes.Brick);

            gameEvents.Count.ShouldBe(15);
            gameEvents[2].Count.ShouldBe(2);
            gameEvents[2][1].ShouldBe(expectedBuyDevelopmentCardEvent);
            gameEvents[9].Count.ShouldBe(2);
            gameEvents[9][1].ShouldBe(expectedPlayYearOfPlentyCardEvent);

            player.Resources.Count.ShouldBe(0);
            firstOpponent.Resources.Count.ShouldBe(2);
            firstOpponent.Resources.BrickCount.ShouldBe(1);
            firstOpponent.Resources.GrainCount.ShouldBe(1);
            secondOpponent.Resources.Count.ShouldBe(0);
            secondOpponent.Resources.BrickCount.ShouldBe(0);
            thirdOpponent.Resources.Count.ShouldBe(0);
        }