...
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user