59 lines
1.7 KiB
C#
59 lines
1.7 KiB
C#
// .NET 8 C# - Random Sims 2 Personality Allocator
|
|
// Clear, minimal, portable, with basic validation.
|
|
|
|
var totalPoints = 25;
|
|
const int MaxPointsPerTrait = 10;
|
|
string[] traits = ["Outgoing", "Nice", "Playful", "Neat", "Active"];
|
|
Dictionary<string, int> personality = new();
|
|
Random rng = new();
|
|
|
|
// Shuffle traits to prevent boring patterns
|
|
traits = traits.OrderBy(_ => rng.Next()).ToArray();
|
|
|
|
// Initialize
|
|
foreach (var trait in traits)
|
|
{
|
|
personality[trait] = 0;
|
|
}
|
|
|
|
// Assign points while respecting max constraints
|
|
while (totalPoints > 0)
|
|
{
|
|
var availableTraits = new List<string>();
|
|
|
|
foreach (var trait in traits)
|
|
{
|
|
if (personality[trait] < MaxPointsPerTrait)
|
|
availableTraits.Add(trait);
|
|
}
|
|
|
|
if (availableTraits.Count == 0)
|
|
{
|
|
// No available traits left to increment - something's off
|
|
Console.WriteLine("Warning: No traits available to increment.");
|
|
break;
|
|
}
|
|
|
|
var selectedTrait = availableTraits[rng.Next(availableTraits.Count)];
|
|
|
|
// "Extremes" are rare: only allow adding 1 point usually, maybe 2 points if random chance
|
|
var pointsToAdd = (rng.NextDouble() < 0.1) ? Math.Min(2, MaxPointsPerTrait - personality[selectedTrait]) : 1;
|
|
pointsToAdd = Math.Min(pointsToAdd, totalPoints);
|
|
|
|
personality[selectedTrait] += pointsToAdd;
|
|
totalPoints -= pointsToAdd;
|
|
}
|
|
|
|
// Display results
|
|
Console.WriteLine("=== Sims 2 Personality Points ===");
|
|
foreach (var kvp in personality)
|
|
{
|
|
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
|
|
}
|
|
Console.WriteLine($"Remaining Budget (should be 0): {totalPoints}");
|
|
|
|
// Safety check
|
|
if (totalPoints != 0)
|
|
{
|
|
Console.WriteLine("⚠️ Budget mismatch detected! Something funky happened.");
|
|
}
|