48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
using Shogi.Domain.YetToBeAssimilatedIntoDDD.Pathing;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace Shogi.Domain.ValueObjects
|
|
{
|
|
internal record class Bishop : Piece
|
|
{
|
|
private static readonly ReadOnlyCollection<Path> BishopPaths = new(new List<Path>(4)
|
|
{
|
|
new Path(Direction.UpLeft, Distance.MultiStep),
|
|
new Path(Direction.UpRight, Distance.MultiStep),
|
|
new Path(Direction.DownLeft, Distance.MultiStep),
|
|
new Path(Direction.DownRight, Distance.MultiStep)
|
|
});
|
|
|
|
public static readonly ReadOnlyCollection<Path> PromotedBishopPaths = new(new List<Path>(8)
|
|
{
|
|
new Path(Direction.Up),
|
|
new Path(Direction.Left),
|
|
new Path(Direction.Right),
|
|
new Path(Direction.Down),
|
|
new Path(Direction.UpLeft, Distance.MultiStep),
|
|
new Path(Direction.UpRight, Distance.MultiStep),
|
|
new Path(Direction.DownLeft, Distance.MultiStep),
|
|
new Path(Direction.DownRight, Distance.MultiStep)
|
|
});
|
|
|
|
public static readonly ReadOnlyCollection<Path> Player2Paths =
|
|
BishopPaths
|
|
.Select(p => p.Invert())
|
|
.ToList()
|
|
.AsReadOnly();
|
|
|
|
public static readonly ReadOnlyCollection<Path> Player2PromotedPaths =
|
|
PromotedBishopPaths
|
|
.Select(p => p.Invert())
|
|
.ToList()
|
|
.AsReadOnly();
|
|
|
|
public Bishop(WhichPlayer owner, bool isPromoted = false)
|
|
: base(WhichPiece.Bishop, owner, isPromoted)
|
|
{
|
|
}
|
|
|
|
public override IEnumerable<Path> MoveSet => IsPromoted ? PromotedBishopPaths : BishopPaths;
|
|
}
|
|
}
|