mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 15:16:33 -08:00
41 lines
1.2 KiB
C#
41 lines
1.2 KiB
C#
using Games.Common.IO;
|
|
using Games.Common.Randomness;
|
|
|
|
namespace Basketball.Plays;
|
|
|
|
internal abstract class Play
|
|
{
|
|
private readonly IReadWrite _io;
|
|
private readonly IRandom _random;
|
|
private readonly Clock _clock;
|
|
|
|
public Play(IReadWrite io, IRandom random, Clock clock)
|
|
{
|
|
_io = io;
|
|
_random = random;
|
|
_clock = clock;
|
|
}
|
|
|
|
protected bool ClockIncrementsToHalfTime(Scoreboard scoreboard)
|
|
{
|
|
_clock.Increment(scoreboard);
|
|
return _clock.IsHalfTime;
|
|
}
|
|
|
|
internal abstract bool Resolve(Scoreboard scoreboard);
|
|
|
|
protected void ResolveFreeThrows(Scoreboard scoreboard, string message) =>
|
|
Resolve(message)
|
|
.Do(0.49f, () => scoreboard.AddFreeThrows(2, "Shooter makes both shots."))
|
|
.Or(0.75f, () => scoreboard.AddFreeThrows(1, "Shooter makes one shot and misses one."))
|
|
.Or(() => scoreboard.AddFreeThrows(0, "Both shots missed."));
|
|
|
|
protected Probably Resolve(string message) => Resolve(message, 1f);
|
|
|
|
protected Probably Resolve(string message, float defenseFactor)
|
|
{
|
|
_io.WriteLine(message);
|
|
return new Probably(defenseFactor, _random);
|
|
}
|
|
}
|