Files
basic-computer-games/20_Buzzword/csharp/Program.cs
Piotr Czajkowski 8cf778cb87 Comment changed
2022-01-01 14:18:25 +01:00

117 lines
4.0 KiB
C#

using System;
namespace Buzzword
{
class Program
{
/// <summary>
/// Displays header.
/// </summary>
static void Header()
{
Console.WriteLine("Buzzword generator".PadLeft(26));
Console.WriteLine("Creating Computing Morristown, New Jersey".PadLeft(15));
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
}
// Information for the user about possible key input.
static string keys = "type a 'Y' for another phrase or 'N' to quit";
/// <summary>
/// Displays instructions.
/// </summary>
static void Instructions()
{
Console.WriteLine("This program prints highly acceptable phrases in\n"
+ "'educator-speak' that you can work into reports\n"
+ "and speeches. Whenever a question mark is printed,\n"
+ $"{keys}.");
Console.WriteLine();
Console.WriteLine();
Console.Write("Here's the first phrase:");
}
static string[] Words = new[]
{ "ability", "basal", "behavioral", "child-centered",
"differentiated", "discovery", "flexible", "heterogenous",
"homogeneous", "manipulative", "modular", "tavistock",
"individualized", "learning", "evaluative", "objective",
"cognitive", "enrichment", "scheduling", "humanistic",
"integrated", "non-graded", "training", "vertical age",
"motivational", "creative", "grouping", "modification",
"accountability", "process", "core curriculum", "algorithm",
"performance", "reinforcement", "open classroom", "resource",
"structure", "facility", "environment" };
/// <summary>
/// Capitalizes first letter of given string.
/// </summary>
/// <param name="input"></param>
/// <returns>string</returns>
static string Capitalize(string input)
{
if (string.IsNullOrWhiteSpace(input))
return string.Empty;
return char.ToUpper(input[0]) + input[1..];
}
// Seed has been calculated to get the same effect as in original,
// at least in first phrase
static readonly Random rnd = new Random(1486);
/// <summary>
/// Generates random phrase from words available in Words array.
/// </summary>
/// <returns>String representing random phrase where first letter is capitalized.</returns>
static string GeneratePhrase()
{
// Indexing from 0, so had to decrease generated numbers
// NextDouble used to reflect original
return $"{Capitalize(Words[(int)(13 * rnd.NextDouble())])} "
+ $"{Words[(int)(13 * rnd.NextDouble() + 13)]} "
+ $"{Words[(int)(13 * rnd.NextDouble() + 26)]}";
}
/// <summary>
/// Handles user input. On wrong input it displays information about
/// valid keys in infinite loop.
/// </summary>
/// <returns>True if user pressed 'Y', false if 'N'.</returns>
static bool Decision()
{
while (true)
{
Console.Write("?");
var answer = Console.ReadKey();
if (answer.Key == ConsoleKey.Y)
return true;
else if (answer.Key == ConsoleKey.N)
return false;
else
Console.WriteLine($"\n{keys}");
}
}
static void Main(string[] args)
{
Header();
Instructions();
while (true)
{
Console.WriteLine();
Console.WriteLine(GeneratePhrase());
Console.WriteLine();
if (!Decision())
break;
}
Console.WriteLine("\nCome back when you need help with another report!");
}
}
}