From 26dff288134041d3245701b047be1d9a08c7c9d3 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Wed, 7 Dec 2022 19:03:55 -0800 Subject: added king moves, fixed memory leak in main --- chess.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/chess.c b/chess.c index a0904df..f11a11f 100644 --- a/chess.c +++ b/chess.c @@ -150,6 +150,30 @@ vectorp_t get_queen_moves(int** board, vector_t position, int color) { } return init_vectorp(moves, moveCount); } +vectorp_t get_king_moves(int** board, vector_t position, int color) { + vector_t* moves = malloc(28 * sizeof(vector_t)); + int moveCount = 0; + for(int i = 0; i < 8; i++) { + int h; + int v; + //diagonal moves + if(i < 4) { + h = i < 2 ? 1 : -1; + v = (i == 0 || i == 2) ? 1 : -1; + } + //straight moves + else { + h = (i == 4 || i == 6) ? 0 : i == 5 ? 1 : -1; + v = (i == 5 || i == 7) ? 0 : i == 6 ? 1 : -1; + } + vector_t move = init_vector(position.mx + h, position.my + v); + if(in_board(move) && (is_empty(board, move) || is_color(board, move, !color))) { + moves[moveCount] = move; + moveCount++; + } + } + return init_vectorp(moves, moveCount); +} //this function returns moves that will place the player in check! vectorp_t get_moves(int** board, vector_t position, piece_t piece) { int color = 0; @@ -172,6 +196,9 @@ vectorp_t get_moves(int** board, vector_t position, piece_t piece) { else if(piece == queen) { return get_queen_moves(board, position, color); } + else if(piece == king) { + return get_king_moves(board, position, color); + } else { return init_vectorp(0, 0); } @@ -320,6 +347,7 @@ int main() { } board[selection.mx][selection.my] = 0; board[target.mx][target.my] = selectedPiece; + free(moves.vectors); printf("\n"); turn = !turn; } -- cgit v1.3.1