コード例 #1
0
ファイル: RayMoveGenerator.cs プロジェクト: maksimbulva/chess
        private void AppendRayMoves(
            BoardSquare originSquare,
            Position.Position position,
            MoveDelta rayDelta,
            List <Move> moves)
        {
            var board       = position.Board;
            var moveBuilder = new MoveBuilder(piece, originSquare);

            var currentSquare = originSquare;

            while (rayDelta.IsCanApplyTo(currentSquare))
            {
                currentSquare = rayDelta.GetDestSquare(currentSquare);
                if (board.IsEmpty(currentSquare))
                {
                    moves.Add(moveBuilder.SetDestSquare(currentSquare).Build());
                }
                else
                {
                    var obstacle = board.GetPieceAt(currentSquare);
                    if (obstacle.player != position.PlayerToMove)
                    {
                        moves.Add(moveBuilder
                                  .SetDestSquare(currentSquare)
                                  .SetCapture(obstacle.piece)
                                  .Build());
                    }
                    break;
                }
            }
        }
コード例 #2
0
 private static bool IsKingDelta(MoveDelta moveDelta)
 {
     return(moveDelta.DeltaRow >= -1 &&
            moveDelta.DeltaRow <= 1 &&
            moveDelta.DeltaColumn >= -1 &&
            moveDelta.DeltaColumn <= 1);
 }
コード例 #3
0
        private static bool IsKnightDelta(MoveDelta moveDelta)
        {
            int absDeltaRow = Abs(moveDelta.DeltaRow);

            if (absDeltaRow == 0 || absDeltaRow > 2)
            {
                return(false);
            }
            return(absDeltaRow + Abs(moveDelta.DeltaColumn) == 3);
        }
コード例 #4
0
 private static bool IsBishopDelta(MoveDelta moveDelta)
 {
     return((moveDelta.DeltaRow == moveDelta.DeltaColumn) ||
            (moveDelta.DeltaRow == -moveDelta.DeltaColumn));
 }