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.c25
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);
}