diff --git a/src/main.cpp b/src/main.cpp index 75e7732..ed223af 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include // 0 | 1 | 2 // --------- @@ -12,7 +12,7 @@ int get_player_input(){ //TODO get player input - return rand() % 9; + return rand()%9; } struct game_state { @@ -20,26 +20,71 @@ struct game_state { char board[TILE_COUNT]; }; -void game_turn(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(const game_state& gs){ - printf("turn %i:\n", gs.turn); - for(int i = 0; i < TILE_COUNT; i++){ - printf("[%i]:%c\n", i, gs.board[i]); +void display_game_state(struct game_state * gs){ + printf("turn %i:\n",gs->turn); + 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)); - game_state gs = {0}; - while(gs.turn < TILE_COUNT){ - game_turn(gs, get_player_input()); - display_game_state(gs); + struct game_state gs = {0,0}; + while(exists_empty_tile(&gs) && gs.turn!=-1){ + game_turn(&gs,get_player_input()); } }