This commit is contained in:
6d486f49
2026-06-12 14:55:34 -04:00
parent 96e72df0da
commit 61bfb188f6
3 changed files with 162 additions and 35 deletions
+48 -23
View File
@@ -33,11 +33,16 @@ public class RegionState
}
}
public class TerrainActivation
{
public string MeepleType { get; set; } = "";
public string RegionType { get; set; } = "";
}
public class TurnEvent
{
public int TurnNumber { get; set; }
public string MeepleType { get; set; } = "";
public List<string> RegionTypes { get; set; } = new();
public List<TerrainActivation> Activations { get; set; } = new();
public List<string> Details { get; set; } = new();
}
@@ -86,7 +91,24 @@ public class GameSimulationService
public TurnEvent? GetCurrentEvent()
{
return Data.Events.ElementAtOrDefault(Data.CurrentTurn - 1);
return Data.CurrentTurn > 0
? Data.Events.ElementAtOrDefault(Data.CurrentTurn - 1)
: null;
}
public List<RegionState> GetPreviousState()
{
var prev = Data.CurrentTurn > 0 ? Data.CurrentTurn - 1 : 0;
return Data.Timeline[prev].Select(r => r.Clone()).ToList();
}
public (int predators, int prey, int flora)[] GetPopulationHistory()
{
return Data.Timeline.Select(t => (
t.Sum(r => r.PredatorMeeples),
t.Sum(r => r.PreyMeeples),
t.Sum(r => r.FloraMeeples)
)).ToArray();
}
private void GenerateAndApplyEvents()
@@ -101,23 +123,26 @@ public class GameSimulationService
Data.Timeline.Add(Data.Regions.Select(r => r.Clone()).ToList());
}
Data.CurrentTurn = 1;
Data.CurrentTurn = 0;
}
private TurnEvent GenerateTurnEvent(int turnNumber)
{
string[] meepleTypes = { "Predator", "Prey", "Flora" };
var meepleType = meepleTypes[_rng.Next(3)];
string[] regionTypes = { "Grass", "Forest", "Mountain", "Water", "Wasteland" };
var numTypes = _rng.Next(1, 4);
var selectedTypes = regionTypes.OrderBy(_ => _rng.Next()).Take(numTypes).ToList();
var activations = selectedTypes.Select(rt => new TerrainActivation
{
RegionType = rt,
MeepleType = meepleTypes[_rng.Next(3)]
}).ToList();
return new TurnEvent
{
TurnNumber = turnNumber,
MeepleType = meepleType,
RegionTypes = selectedTypes,
Activations = activations,
Details = new List<string>()
};
}
@@ -126,25 +151,25 @@ public class GameSimulationService
{
var details = new List<string>();
foreach (var region in Data.Regions)
foreach (var activation in turnEvent.Activations)
{
if (!turnEvent.RegionTypes.Contains(region.Terrain))
continue;
switch (turnEvent.MeepleType)
foreach (var region in Data.Regions.Where(r => r.Terrain == activation.RegionType))
{
case "Flora":
region.FloraMeeples++;
details.Add($"{region.Name}: +1 Flora");
break;
switch (activation.MeepleType)
{
case "Flora":
region.FloraMeeples++;
details.Add($"{region.Name}: +1 Flora");
break;
case "Predator":
ApplyPredatorActivation(region, details);
break;
case "Predator":
ApplyPredatorActivation(region, details);
break;
case "Prey":
ApplyPreyActivation(region, details);
break;
case "Prey":
ApplyPreyActivation(region, details);
break;
}
}
}