diff options
author | Robby Zambito <contact@robbyzambito.me> | 2021-12-29 22:39:07 -0500 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2021-12-29 22:49:59 -0500 |
commit | b9113f203b831e8d4f7cfeeff4701b07da0ea44e (patch) | |
tree | f0bb9cb7d900a388d0db6e1e2671583c12f5360f /src/game_loop.c | |
parent | ab8cf4fab8a83b95f66ed8c0d76ec2200a23c847 (diff) |
Do not pass board around
Instead use the get_board() function to get a reference to the board.
Diffstat (limited to 'src/game_loop.c')
-rw-r--r-- | src/game_loop.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/src/game_loop.c b/src/game_loop.c index 4674e44..c11f473 100644 --- a/src/game_loop.c +++ b/src/game_loop.c @@ -31,10 +31,18 @@ #define STREQ(a, b) (strcmp(a, b) == 0) -struct move (*player_one_get_move)(enum player_color board[8][8], - enum player_color current_player); -struct move (*player_two_get_move)(enum player_color board[8][8], - enum player_color current_player); +static enum player_color current_player; + +enum player_color get_current_player(void) { return current_player; } + +static enum player_color **board; + +const enum player_color **get_board(void) { + return (const enum player_color **)board; +} + +struct move (*player_one_get_move)(); +struct move (*player_two_get_move)(); static enum player_color other_player(enum player_color current_player) { switch (current_player) { @@ -76,8 +84,7 @@ static void inner_main(void *closure, int argc, char **argv) { scm_shell(argc, argv); } -static struct move prompt_get_move(enum player_color board[8][8], - enum player_color current_player) { +static struct move prompt_get_move(enum player_color current_player) { // Initialize move to an invalid move. struct move move = {-1, -1}; @@ -90,7 +97,7 @@ static struct move prompt_get_move(enum player_color board[8][8], if (STREQ(input, "h")) { print_help(); } else if (STREQ(input, "p")) { - print_board(board); + print_board(); } else if (STREQ(input, "g")) { int argc = 1; char **argv = calloc(1, sizeof(char *)); @@ -108,14 +115,13 @@ static struct move prompt_get_move(enum player_color board[8][8], } free(input); - } while (!is_valid_move(board, current_player, move)); + } while (!is_valid_move(current_player, move)); return move; } /* Returns true if the move was valid */ -static bool apply_move(enum player_color board[8][8], - enum player_color current_player, struct move move) { +static bool apply_move(enum player_color current_player, struct move move) { // Flip in up direction bool flipped_up = false; @@ -168,24 +174,16 @@ static bool apply_move(enum player_color board[8][8], return flipped_up || flipped_down || flipped_left || flipped_right; } -static enum player_color current_player; - -enum player_color get_current_player(void) { return current_player; } - -static enum player_color board[8][8]; - -const enum player_color **get_board(void) { - return (const enum player_color **)board; -} -enum player_color game_loop(enum player_color init_board[8][8]) { +enum player_color game_loop() { + initialize_board(&board); using_history(); current_player = WHITE; - while (has_valid_moves(board, current_player)) { - struct move move = prompt_get_move(board, current_player); - apply_move(board, current_player, move); + while (has_valid_moves(current_player)) { + struct move move = prompt_get_move(current_player); + apply_move(current_player, move); current_player = other_player(current_player); } |