/* This file is a part of othello-ai-guile-c * * Copyright (C) 2021 Robby Zambito * * othello-ai-guile-c is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * othello-ai-guile-c is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #define _GNU_SOURCE #include #include "othello.h" #include "othello_move.h" static enum player_color **board; enum player_color **get_board(void) { return board; } void initialize_board() { board = calloc(8, sizeof(enum player_color *)); for (int i = 0; i < 8; i++) { board[i] = calloc(8, sizeof(enum player_color)); } // Set all the positions to empty for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { board[i][j] = EMPTY; } } // Fill the starting positions board[3][3] = WHITE; board[3][4] = BLACK; board[4][3] = BLACK; 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. white_score += (int)(board[row][col] == WHITE); black_score += (int)(board[row][col] == BLACK); } } return white_score > black_score ? WHITE : 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); }