From aa5a3275dbe7bc737850ade52e55109303c92e80 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Sun, 4 Dec 2022 17:55:06 -0800 Subject: added bishop moves --- chess.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/chess.c b/chess.c index f4abecb..3657f63 100644 --- a/chess.c +++ b/chess.c @@ -148,6 +148,37 @@ vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) { } return init_vectorp(moves, moveCount); } +vectorp_t get_bishop_moves(int board[8][8], vector_t position, int color) { + vector_t* moves = malloc(13 * sizeof(vector_t)); + int moveCount = 0; + for(int i = 0; i < 4; i++) { + int h = i < 2 ? 1 : -1; + int v = (i == 0 || i == 2) ? 1 : -1; + vector_t checkPos = init_vector(position.mx, position.my); + for(int d = 0; d < 7; d++) { + checkPos.mx += h; + checkPos.my += v; + if(in_board(checkPos)) { + if(is_empty(board, checkPos)) { + moves[moveCount] = init_vector(checkPos.mx, checkPos.my); + moveCount++; + } + else if(is_color(board, checkPos, !color)) { + moves[moveCount] = init_vector(checkPos.mx, checkPos.my); + moveCount++; + break; + } + else { + break; + } + } + else { + break; + } + } + } + return init_vectorp(moves, moveCount); +} vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { int color = 0; if(piece > 6) { @@ -156,9 +187,13 @@ vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { } if(piece == pawn) { return get_pawn_moves(board, position, color); - } else if(piece == knight) { + } + else if(piece == knight) { return get_knight_moves(board, position, color); } + else if(piece == bishop) { + return get_bishop_moves(board, position, color); + } } vector_t user_input_pos() { char* inputString = malloc(3 * sizeof(char)); -- cgit v1.3.1