From 3cc4d74b35601e2941b7ca66fde76ac03775cdb8 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Fri, 2 Dec 2022 14:20:14 -0800 Subject: added pawn capture --- chess.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/chess.c b/chess.c index 9cf9a76..c8de4fc 100644 --- a/chess.c +++ b/chess.c @@ -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); } } -- cgit v1.3.1