예제 #1
0
        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());
        }
예제 #2
0
            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 })
예제 #3
0
 private PositionImpl(PositionImpl position, IPositionAbstraction abstraction)
 {
     Abstraction = abstraction;
     for (int i = 0; i < position.Maps.Length; i++)
     {
         this.Maps[i] = position.Maps[i];
     }
 }
예제 #4
0
        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 });
        }
예제 #5
0
 private bool isOpponentStaleMate(IPositionAbstraction position)
 {
     ChangeWhoToMove(position);
     return(position.IsStaleMate);
 }
예제 #6
0
 private bool isOpponentIncheck(IPositionAbstraction position)
 {
     ChangeWhoToMove(position);
     return(position.IsInCheck);
 }
예제 #7
0
 public PositionImpl(IPositionAbstraction abstraction, ulong[] maps)
 {
     Abstraction = abstraction;
     Maps        = maps;
 }
예제 #8
0
 public Unit AssertIterateForMoves(IPositionAbstraction position, (PieceEnum Piece, SquareEnum Square, PieceEnum Promoted, SquareEnum MoveSquare)[] Expected)