public void MarketRule_IsSatisfied_When_Exists_Other_Market_But_It_Further_Than_50_Pixels_Away() { IRoad road1 = _settlement.Roads.First(); var market1 = new Market() { Position = new Point(50, 51) }; market1.Road = road1; _settlement.AddBuildingToRoad(road1, market1); //add vertical road to the end of the road to increase distance between markets var roadGenerator = new RoadPointsGenerator(); var road2 = new Road(roadGenerator.GenerateStraight(new RoadGenerationTwoPoints() { Start = new Point(98, 51), End = new Point(98, 21), Fields = _settlement.Fields })); _settlement.AddRoad(road2); var market2 = new Market() { Position = new Point(99, 21) }; market2.Road = road1; _settlement.AddBuildingToRoad(road1, market2); while (_settlement.Roads.SelectMany(g => g.Buildings).Count() < 120) { var buildingPositions = road1.GetPossibleBuildingPositions(new PossibleBuildingPositions(_settlement.Roads, _settlement.Fields)); if (!buildingPositions.Any()) { continue; } var building = new Residence { Position = buildingPositions[RandomProvider.Next(buildingPositions.Count)] }; building.Road = road1; _settlement.AddBuildingToRoad(road1, building); } Assert.AreEqual(5, market1.CalculateFitness(new BuildingRule() { BuildingRoad = road1, Fields = _settlement.Fields, Roads = _settlement.Roads, SettlementCenter = _settlement.SettlementCenter })); }
public void SetUp() { var fields = new Field[100, 100]; int waterLevel = 10; for (int i = 0; i < fields.GetLength(0); i++) { for (int j = 0; j < fields.GetLength(1); j++) { var position = new Point(i, j); if (j < waterLevel) { fields[i, j] = new Field() { InSettlement = false, Position = position, Terrain = new Water() }; } else { fields[i, j] = new Field() { InSettlement = true, Position = position, Terrain = new Lowland(), DistanceToWater = position.Y - waterLevel, DistanceToMainRoad = position.Y - waterLevel - 1 }; } } } var roadGenerator = new RoadPointsGenerator(); var mainRoad = roadGenerator.GenerateStraight(new RoadGenerationTwoPoints() { Start = new Point(0, waterLevel), End = new Point(fields.GetLength(0) - 1, waterLevel), Fields = fields });//in this case main road should be straight horizontal line _settlement = new Settlement(fields, mainRoad, false); var road1 = new Road(roadGenerator.GenerateStraight(new RoadGenerationTwoPoints() { Start = new Point(0, 50), End = new Point(99, 50), Fields = _settlement.Fields })); _settlement.AddRoad(road1); }