diff options
| -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); } } |
