コード例 #1
0
        public ScenarioRunner ReceivesResourcesStolenEvent(string playerName, ResourceClutch lostResource)
        {
            var gameEvent = new ResourcesLostEvent(lostResource, this.playerAgentsByName[playerName].Id, ResourcesLostEvent.ReasonTypes.Witness);

            this.AddEventInstruction(gameEvent);
            return(this);
        }
コード例 #2
0
        public ScenarioRunner ReceivesResourcesStolenEvent(ResourceClutch lostResource)
        {
            var gameEvent = new ResourcesLostEvent(lostResource, this.currentPlayerAgent.Id, ResourcesLostEvent.ReasonTypes.Robbed);

            this.AddEventInstruction(gameEvent);
            return(this);
        }
コード例 #3
0
        public void GetResourcesForRoll_StandardBoard_ReturnsCorrectResources(UInt32 diceRoll, UInt32 settlementLocation, UInt32 roadEndLocation, ResourceTypes expectedType)
        {
            var playerId      = Guid.NewGuid();
            var gameBoardData = new GameBoard(BoardSizes.Standard);

            gameBoardData.PlaceStartingInfrastructure(playerId, settlementLocation, roadEndLocation);
            var result = gameBoardData.GetResourcesForRoll(diceRoll);

            ResourceClutch expectedResources = default(ResourceClutch);

            switch (expectedType)
            {
            case ResourceTypes.Brick: expectedResources = ResourceClutch.OneBrick; break;

            case ResourceTypes.Grain: expectedResources = ResourceClutch.OneGrain; break;

            case ResourceTypes.Lumber: expectedResources = ResourceClutch.OneLumber; break;

            case ResourceTypes.Ore: expectedResources = ResourceClutch.OneOre; break;

            case ResourceTypes.Wool: expectedResources = ResourceClutch.OneWool; break;
            }

            result.Count.ShouldBe(1);
            result.ShouldContainKey(playerId);
            var actual = result[playerId];

            actual[0].Location.ShouldBe(settlementLocation);
            actual[0].Resources.ShouldBe(expectedResources);
        }
コード例 #4
0
        public void LessThanOperator_SecondResourceClutchIsLess_ReturnsFalse()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 1);
            var r2 = new ResourceClutch(1, 1, 1, 1, 0);

            (r1 < r2).ShouldBeFalse();
        }
コード例 #5
0
        public void GreaterThanOrEqualOperator_FirstResourceClutchIsGreater_ReturnsTrue()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 2);
            var r2 = new ResourceClutch(1, 1, 1, 1, 1);

            (r1 >= r2).ShouldBeTrue();
        }
コード例 #6
0
        public void NotEqualsOperator_ResourceCountsAreSame_ReturnsFalse()
        {
            var r1 = new ResourceClutch(1, 2, 3, 4, 5);
            var r2 = new ResourceClutch(1, 2, 3, 4, 5);

            (r1 != r2).ShouldBeFalse();
        }
コード例 #7
0
ファイル: GameController.cs プロジェクト: toyners/SoC
 public void AnswerDirectTradeOffer(ResourceClutch resourceClutch)
 {
     this.SendAction(new AnswerDirectTradeOfferAction(
                         this.playerId,
                         this.lastMakeDirectTradeOfferEvent.BuyingPlayerId,
                         resourceClutch));
 }
コード例 #8
0
        public void NotEqualsOperator_ResourceCountsAreDifferent_ReturnsTrue()
        {
            var r1 = new ResourceClutch(1, 2, 3, 4, 5);
            var r2 = new ResourceClutch(1, 2, 3, 4, 0);

            (r1 != r2).ShouldBeTrue();
        }
コード例 #9
0
        public void EqualsOperator_ResourceCountsAreSame_ReturnsTrue()
        {
            var r1 = new ResourceClutch(1, 2, 3, 4, 5);
            var r2 = new ResourceClutch(1, 2, 3, 4, 5);

            (r1 == r2).ShouldBeTrue();
        }
コード例 #10
0
        public void MultiplyByNaturalNumberOperator_SecondOperandIsZero_ResultIsZero()
        {
            var op1 = new ResourceClutch(1, 1, 1, 1, 1);
            var op2 = 0;

            (op2 * op1).ShouldBe(ResourceClutch.Zero);
        }
コード例 #11
0
ファイル: TradeWithPlayerEvent.cs プロジェクト: toyners/SoC
 public TradeWithPlayerEvent(Guid initiatingPlayerId, Guid otherPlayerId, ResourceClutch initiatingPlayerResources, ResourceClutch otherPlayerResources) : base(Guid.Empty)
 {
     this.InitiatingPlayerId        = initiatingPlayerId;
     this.OtherPlayerId             = otherPlayerId;
     this.InitiatingPlayerResources = initiatingPlayerResources;
     this.OtherPlayerResources      = otherPlayerResources;
 }
コード例 #12
0
        public void GreaterThanOrEqualOperator_SecondResourceClutchIsGreater_ReturnsFalse()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 1);
            var r2 = new ResourceClutch(1, 1, 1, 1, 2);

            (r1 >= r2).ShouldBeFalse();
        }
コード例 #13
0
        public void LessThanOperator_ResourcesAreEqual_ReturnsFalse()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 1);
            var r2 = new ResourceClutch(1, 1, 1, 1, 1);

            (r1 < r2).ShouldBeFalse();
        }
コード例 #14
0
        public void LessThanOrEqualOperator_ResourceClutchesAreEqual_ReturnsTrue()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 1);
            var r2 = new ResourceClutch(1, 1, 1, 1, 1);

            (r1 <= r2).ShouldBeTrue();
        }
コード例 #15
0
ファイル: ScenarioGameManager.cs プロジェクト: toyners/SoC
 public void AddResourcesToPlayer(string playerName, ResourceClutch value)
 {
     this.players
     .Where(p => p.Name == playerName)
     .FirstOrDefault()
     ?.AddResources(value);
 }
コード例 #16
0
        public void LessThanOrEqualOperator_FirstResourceClutchIsLess_ReturnsTrue()
        {
            var r1 = new ResourceClutch(1, 1, 1, 1, 0);
            var r2 = new ResourceClutch(1, 1, 1, 1, 1);

            (r1 <= r2).ShouldBeTrue();
        }
コード例 #17
0
 public TradeWithPlayerCompletedEvent(Guid buyingPlayerId, ResourceClutch buyingResources, Guid sellingPlayerId, ResourceClutch sellingResources) : base(Guid.Empty)
 {
     this.BuyingPlayerId   = buyingPlayerId;
     this.BuyingResources  = buyingResources;
     this.SellingPlayerId  = sellingPlayerId;
     this.SellingResources = sellingResources;
 }
コード例 #18
0
        public void MultiplyByNaturalNumberOperator_SecondOperandIsNegative_ThrowsMeaningFulException()
        {
            var op1 = new ResourceClutch(1, 1, 1, 1, 1);
            var op2 = -2;

            Should.Throw <ArgumentOutOfRangeException>(() => { var r = op2 * op1; })
            .Message.ShouldBe("Must be a natural number\r\nParameter name: operand1\r\nActual value was -2.");
        }
コード例 #19
0
        public void MultiplyByNaturalNumberOperator_SecondOperandIsPositive_ResultHasExpectedCounts()
        {
            var op1            = new ResourceClutch(1, 1, 1, 1, 1);
            var op2            = 2;
            var expectedResult = new ResourceClutch(2, 2, 2, 2, 2);

            (op1 * op2).ShouldBe(expectedResult);
        }
コード例 #20
0
        public ScenarioRunner ReceivesAcceptDirectTradeEvent(string buyerName, ResourceClutch buyingResources, string sellerName, ResourceClutch sellingResources)
        {
            var gameEvent        = new AcceptTradeEvent(this.GetPlayerId(buyerName), buyingResources, this.GetPlayerId(sellerName), sellingResources);
            var eventInstruction = new EventInstruction(gameEvent);

            this.currentPlayerAgent.AddInstruction(eventInstruction);
            return(this);
        }
コード例 #21
0
        public void CreateFromResourceType_SetToResourceType_CreatesOneOfResourceType(ResourceTypes resourceType, Int32 expectedBrickCount, Int32 expectedGrainCount, Int32 expectedLumberCount, Int32 expectedOreCount, Int32 expectedWoolCount)
        {
            var result = ResourceClutch.CreateFromResourceType(resourceType);

            result.BrickCount.ShouldBe(expectedBrickCount);
            result.GrainCount.ShouldBe(expectedGrainCount);
            result.LumberCount.ShouldBe(expectedLumberCount);
            result.OreCount.ShouldBe(expectedOreCount);
            result.WoolCount.ShouldBe(expectedWoolCount);
        }
コード例 #22
0
        public CollectedResourcesBuilder Add(string playerName, uint location, ResourceClutch resources)
        {
            if (!this.resourceCollectionsByPlayerName.TryGetValue(playerName, out var resourcesCollection))
            {
                resourcesCollection = new List<ResourceCollection>();   
                this.resourceCollectionsByPlayerName.Add(playerName, resourcesCollection);
            }

            resourcesCollection.Add(new ResourceCollection(location, resources));

            return this;
        }
コード例 #23
0
ファイル: PlayerViewModel.cs プロジェクト: toyners/SoC
        public void Update(ResourceClutch resources, bool addResources)
        {
            if (addResources)
            {
                this.Resources += resources;
            }
            else
            {
                this.Resources -= resources;
            }

            this.UpdateResourceText();
        }
コード例 #24
0
ファイル: PlayerModel.cs プロジェクト: toyners/SoC
        }                        // For deserialization

        public PlayerModel(IPlayer player)
        {
            this.CitiesBuilt       = player.PlacedCities;
            this.HeldCards         = player.HeldCards;
            this.Id                = player.Id;
            this.IsComputer        = player.IsComputer;
            this.KnightCards       = player.PlayedKnightCards;
            this.Name              = player.Name;
            this.PlayedCards       = player.PlayedCards;
            this.Resources         = player.Resources;
            this.RoadSegmentsBuilt = player.PlacedRoadSegments;
            this.SettlementsBuilt  = player.PlacedSettlements;
            this.VictoryPoints     = player.VictoryPoints;
        }
コード例 #25
0
ファイル: Player_UnitTests.cs プロジェクト: toyners/SoC
        public void LoseResourcesOfType_OpponentHasResourcesOfType_ReturnsExpectedResource(Int32 count, ResourceTypes resourceType)
        {
            // Arrange
            var player = new Player();

            player.AddResources(new ResourceClutch(count, count, count, count, count));

            ResourceClutch expectedResourceClutch = ResourceClutch.Zero;

            switch (resourceType)
            {
            case ResourceTypes.Brick: expectedResourceClutch = new ResourceClutch(count, 0, 0, 0, 0); break;

            case ResourceTypes.Grain: expectedResourceClutch = new ResourceClutch(0, count, 0, 0, 0); break;

            case ResourceTypes.Lumber: expectedResourceClutch = new ResourceClutch(0, 0, count, 0, 0); break;

            case ResourceTypes.Ore: expectedResourceClutch = new ResourceClutch(0, 0, 0, count, 0); break;

            case ResourceTypes.Wool: expectedResourceClutch = new ResourceClutch(0, 0, 0, 0, count); break;
            }

            // Act
            var actualResourceClutch = player.LoseResourcesOfType(resourceType);

            // Assert
            actualResourceClutch.ShouldBe(expectedResourceClutch);
            player.Resources.Count.ShouldBe(count * 4);

            switch (resourceType)
            {
            case ResourceTypes.Brick: player.Resources.BrickCount.ShouldBe(0); break;

            case ResourceTypes.Grain: player.Resources.GrainCount.ShouldBe(0); break;

            case ResourceTypes.Lumber: player.Resources.LumberCount.ShouldBe(0); break;

            case ResourceTypes.Ore: player.Resources.OreCount.ShouldBe(0); break;

            case ResourceTypes.Wool: player.Resources.WoolCount.ShouldBe(0); break;
            }
        }
コード例 #26
0
ファイル: Player_UnitTests.cs プロジェクト: toyners/SoC
        public void LoseResourceAtIndex_SafeIndex_ReturnsExpectedResource(Int32 index, Int32 expectedBrickCount, Int32 expectedGrainCount, Int32 expectedLumberCount, Int32 expectedOreCount, Int32 expectedWoolCount)
        {
            // Arrange
            var player = new Player();

            player.AddResources(ResourceClutch.OneOfEach);

            var expectedResourceClutch = new ResourceClutch(expectedBrickCount, expectedGrainCount, expectedLumberCount, expectedOreCount, expectedWoolCount);

            // Act
            var actualResourceClutch = player.LoseResourceAtIndex(index);

            // Assert
            actualResourceClutch.ShouldBe(expectedResourceClutch);
            player.Resources.Count.ShouldBe(4);
            player.Resources.BrickCount.ShouldBe(1 - expectedBrickCount);
            player.Resources.GrainCount.ShouldBe(1 - expectedGrainCount);
            player.Resources.LumberCount.ShouldBe(1 - expectedLumberCount);
            player.Resources.OreCount.ShouldBe(1 - expectedOreCount);
            player.Resources.WoolCount.ShouldBe(1 - expectedWoolCount);
        }
コード例 #27
0
        private ResourceTypes GetResourceTypeAt(int index, ResourceClutch resources)
        {
            if (index < resources.BrickCount)
            {
                return(ResourceTypes.Brick);
            }

            if (index < resources.BrickCount + resources.GrainCount)
            {
                return(ResourceTypes.Grain);
            }

            if (index < resources.BrickCount + resources.GrainCount + resources.LumberCount)
            {
                return(ResourceTypes.Lumber);
            }

            if (index < resources.BrickCount + resources.GrainCount + resources.LumberCount + resources.OreCount)
            {
                return(ResourceTypes.Ore);
            }

            return(ResourceTypes.Wool);
        }
コード例 #28
0
        public ScenarioRunner ReceivesResourcesRobbedEvent(string robbedPlayerName, ResourceTypes resourceType)
        {
            ResourceClutch resource = ResourceClutch.Zero;

            switch (resourceType)
            {
            case ResourceTypes.Brick: resource = ResourceClutch.OneBrick; break;

            case ResourceTypes.Grain: resource = ResourceClutch.OneGrain; break;

            case ResourceTypes.Lumber: resource = ResourceClutch.OneLumber; break;

            case ResourceTypes.Ore: resource = ResourceClutch.OneOre; break;

            case ResourceTypes.Wool: resource = ResourceClutch.OneWool; break;
            }

            this.numberGenerator.PlayerLosesResource(this.playerAgentsByName[robbedPlayerName], resourceType);
            var gameEvent = new ResourcesGainedEvent(resource);

            this.AddEventInstruction(gameEvent);

            return(this);
        }
コード例 #29
0
 public AnswerDirectTradeOfferAction(Guid playerId, Guid initialPlayerId, ResourceClutch wantedResources) : base(playerId)
 {
     this.WantedResources = wantedResources;
     this.InitialPlayerId = initialPlayerId;
 }
コード例 #30
0
ファイル: Bot.cs プロジェクト: toyners/SoC
        private void ProcessAsync()
        {
            while (true)
            {
                while (this.gameEvents.TryDequeue(out var gameEvent))
                {
                    if (gameEvent is ConfirmGameStartEvent)
                    {
                        this.Send(new ConfirmGameStartAction(this.Id));
                        continue;
                    }

                    if (gameEvent is GameJoinedEvent)
                    {
                        continue; // Nothing to do
                    }

                    if (gameEvent is PlayerSetupEvent)
                    {
                        this.playerIdsByName = ((PlayerSetupEvent)gameEvent).PlayerIdsByName;
                        continue;
                    }

                    if (gameEvent is InitialBoardSetupEvent)
                    {
                        continue;
                    }

                    if (gameEvent is PlayerOrderEvent)
                    {
                        continue;
                    }

                    if (gameEvent is PlaceSetupInfrastructureEvent)
                    {
                        var start     = DateTime.Now;
                        var locations = this.gameBoardQuery.GetLocationsWithBestYield(1);
                        var waitTimeInMilliseconds = (TurnDuration - (DateTime.Now - start).Seconds) * 1000;
                        if (waitTimeInMilliseconds > 0)
                        {
                            Thread.Sleep(waitTimeInMilliseconds);
                        }

                        this.Send(new PlaceSetupInfrastructureAction(this.Id, locations[0], locations[0] + 1));
                        continue;
                    }

                    if (gameEvent is StartTurnEvent)
                    {
                        var startTurnEvent = (StartTurnEvent)gameEvent;
                        if (startTurnEvent.CollectedResources != null &&
                            startTurnEvent.CollectedResources.TryGetValue(this.Id, out var collectedResources))
                        {
                            foreach (var rc in collectedResources)
                            {
                                this.resources += rc.Resources;
                            }
                        }

                        if (startTurnEvent.PlayerId == this.Id)
                        {
                            this.Send(new EndOfTurnAction(this.Id));
                        }
                        continue;
                    }
                }

                Thread.Sleep(100);
            }
        }