Add game loops and betting

This commit is contained in:
Andrew Cooper
2022-07-24 17:29:26 +10:00
parent 06386a6d5f
commit e6d0377106
3 changed files with 60 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ namespace Cube;
internal class Game internal class Game
{ {
private const int _initialBalance = 500;
private readonly IReadWrite _io; private readonly IReadWrite _io;
private readonly IRandom _random; private readonly IRandom _random;
@@ -14,5 +15,42 @@ internal class Game
public void Play() public void Play()
{ {
_io.Write(Streams.Introduction); _io.Write(Streams.Introduction);
if (_io.ReadNumber("") != 0)
{
_io.Write(Streams.Instructions);
}
PlaySeries(_initialBalance);
_io.Write(Streams.Goodbye);
}
private void PlaySeries(float balance)
{
while (true)
{
var wager = _io.ReadWager(balance);
var gameWon = PlayGame();
if (wager.HasValue)
{
balance = gameWon ? (balance + wager.Value) : (balance - wager.Value);
if (balance <= 0)
{
_io.Write(Streams.Bust);
return;
}
_io.WriteLine(Formats.Balance, balance);
}
if (_io.ReadNumber(Prompts.TryAgain) != 1) { return; }
}
}
private bool PlayGame()
{
return true;
} }
} }

View File

@@ -0,0 +1,20 @@
namespace Cube;
internal static class IOExtensions
{
internal static float? ReadWager(this IReadWrite io, float balance)
{
io.Write(Streams.Wager);
if (io.ReadNumber("") == 0) { return null; }
var prompt = Prompts.HowMuch;
while(true)
{
var wager = io.ReadNumber(prompt);
if (wager <= balance) { return wager; }
prompt = Prompts.BetAgain;
}
}
}