SimsPersonalityGenerator/SimPersonalityGenerator/Program.cs
Tony Bark a8717a5177 Renamed Sim class to TraitGenerator
- Moved TraitGenerator to PersonalityGenerator library
2025-02-07 08:57:57 -05:00

101 lines
No EOL
3.6 KiB
C#

using PersonalityGenerator;
var isFinishedSession = false;
void GenerateTraits()
{
// Prompt the user to enter traits they want to prioritize.
Console.WriteLine("You can prioritize one or more traits to be above 8 by entering them.");
Console.Write("Enter traits separated by commas (e.g., Outgoing, Nice), or press Enter to generate a random personality: ");
// Read the user input and trim any leading or trailing whitespace.
var prioritizedTraitsInput = Console.ReadLine()?.Trim();
// Initialize a dictionary with predefined traits and their initial values set to 0.
var traits = new Dictionary<string, int>
{
{ "Outgoing", 0 },
{ "Nice", 0 },
{ "Playful", 0 },
{ "Neat", 0 },
{ "Active", 0 }
};
// Process the prioritized traits input:
// 1. Split the input string by commas.
// 2. Trim whitespace from each resulting trait.
// 3. Filter out any empty or invalid traits (traits that are not in the predefined list).
var prioritizedTraits = new HashSet<string>(prioritizedTraitsInput.Split(',')
.Select(t => t.Trim()).Where(t => !string.IsNullOrEmpty(t) && traits.ContainsKey(t)));
// Check if there are any prioritized traits provided by the user.
if (prioritizedTraits.Count > 0)
{
// Assign values to the prioritized traits.
TraitGenerator.AssignPrioritizedTraits(traits, prioritizedTraits);
}
else
{
// If no prioritized traits are provided, assign random values to all traits.
TraitGenerator.AssignRandomTraits(traits);
}
// Display the generated personality traits.
TraitGenerator.DisplayPersonality(traits);
// Mark the session as finished.
isFinishedSession = true;
// Re-enter the session manager to allow for another session or to exit.
SessionManager();
}
// Retrieves user input from the console with a given prompt.
string? GetUserInput(string prompt)
{
Console.WriteLine(prompt);
var input = Console.ReadLine();
return input;
}
// Manages the personality generator session. It checks if a previous session is finished
// and prompts the user to either generate a new personality or exit the application.
void SessionManager()
{
// Greet the user at the start of a new session only if the previous session wasn't finished.
if (!isFinishedSession)
Console.WriteLine("Welcome to the Sim Personality Generator!");
// Define a message to prompt the user about generating a personality.
// The message differs slightly if a previous session was already finished.
var message = "Would you like to generate a random personality? [y/n]";
if (isFinishedSession)
message = "Would you like to generate a new personality? [y/n]";
// Retrieve the user's input through a prompt specified by 'message'.
var input = GetUserInput(message);
// Convert the input to lowercase to handle user input in a case-insensitive manner.
switch (input?.ToLower())
{
case "y":
// Reset the session status if the previous session was finished.
if (isFinishedSession)
isFinishedSession = false;
// Clear the console to provide a clean interface for generating a new personality.
Console.Clear();
// Generate a new set of personality traits
GenerateTraits();
break;
default:
// If the user enters anything other than 'y', terminate the application gracefully.
Environment.Exit(Environment.ExitCode);
break;
}
}
SessionManager();