private RokadeEnum possibleRokade(IPositionAbstraction position) { var prop = position.GetType().GetProperty("Implementor", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var getImplementor = prop.GetGetMethod(true); IPositionImpl implementor = (IPositionImpl)getImplementor.Invoke(position, null); return(implementor.PossibleRokade()); }
public static IPositionImpl Create(Fen fen, IPositionAbstraction abstraction) { ulong[] maps = new ulong[14]; int i = 0; fen.ForEachPosition() .Where(c => !'/'.Equals(c)) .Select(c => new { index = i += int.TryParse(c.ToString(), out int result) ? result : 1, piece = c })
private PositionImpl(PositionImpl position, IPositionAbstraction abstraction) { Abstraction = abstraction; for (int i = 0; i < position.Maps.Length; i++) { this.Maps[i] = position.Maps[i]; } }
private static void ChangeWhoToMove(IPositionAbstraction position) { var prop = position.GetType().GetProperty("IsWhiteToMove"); var getIsWhiteToMove = prop.GetGetMethod(); bool isWhiteToMove = (bool)getIsWhiteToMove.Invoke(position, null); var setIsWhiteToMove = prop.GetSetMethod(true); setIsWhiteToMove.Invoke(position, new object[] { !isWhiteToMove }); }
private bool isOpponentStaleMate(IPositionAbstraction position) { ChangeWhoToMove(position); return(position.IsStaleMate); }
private bool isOpponentIncheck(IPositionAbstraction position) { ChangeWhoToMove(position); return(position.IsInCheck); }
public PositionImpl(IPositionAbstraction abstraction, ulong[] maps) { Abstraction = abstraction; Maps = maps; }
public Unit AssertIterateForMoves(IPositionAbstraction position, (PieceEnum Piece, SquareEnum Square, PieceEnum Promoted, SquareEnum MoveSquare)[] Expected)