Ejemplo n.º 1
0
/*Update Board with specific Move, perform Promotion if necessary*/
void updateBoard(Game *game, Move *move){
	if (move == NULL) return;
	updateCastling(game, move); //Not implemented
	char c = game->board[move->source->column][move->source->row];
	game->board[move->source->column][move->source->row] = EMPTY;
	game->board[move->dest->column][move->dest->row] = c;
	if (move->promotion != NONETYPE){
		Color col = getColFromChar(c);
		game->board[move->dest->column][move->dest->row] = getCharFromType(move->promotion, col);
	}
	
}
Ejemplo n.º 2
0
/* Executes a move */
int makeMove(Board *brd, Move move) {

    int piece, kingSquare;

    piece = brd->piecesBySquare[move.from];

    if(move.capture != noPiece) removePiece(brd,move.to);

    if (move.promotion != noPiece) {
        addPiece(brd, move.to, move.promotion);
        removePiece(brd, move.from);
    } else {
        movePiece(brd, move.from, move.to);
    }

    if (move.from == H1 && move.to == F1 && move.castling == 1) movePiece(brd,E1,G1);
    if (move.from == A1 && move.to == D1 && move.castling == 1) movePiece(brd,E1,C1);
    if (move.from == H8 && move.to == F8 && move.castling == 1) movePiece(brd,E8,G8);
    if (move.from == A8 && move.to == D8 && move.castling == 1) movePiece(brd,E8,C8);
    if (move.from == E1 && move.to == G1 && move.castling == 1) movePiece(brd,H1,F1);
    if (move.from == E1 && move.to == C1 && move.castling == 1) movePiece(brd,A1,D1);
    if (move.from == E8 && move.to == G8 && move.castling == 1) movePiece(brd,H8,F8);
    if (move.from == E8 && move.to == C8 && move.castling == 1) movePiece(brd,A8,D8);

    updateCastling(brd, move);

    brd->prevMoves[brd->numMoves++] = move;

    if ( ((piece == wKing) && (isSquareThreat(brd, move.to, BLACK)))  || ((piece == bKing) && (isSquareThreat(brd, move.to, WHITE))) )
        return FALSE;

    if(brd->side == WHITE) {
        kingSquare = brd->squaresByPieces[wKing][0];
        if(isSquareThreat(brd, kingSquare, BLACK)) {
            return FALSE;
        }
    } else {
        kingSquare = brd->squaresByPieces[bKing][0];
        if(isSquareThreat(brd, kingSquare, WHITE)) {
            return FALSE;
        }
    }

    return TRUE;

}