checkpoint

This commit is contained in:
2025-09-05 18:13:35 -05:00
parent e2a8b771d9
commit 0a415a2292
24 changed files with 622 additions and 492 deletions

View File

@@ -0,0 +1,15 @@
namespace Shogi.Domain.ValueObjects;
public static class Direction
{
public static readonly Vector2 Forward = new(0, 1);
public static readonly Vector2 Backward = new(0, -1);
public static readonly Vector2 Left = new(-1, 0);
public static readonly Vector2 Right = new(1, 0);
public static readonly Vector2 ForwardLeft = new(-1, 1);
public static readonly Vector2 ForwardRight = new(1, 1);
public static readonly Vector2 BackwardLeft = new(-1, -1);
public static readonly Vector2 BackwardRight = new(1, -1);
public static readonly Vector2 KnightLeft = new(-1, 2);
public static readonly Vector2 KnightRight = new(1, 2);
}

View File

@@ -0,0 +1,13 @@
namespace Shogi.Domain.ValueObjects;
public enum Distance
{
/// <summary>
/// Signifies that a piece can move one tile/position per move.
/// </summary>
OneStep,
/// <summary>
/// Signifies that a piece can move multiple tiles/positions in a single move.
/// </summary>
MultiStep
}

View File

@@ -0,0 +1,22 @@
namespace Shogi.Domain.ValueObjects;
/// <summary>
/// Represents a single piece being moved by a player from <paramref name="From"/> to <paramref name="To"/>.
/// </summary>
public readonly record struct Move
{
public Move(Vector2 from, Vector2 to)
{
From = from;
To = to;
}
public Move(WhichPiece pieceFromHand, Vector2 to)
{
PieceFromHand = pieceFromHand;
To = to;
}
public Vector2? From { get; }
public Vector2 To { get; }
public WhichPiece PieceFromHand { get; }
}

View File

@@ -0,0 +1,6 @@
namespace Shogi.Domain.ValueObjects
{
public record MoveResult(bool IsSuccess, string Reason = "")
{
}
}

View File

@@ -0,0 +1,24 @@
using System.Diagnostics;
namespace Shogi.Domain.ValueObjects.Movement;
[DebuggerDisplay("{Step} - {Distance}")]
public record Path
{
public Vector2 Step { get; }
public Vector2 NormalizedStep => Vector2.Normalize(Step);
public Distance Distance { get; }
/// <summary>
///
/// </summary>
/// <param name="step">The smallest distance that can occur during a move.</param>
/// <param name="distance"></param>
public Path(Vector2 step, Distance distance = Distance.OneStep)
{
Step = step;
Distance = distance;
}
public Path Invert() => new(Vector2.Negate(Step), Distance);
}