diff options
Diffstat (limited to 'src/game_loop.c')
-rw-r--r-- | src/game_loop.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/game_loop.c b/src/game_loop.c index 8186623..f52bdb7 100644 --- a/src/game_loop.c +++ b/src/game_loop.c @@ -28,6 +28,7 @@ #include <string.h> #include "othello.h" +#include "othello_board.h" #include "othello_move.h" #define STREQ(a, b) (strcmp(a, b) == 0) @@ -36,8 +37,26 @@ static enum player_color current_player; enum player_color get_current_player(void) { return current_player; } -struct move (*player_one_get_move)(); -struct move (*player_two_get_move)(); +SCM scm_get_current_player(void) { + switch (current_player) { + case WHITE: + return scm_from_utf8_symbol("white"); + case BLACK: + return scm_from_utf8_symbol("black"); + default: + return scm_from_utf8_symbol("empty"); + } +} + +enum player_color scm_player_to_c_player(SCM player) { + if (scm_is_true(scm_eq_p(player, scm_from_utf8_symbol("white")))) { + return WHITE; + } else if (scm_is_true(scm_eq_p(player, scm_from_utf8_symbol("black")))) { + return BLACK; + } else { + return EMPTY; + } +} static struct move current_player_move(enum player_color current_player, char *player_one_strategy_path, @@ -81,5 +100,5 @@ enum player_color game_loop(char *player_one_strategy_path, rl_clear_history(); } - return get_winner(); + return get_winner(get_board(), current_player, NULL, NULL); } |