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