diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2022-12-02 14:20:14 -0800 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2022-12-02 14:20:14 -0800 |
| commit | 3cc4d74b35601e2941b7ca66fde76ac03775cdb8 (patch) | |
| tree | 503302430eddee843e5b8e6af69b74e950d83ee0 /chess.c | |
| parent | ef86ae01c852d79555606ca59af17a07287346d1 (diff) | |
added pawn capture
Diffstat (limited to 'chess.c')
| -rw-r--r-- | chess.c | 36 |
1 files changed, 28 insertions, 8 deletions
@@ -97,43 +97,63 @@ int in_board(vector_t position) { int is_empty(int board[8][8], vector_t position) { return board[position.mx][position.my] == 0; } -int get_owner(int board[8][8], vector_t position) { - +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 vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) { 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[0] = 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[1] = move2; + moves[moveCount] = move2; moveCount++; } } } vector_t captureL = init_vector(position.mx - 1, position.my - 1); - if(in_board(captureL) && + 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); } else if(piece == pawn + 6) { vector_t move1 = init_vector(position.mx, position.my + 1); if(in_board(move1) && is_empty(board, move1)) { - moves[0] = 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[1] = 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); } } |
