diff options
Diffstat (limited to 'chess.c')
| -rw-r--r-- | chess.c | 37 |
1 files changed, 36 insertions, 1 deletions
@@ -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)); |
