Exemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="flags"></param>
        public MGMove(byte from, byte to, MGChessMoveFlags flags)
        {
            Debug.Assert(from != to);
            Debug.Assert(from < 64);
            Debug.Assert(to < 64);

            FromSquareIndex = from;
            ToSquareIndex   = to;
            Flags           = flags;

            // Obviate requirement of definite assignment to all fields
            Unsafe.SkipInit <short>(out FromAndToCombined);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Constructor (with piece specified).
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="piece"></param>
        /// <param name="flags">optional flags other than piece</param>
        public MGMove(byte from, byte to, MGPositionConstants.MCChessPositionPieceEnum piece, MGChessMoveFlags flags)
        {
            Debug.Assert(from < 64);
            Debug.Assert(to < 64);
            Debug.Assert(from != to);
            Debug.Assert((flags & MGChessMoveFlags.Piece) == 0); // not expected to have already set

            FromSquareIndex = from;
            ToSquareIndex   = to;
            Flags           = flags;

            // Obviate requirement of definite assignment to all fields
            Unsafe.SkipInit <short>(out FromAndToCombined);

            Piece = piece;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Copy constructor.
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="flags"></param>
        public MGMove(MGMove otherMove, bool flip)
        {
            if (!flip)
            {
                FromSquareIndex = otherMove.FromSquareIndex;
                ToSquareIndex   = otherMove.ToSquareIndex;
                Flags           = otherMove.Flags;
            }
            else
            {
                FromSquareIndex = FlipSquare(otherMove.FromSquareIndex);
                ToSquareIndex   = FlipSquare(otherMove.ToSquareIndex);
                Flags           = otherMove.Flags ^ MGChessMoveFlags.BlackToMove;
            }

            // Obviate requirement of definite assignment to all fields
            Unsafe.SkipInit <short>(out FromAndToCombined);
        }