public ScenarioRunner ReceivesResourcesStolenEvent(string playerName, ResourceClutch lostResource) { var gameEvent = new ResourcesLostEvent(lostResource, this.playerAgentsByName[playerName].Id, ResourcesLostEvent.ReasonTypes.Witness); this.AddEventInstruction(gameEvent); return(this); }
public ScenarioRunner ReceivesResourcesStolenEvent(ResourceClutch lostResource) { var gameEvent = new ResourcesLostEvent(lostResource, this.currentPlayerAgent.Id, ResourcesLostEvent.ReasonTypes.Robbed); this.AddEventInstruction(gameEvent); return(this); }
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); }
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(); }
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(); }
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(); }
public void AnswerDirectTradeOffer(ResourceClutch resourceClutch) { this.SendAction(new AnswerDirectTradeOfferAction( this.playerId, this.lastMakeDirectTradeOfferEvent.BuyingPlayerId, resourceClutch)); }
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(); }
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(); }
public void MultiplyByNaturalNumberOperator_SecondOperandIsZero_ResultIsZero() { var op1 = new ResourceClutch(1, 1, 1, 1, 1); var op2 = 0; (op2 * op1).ShouldBe(ResourceClutch.Zero); }
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; }
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(); }
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(); }
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(); }
public void AddResourcesToPlayer(string playerName, ResourceClutch value) { this.players .Where(p => p.Name == playerName) .FirstOrDefault() ?.AddResources(value); }
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(); }
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; }
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."); }
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); }
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); }
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); }
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; }
public void Update(ResourceClutch resources, bool addResources) { if (addResources) { this.Resources += resources; } else { this.Resources -= resources; } this.UpdateResourceText(); }
} // 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; }
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; } }
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); }
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); }
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); }
public AnswerDirectTradeOfferAction(Guid playerId, Guid initialPlayerId, ResourceClutch wantedResources) : base(playerId) { this.WantedResources = wantedResources; this.InitialPlayerId = initialPlayerId; }
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); } }