diff options
Diffstat (limited to 'chess.c')
| -rw-r--r-- | chess.c | 30 |
1 files changed, 21 insertions, 9 deletions
@@ -107,7 +107,7 @@ int is_color(int board[8][8], vector_t position, int color) { } //0 is white, 1 is black vectorp_t get_pawn_moves(int board[8][8], vector_t position, int color) { - vector_t* moves = malloc(27 * sizeof(vector_t)); + vector_t* moves = malloc(6 * sizeof(vector_t)); int moveCount = 0; int forwardDir = (color == 0 ? -1 : 1); vector_t move1 = init_vector(position.mx, position.my + forwardDir); @@ -135,17 +135,29 @@ vectorp_t get_pawn_moves(int board[8][8], vector_t position, int color) { return init_vectorp(moves, moveCount); } vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) { - + vector_t* moves = malloc(8 * sizeof(vector_t)); + int moveCount = 0; + for(int i = 0; i < 8; i++) { + int h = ((i == 0 || i == 1) ? 2 : (i == 2 || i == 3) ? -2 : (i == 4 || i == 5) ? 1 : -1); + int v = ((i == 0 || i == 2) ? -1 : (i == 1 || i == 3) ? 1 : (i == 4 || i == 6) ? 2 : -2); + 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); } vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { - if(piece == pawn) { - return get_pawn_moves(board, position, 0); - } - else if(piece == pawn + 6) { - return get_pawn_moves(board, position, 1); + int color = 0; + if(piece > 6) { + color = 1; + piece -= 6; } - else if(piece == knight) { - + if(piece == pawn) { + return get_pawn_moves(board, position, color); + } else if(piece == knight) { + return get_knight_moves(board, position, color); } } vector_t user_input_pos() { |
