53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
using Shogi.Domain.Pathing;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace Shogi.Domain.Pieces
|
|
{
|
|
public sealed class Rook : Piece
|
|
{
|
|
public static readonly ReadOnlyCollection<Path> Player1Paths = new(new List<Path>(4)
|
|
{
|
|
new Path(Direction.Up, Distance.MultiStep),
|
|
new Path(Direction.Left, Distance.MultiStep),
|
|
new Path(Direction.Right, Distance.MultiStep),
|
|
new Path(Direction.Down, Distance.MultiStep)
|
|
});
|
|
|
|
private static readonly ReadOnlyCollection<Path> PromotedPlayer1Paths = new(new List<Path>(8)
|
|
{
|
|
new Path(Direction.Up, Distance.MultiStep),
|
|
new Path(Direction.Left, Distance.MultiStep),
|
|
new Path(Direction.Right, Distance.MultiStep),
|
|
new Path(Direction.Down, Distance.MultiStep),
|
|
new Path(Direction.UpLeft),
|
|
new Path(Direction.UpRight),
|
|
new Path(Direction.DownLeft),
|
|
new Path(Direction.DownRight)
|
|
});
|
|
|
|
public static readonly ReadOnlyCollection<Path> Player2Paths =
|
|
Player1Paths
|
|
.Select(m => m.Invert())
|
|
.ToList()
|
|
.AsReadOnly();
|
|
|
|
public static readonly ReadOnlyCollection<Path> Player2PromotedPaths =
|
|
PromotedPlayer1Paths
|
|
.Select(m => m.Invert())
|
|
.ToList()
|
|
.AsReadOnly();
|
|
|
|
public Rook(WhichPlayer owner, bool isPromoted = false)
|
|
: base(WhichPiece.Rook, owner, isPromoted)
|
|
{
|
|
}
|
|
|
|
public override ReadOnlyCollection<Path> MoveSet => Owner switch
|
|
{
|
|
WhichPlayer.Player1 => IsPromoted ? PromotedPlayer1Paths : Player1Paths,
|
|
WhichPlayer.Player2 => IsPromoted ? Player2PromotedPaths : Player2Paths,
|
|
_ => throw new NotImplementedException(),
|
|
};
|
|
}
|
|
}
|