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