diff options
author | Robby Zambito <contact@robbyzambito.me> | 2022-01-18 22:37:04 -0500 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2022-01-18 22:37:04 -0500 |
commit | c5c54396bdf8ef14c17a0bc5b8f0fda74aa958cf (patch) | |
tree | 55354c468cb60d52578f70b892f3f8ac885d6c2c /src/board.c | |
parent | 59627145631f254191ce1b9de561c8ba0ddc889e (diff) |
* Made print_board accept a board to print.
* free_board should not return anything.
* is_valid_move and has_valid_moves accept a board.
* Implemented primitives for Scheme strategies to get the current
player, and to get the board, and the validity of a move.
* Removed game logic from is_valid_move. Instead simply apply the move
to a temp board, and see if the move worked.
* Created a very simple strategy for testing these primitives. It only
hardcodes the first move, and then fails since that move is no longer
valid.
Diffstat (limited to 'src/board.c')
-rw-r--r-- | src/board.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/src/board.c b/src/board.c index 62171ff..6859952 100644 --- a/src/board.c +++ b/src/board.c @@ -25,14 +25,12 @@ static enum player_color **board; -enum player_color **get_board(void) { - return board; -} +enum player_color **get_board(void) { return board; } void initialize_board() { - board = malloc(8 * sizeof(enum player_color *)); + board = calloc(8, sizeof(enum player_color *)); for (int i = 0; i < 8; i++) { - board[i] = malloc(8 * sizeof(enum player_color)); + board[i] = calloc(8, sizeof(enum player_color)); } // Set all the positions to empty @@ -49,14 +47,13 @@ void initialize_board() { board[4][4] = WHITE; } - enum player_color get_winner() { int white_score = 0, black_score = 0; for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { - // This takes advantage of the fact that the 1 is the same thing as a true, - // and 0 is the same thing as a false. This will count the number of white - // and black spaces. + // This takes advantage of the fact that the 1 is the same thing as a + // true, and 0 is the same thing as a false. This will count the number of + // white and black spaces. white_score += (int)(board[row][col] == WHITE); black_score += (int)(board[row][col] == BLACK); } @@ -66,3 +63,24 @@ enum player_color get_winner() { : black_score > white_score ? BLACK : EMPTY; } + +// Should be freed be the caller +enum player_color **copy_board(enum player_color **other) { + enum player_color **board = calloc(8, sizeof(enum player_color *)); + + for (int i = 0; i < 8; i++) { + board[i] = calloc(8, sizeof(enum player_color)); + for (int j = 0; j < 8; j++) { + board[i][j] = other[i][j]; + } + } + + return board; +} + +void free_board(enum player_color **board) { + for (int i = 0; i < 8; i++) { + free(board[i]); + } + free(board); +} |