commit 106ccb207c60f0b4f26af0aa3772e44a96750ea2
parent 162f59d5d402ba056cdf4bcb827e999d0bd24ca9
Author: Wilson Gheen <wilson@wilsonrgheen.com>
Date: Sun, 18 Dec 2022 06:16:16 -0600
Enable two different `get_move*()`s in one game
Diffstat:
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/tictactoe.c b/tictactoe.c
@@ -22,16 +22,18 @@ static void print_board(char *board) {
print_board_offset(board, 0, 0, 1);
}
-char play(char (*get_move)(char*, char)) {
+char play(char (*get_move)(char*, char), char (*get_move_2)(char*, char)) {
struct tb_event ev;
char board[9] = " ";
char winner = 0;
char player = 'O';
+ if(get_move_2 == NULL)
+ get_move_2 = get_move;
if(!SIDE_BY_SIDE)
print_board(board);
for(int turns=0; !winner && turns < 9; turns++) {
+ winner = (turns & 1) ? get_move(board, player) : get_move_2(board, player);
player = (player == 'O' ? 'X' : 'O');
- winner = get_move(board, player);
if(SIDE_BY_SIDE)
print_board_offset(board, turns * 10, 0, 0);
else
@@ -45,7 +47,7 @@ char play(char (*get_move)(char*, char)) {
int main(void) {
struct tb_event ev;
tb_init();
- char winner = play(get_winning_move_else_random);
+ char winner = play(get_winning_move_else_block_else_random, NULL);
if(winner)
print_msg("%c wins.", winner);
else
diff --git a/unit_test.c b/unit_test.c
@@ -27,7 +27,7 @@ int main() {
puts( "--------");
printf("Testing %s -- expecting '%s' ...\n", b->name, b->expected_result);
set_board(b->name);
- char winner = play(get_move_preset_board);
+ char winner = play(get_move_preset_board, NULL);
if(winner)
sprintf(actual_result, "%c WINS", winner);
else