Day 3 vibes

This commit is contained in:
6d486f49
2026-06-12 17:09:00 -04:00
parent 404ad03d0d
commit d6ee42b66d
2 changed files with 86 additions and 31 deletions
+40 -30
View File
@@ -76,12 +76,7 @@ public class GameSimulationService
public void RandomizeEvents()
{
var initialRegions = Data.InitialRegions;
Data = new SimulationData();
Data.Regions = initialRegions.Select(r => r.Clone()).ToList();
Data.InitialRegions = initialRegions;
GenerateAndApplyEvents();
Data.IsInitialized = true;
RunSimulation();
}
public List<RegionState> GetCurrentState()
@@ -181,22 +176,25 @@ public class GameSimulationService
if (region.PredatorMeeples <= 0)
return;
if (region.PreyMeeples > 0)
int total = region.PredatorMeeples;
int canEat = Math.Min(total, region.PreyMeeples);
int mustTravel = total - canEat;
if (canEat > 0)
{
int eaten = Math.Min(region.PredatorMeeples, region.PreyMeeples);
region.PreyMeeples -= eaten;
region.PredatorMeeples += eaten;
details.Add($"{region.Name}: Predators ate {eaten} prey, now {region.PredatorMeeples}P / {region.PreyMeeples}R");
region.PreyMeeples -= canEat;
region.PredatorMeeples += canEat;
details.Add($"{region.Name}: {canEat} predators ate prey, +{canEat} new predators");
}
else
if (mustTravel > 0)
{
var target = FindBestTravelTarget(region, r => r.PreyMeeples);
if (target != null)
{
int traveling = region.PredatorMeeples;
target.PredatorMeeples += traveling;
region.PredatorMeeples = 0;
details.Add($"{region.Name}: {traveling} predators traveled to {target.Name}");
region.PredatorMeeples -= mustTravel;
target.PredatorMeeples += mustTravel;
details.Add($"{region.Name}: {mustTravel} predators traveled to {target.Name}");
}
}
}
@@ -206,22 +204,25 @@ public class GameSimulationService
if (region.PreyMeeples <= 0)
return;
if (region.FloraMeeples > 0)
int total = region.PreyMeeples;
int canEat = Math.Min(total, region.FloraMeeples);
int mustTravel = total - canEat;
if (canEat > 0)
{
int consumed = Math.Min(region.PreyMeeples, region.FloraMeeples);
region.FloraMeeples -= consumed;
region.PreyMeeples += consumed;
details.Add($"{region.Name}: Prey consumed {consumed} flora, now {region.PreyMeeples}R / {region.FloraMeeples}F");
region.FloraMeeples -= canEat;
region.PreyMeeples += canEat;
details.Add($"{region.Name}: {canEat} prey ate flora, +{canEat} new prey");
}
else
if (mustTravel > 0)
{
var target = FindBestTravelTarget(region, r => r.FloraMeeples);
if (target != null)
{
int traveling = region.PreyMeeples;
target.PreyMeeples += traveling;
region.PreyMeeples = 0;
details.Add($"{region.Name}: {traveling} prey traveled to {target.Name}");
region.PreyMeeples -= mustTravel;
target.PreyMeeples += mustTravel;
details.Add($"{region.Name}: {mustTravel} prey traveled to {target.Name}");
}
}
}
@@ -314,14 +315,23 @@ public class GameSimulationService
}
}
}
var excluded = new HashSet<string>
{
"Grass 1", "Grass 2", "Wasteland 1",
"Mountain 1", "Mountain 2", "Mountain 3", "Mountain 4", "Mountain 5"
};
var shuffled = combos.OrderBy(_ => _rng.Next()).ToList();
for (int i = 0; i < Data.Regions.Count; i++)
{
var (p, r, f) = shuffled[i % shuffled.Count];
Data.Regions[i].PredatorMeeples = p;
Data.Regions[i].PreyMeeples = r;
Data.Regions[i].FloraMeeples = f;
if (!excluded.Contains(Data.Regions[i].Name))
{
var (p, r, f) = shuffled[i % shuffled.Count];
Data.Regions[i].PredatorMeeples = p;
Data.Regions[i].PreyMeeples = r;
Data.Regions[i].FloraMeeples += f;
}
}
}