mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
113 lines
3.1 KiB
C#
113 lines
3.1 KiB
C#
using System;
|
|
using System.Linq;
|
|
|
|
namespace Hexapawn
|
|
{
|
|
// Provides input methods which emulate the BASIC interpreter's keyboard input routines
|
|
internal static class Input
|
|
{
|
|
internal static char GetYesNo(string prompt)
|
|
{
|
|
while (true)
|
|
{
|
|
Console.Write($"{prompt} (Y-N)? ");
|
|
var response = Console.ReadLine().FirstOrDefault();
|
|
if ("YyNn".Contains(response))
|
|
{
|
|
return char.ToUpperInvariant(response);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Implements original code:
|
|
// 120 PRINT "YOUR MOVE";
|
|
// 121 INPUT M1,M2
|
|
// 122 IF M1=INT(M1)AND M2=INT(M2)AND M1>0 AND M1<10 AND M2>0 AND M2<10 THEN 130
|
|
// 123 PRINT "ILLEGAL CO-ORDINATES."
|
|
// 124 GOTO 120
|
|
internal static Move GetMove(string prompt)
|
|
{
|
|
while(true)
|
|
{
|
|
ReadNumbers(prompt, out var from, out var to);
|
|
|
|
if (Move.TryCreate(from, to, out var move))
|
|
{
|
|
return move;
|
|
}
|
|
|
|
Console.WriteLine("Illegal Coordinates.");
|
|
}
|
|
}
|
|
|
|
internal static void Prompt(string text = "") => Console.Write($"{text}? ");
|
|
|
|
internal static void ReadNumbers(string prompt, out float number1, out float number2)
|
|
{
|
|
while (!TryReadNumbers(prompt, out number1, out number2))
|
|
{
|
|
prompt = "";
|
|
}
|
|
}
|
|
|
|
private static bool TryReadNumbers(string prompt, out float number1, out float number2)
|
|
{
|
|
Prompt(prompt);
|
|
var inputValues = ReadStrings();
|
|
|
|
if (!TryParseNumber(inputValues[0], out number1))
|
|
{
|
|
number2 = default;
|
|
return false;
|
|
}
|
|
|
|
if (inputValues.Length == 1)
|
|
{
|
|
return TryReadNumber("?", out number2);
|
|
}
|
|
|
|
if (!TryParseNumber(inputValues[1], out number2))
|
|
{
|
|
number2 = default;
|
|
return false;
|
|
}
|
|
|
|
if (inputValues.Length > 2)
|
|
{
|
|
Console.WriteLine("!Extra input ingored");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static bool TryReadNumber(string prompt, out float number)
|
|
{
|
|
Prompt(prompt);
|
|
var inputValues = ReadStrings();
|
|
|
|
if (!TryParseNumber(inputValues[0], out number))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (inputValues.Length > 1)
|
|
{
|
|
Console.WriteLine("!Extra input ingored");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static string[] ReadStrings() => Console.ReadLine().Split(',', StringSplitOptions.TrimEntries);
|
|
|
|
private static bool TryParseNumber(string text, out float number)
|
|
{
|
|
if (float.TryParse(text, out number)) { return true; }
|
|
|
|
Console.WriteLine("!Number expected - retry input line");
|
|
number = default;
|
|
return false;
|
|
}
|
|
}
|
|
}
|