From f721c67b4533b10345760308e80b92e268a86fe5 Mon Sep 17 00:00:00 2001 From: r0nk Date: Fri, 14 Aug 2020 22:16:27 -0500 Subject: [PATCH] full tic tac toe logic. --- src/main.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6b777e3..ed223af 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,26 +20,71 @@ struct game_state { char board[TILE_COUNT]; }; -void game_turn(struct game_state * gs,int player_input){ - if(player_input > TILE_COUNT && player_input < 0) - fprintf(stderr,"ERR: player input not in range."); - if(!gs->board[player_input]) - gs->board[player_input]='O'; - gs->turn++; +int check_win_condition(struct game_state * gs, char player) { + int i; + for(i=0;i<3;i++){ + //rows + if(gs->board[(i*3)]==player && gs->board[(i*3)+1]==player && gs->board[(i*3)+2]==player) + return 1; + //column + if(gs->board[i]==player && gs->board[i+3]==player && gs->board[i+6]==player) + return 1; + } + if(gs->board[0] == player && gs->board[4] == player && gs->board[8] == player) + return 1; + if(gs->board[2] == player && gs->board[4] == player && gs->board[6] == player) + return 1; + + return 0; } void display_game_state(struct game_state * gs){ printf("turn %i:\n",gs->turn); - for(int i=0;iboard[i]); + for(int i=0;i<3;i++){ + for(int j=0;j<3;j++){ + if(gs->board[(i*3)+j]) + printf("%c",gs->board[(i*3)+j]); + else + printf("_"); + } + printf("\n"); } } +void player_turn(struct game_state * gs, char player, int input) +{ + if(input > TILE_COUNT && input < 0) + fprintf(stderr,"ERR: player input not in range."); + if(!gs->board[input]) + gs->board[input]=player; + if(check_win_condition(gs,player)){ + printf("player %c wins!\n",player); + gs->turn=-1; + } +} + +void game_turn(struct game_state * gs,int player_input){ + gs->turn++; + player_turn(gs,'O',player_input); + display_game_state(gs); + if(gs->turn==-1) + return; + player_turn(gs,'X',rand()%TILE_COUNT); + display_game_state(gs); +} + +int exists_empty_tile(struct game_state * gs){ + int i; + for(i=0;iboard[i]) + return 1; + return 0; +} + int main(){ srand(time(NULL)); - struct game_state gs = {0}; - while(gs.turn