// get the move type using the before and after piece types private static PieceMoveType MoveTypeFromPieceTypes(PieceMoveType before, PieceMoveType after) { // argument guard if (before < PieceMoveType.Pawn || before > PieceMoveType.King || after < PieceMoveType.Pawn || after > PieceMoveType.King) { return(PieceMoveType.Undefined); } if (before == after) // standard or castling move { return(before); } else if (before == PieceMoveType.Pawn) // pawn promo { switch (after) { case PieceMoveType.Queen: return(PieceMoveType.PawnQueen); case PieceMoveType.Rook: return(PieceMoveType.PawnRook); case PieceMoveType.Bishop: return(PieceMoveType.PawnBishop); case PieceMoveType.Knight: return(PieceMoveType.PawnKnight); default: return(PieceMoveType.Undefined); } } return(PieceMoveType.Undefined); }
public Move(ulong f, ulong t, PieceMoveType m) { From = new BoardAddress(f); To = new BoardAddress(t); MoveType = m; }
// create a move from ACN string and the piece positions public Move(string acn, PiecePositions pieces) { int Len = acn.Length; if (Len < 4 || Len > 5) { throw new ArgumentException(string.Format("ACN strings must be 4 or 5 characters long: \"{0}\"", acn)); } string f = acn.Substring(0, 2); string t = acn.Substring(2, 2); From = new BoardAddress(f); To = new BoardAddress(t); // determine the type of piece that is moving if ((pieces.Pawns & From.Position) != 0) { MoveType = PieceMoveType.Pawn; } else if ((pieces.Knights & From.Position) != 0) { MoveType = PieceMoveType.Knight; } else if ((pieces.Bishops & From.Position) != 0) { MoveType = PieceMoveType.Bishop; } else if ((pieces.Rooks & From.Position) != 0) { MoveType = PieceMoveType.Rook; } else if ((pieces.Queens & From.Position) != 0) { MoveType = PieceMoveType.Queen; } else if ((pieces.Kings & From.Position) != 0) { MoveType = PieceMoveType.King; } else { throw new ArgumentException(string.Format("move \"{0}\" invalid given current piece positions", acn)); } // promotion on this move? if (Len == 5) // yes { if (MoveType != PieceMoveType.Pawn) { throw new ArgumentException("tried to promote from a piece type other than pawn"); } char promo = char.ToLower(acn[4]); switch (promo) { case 'n': MoveType = PieceMoveType.PawnKnight; break; case 'b': MoveType = PieceMoveType.PawnBishop; break; case 'r': MoveType = PieceMoveType.PawnRook; break; case 'q': MoveType = PieceMoveType.PawnQueen; break; default: throw new ArgumentException(string.Format("ACN string contains invalid promotion character \"{0}\"", promo)); } } }
public Move(BoardAddress f, BoardAddress t, PieceMoveType m) { From = f; To = t; MoveType = m; }