diff options
author | Robby Zambito <contact@robbyzambito.me> | 2022-01-21 20:00:28 -0500 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2022-01-21 20:00:28 -0500 |
commit | 42a6b86d27751b3dec95dd64b4996ea13ad58a10 (patch) | |
tree | b2b79175d89e589fab3f4dbdb5d63199dc79fc55 /src | |
parent | 560016b243bc52f721153272a3809f6271215a25 (diff) |
Added Scheme procedure to easily get the other player
Diffstat (limited to 'src')
-rw-r--r-- | src/game_loop.c | 16 | ||||
-rw-r--r-- | src/move.c | 1 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/game_loop.c b/src/game_loop.c index 2c70ce2..2af20bd 100644 --- a/src/game_loop.c +++ b/src/game_loop.c @@ -34,11 +34,18 @@ #define STREQ(a, b) (strcmp(a, b) == 0) static enum player_color current_player; +#define other_player (current_player == WHITE ? BLACK : WHITE) enum player_color get_current_player(void) { return current_player; } -SCM scm_get_current_player(void) { - switch (current_player) { +SCM scm_get_current_player() { + return scm_player_from_c_player(current_player); +} + +SCM scm_get_other_player() { return scm_player_from_c_player(other_player); } + +SCM scm_player_from_c_player(enum player_color player) { + switch (player) { case WHITE: return scm_from_utf8_symbol("white"); case BLACK: @@ -85,7 +92,6 @@ enum player_color game_loop(char *player_one_strategy_path, } current_player = WHITE; -#define other_player (current_player == WHITE ? BLACK : WHITE) while (has_valid_moves(get_board(), current_player)) { struct move move = current_player_move( @@ -95,11 +101,11 @@ enum player_color game_loop(char *player_one_strategy_path, } } -#undef other_player - if (player_one_strategy_path == NULL || player_two_strategy_path == NULL) { rl_clear_history(); } return get_winner(get_board(), current_player, white_score, black_score); } + +#undef other_player @@ -281,6 +281,7 @@ struct move get_scm_move(char *strategy_path) { // Initialize primitives scm_c_define_gsubr("get-board", 0, 0, 0, scm_get_board); scm_c_define_gsubr("current-player", 0, 0, 0, scm_get_current_player); + scm_c_define_gsubr("other-player", 0, 0, 0, scm_get_other_player); scm_c_define_gsubr("valid-move?", 1, 2, 0, scm_is_valid_move); scm_c_define_gsubr("valid-moves", 0, 2, 0, scm_valid_moves); scm_c_define_gsubr("apply-move", 1, 2, 0, scm_apply_move); |