mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-07 19:02:37 -08:00
Split classes to files
This commit is contained in:
32
77_Salvo/csharp/Extensions/RandomExtensions.cs
Normal file
32
77_Salvo/csharp/Extensions/RandomExtensions.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user