summaryrefslogtreecommitdiff
path: root/src/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/board.c')
-rw-r--r--src/board.c36
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);
+}