diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2022-12-03 16:50:15 -0800 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2022-12-03 16:50:15 -0800 |
| commit | 3d0c89b86e5f19648871597ffc07201d95fbf4fc (patch) | |
| tree | 1e7c15c21ba241c0b5fcda3966f586734aab93d0 /chess.c | |
| parent | 3cc4d74b35601e2941b7ca66fde76ac03775cdb8 (diff) | |
refactored get_moves function
Diffstat (limited to 'chess.c')
| -rw-r--r-- | chess.c | 93 |
1 files changed, 42 insertions, 51 deletions
@@ -97,64 +97,55 @@ int in_board(vector_t position) { int is_empty(int board[8][8], vector_t position) { return board[position.mx][position.my] == 0; } -int is_white(int board[8][8], vector_t position) { - return board[position.mx][position.my] >= 1 && board[position.mx][position.my] <= 6; -} -int is_black(int board[8][8], vector_t position) { - return board[position.mx][position.my] >= 7; +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; + } } -vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { +//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)); int moveCount = 0; - if(piece == pawn) { - vector_t move1 = init_vector(position.mx, position.my - 1); - if(in_board(move1) && is_empty(board, move1)) { - moves[moveCount] = move1; - moveCount++; - if(position.my == 6) { - vector_t move2 = init_vector(position.mx, position.my - 2); - if(is_empty(board, move2)) { - moves[moveCount] = move2; - moveCount++; - } + int forwardDir = (color == 0 ? -1 : 1); + vector_t move1 = init_vector(position.mx, position.my + forwardDir); + if(in_board(move1) && is_empty(board, move1)) { + moves[moveCount] = move1; + moveCount++; + if(position.my == (color == 0 ? 6 : 1)) { + vector_t move2 = init_vector(position.mx, position.my + (forwardDir * 2)); + if(is_empty(board, move2)) { + moves[moveCount] = move2; + moveCount++; } } - vector_t captureL = init_vector(position.mx - 1, position.my - 1); - if(in_board(captureL) && is_black(board, captureL)) { - moves[moveCount] = captureL; - moveCount++; - } - vector_t captureR = init_vector(position.mx + 1, position.my - 1); - if(in_board(captureR) && is_black(board, captureR)) { - moves[moveCount] = captureR; - moveCount++; - } - return init_vectorp(moves, moveCount); + } + vector_t captureL = init_vector(position.mx - 1, position.my + forwardDir); + if(in_board(captureL) && is_color(board, captureL, !color)) { + moves[moveCount] = captureL; + moveCount++; + } + vector_t captureR = init_vector(position.mx + 1, position.my + forwardDir); + if(in_board(captureR) && is_color(board, captureR, !color)) { + moves[moveCount] = captureR; + moveCount++; + } + return init_vectorp(moves, moveCount); +} +vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) { + +} +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) { - vector_t move1 = init_vector(position.mx, position.my + 1); - if(in_board(move1) && is_empty(board, move1)) { - moves[moveCount] = move1; - moveCount++; - if(position.my == 1) { - vector_t move2 = init_vector(position.mx, position.my + 2); - if(is_empty(board, move2)) { - moves[moveCount] = move2; - moveCount++; - } - } - } - vector_t captureL = init_vector(position.mx - 1, position.my + 1); - if(in_board(captureL) && is_white(board, captureL)) { - moves[moveCount] = captureL; - moveCount++; - } - vector_t captureR = init_vector(position.mx + 1, position.my + 1); - if(in_board(captureR) && is_white(board, captureR)) { - moves[moveCount] = captureR; - moveCount++; - } - return init_vectorp(moves, moveCount); + return get_pawn_moves(board, position, 1); + } + else if(piece == knight) { + } } vector_t user_input_pos() { |
