#include #include #include "vector.h" #include "chesshelpers.h" int in_board(vector_t position) { return position.mx < 8 && position.mx >= 0 && position.my < 8 && position.my >= 0; } int is_empty(int board[8][8], vector_t position) { return board[position.mx][position.my] == 0; } int is_color(int board[8][8], vector_t position, int color) { if(color == 0) { return board[position.mx][position.my] >= 1 && board[position.mx][position.my] <= 6; } else { return board[position.mx][position.my] >= 7; } } //converts board coordinates into algebraic notation char* get_readable_coords(vector_t position) { char* output = malloc(3 * sizeof(char)); output[0] = 'a' + position.mx; output[1] = '8' - position.my; output[2] = '\0'; return output; } //gets the proper algebraic notation for the move char* get_move_name(int board[8][8], vector_t origin, vector_t end) { int piece = board[origin.mx][origin.my]; if(piece > 6) { piece -= 6; } if(piece != 1) { char cPiece = piece == pawn ? 'P' : piece == knight ? 'N' : piece == bishop ? 'B' : piece == rook ? 'R' : piece == queen ? 'Q' : 'K'; int isCapture = board[end.mx][end.my] != 0; char* output = calloc(isCapture ? 5 : 4, sizeof(char)); output[0] = cPiece; if(isCapture) { output[1] = 'x'; } char* rEnd = get_readable_coords(end); strcat(output, rEnd); free(rEnd); output[isCapture ? 4 : 3] = '\0'; return output; } else { int isCapture = board[end.mx][end.my] != 0; char* output = calloc(isCapture ? 5 : 3, sizeof(char)); if(isCapture) { output[0] = 'a' + origin.mx; output[1] = 'x'; } char* rEnd = get_readable_coords(end); strcat(output, rEnd); free(rEnd); output[isCapture ? 4 : 2] = '\0'; return output; } } int** clone_board(int board[8][8]) { int** newBoard = malloc(8 * 8 * sizeof(int)); for(int r = 0; r < 8; r++) { for(int c = 0; c < 8; c++) { newBoard[c][r] = board[c][r]; } } return newBoard; }