Files
basic-computer-games/77_Salvo/csharp/Extensions/RandomExtensions.cs
2023-04-22 08:10:01 +10:00

33 lines
1.0 KiB
C#

namespace Games.Common.Randomness;
internal static class RandomExtensions
{
internal static (Position, Offset) NextShipPosition(this IRandom random)
{
var startX = random.NextCoordinate();
var startY = random.NextCoordinate();
var deltaY = random.NextOffset();
var deltaX = random.NextOffset();
return (new(startX, startY), new(deltaX, deltaY));
}
private static Coordinate NextCoordinate(this IRandom random)
=> random.Next(Coordinate.MinValue, Coordinate.MaxValue + 1);
private static int NextOffset(this IRandom random) => random.Next(-1, 2);
internal static (Position, Offset) GetRandomShipPositionInRange(this IRandom random, int shipSize)
{
while (true)
{
var (start, delta) = random.NextShipPosition();
var shipSizeLessOne = shipSize - 1;
var end = start + delta * shipSizeLessOne;
if (delta != 0 && end.IsInRange)
{
return (start, delta);
}
}
}
}