full tic tac toe logic.
This commit is contained in:
parent
2bf1f009d7
commit
f721c67b45
67
src/main.cpp
67
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;i<TILE_COUNT;i++){
|
||||
printf("[%i]:%c\n",i,gs->board[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;i<TILE_COUNT;i++)
|
||||
if(!gs->board[i])
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(){
|
||||
srand(time(NULL));
|
||||
struct game_state gs = {0};
|
||||
while(gs.turn<TILE_COUNT){
|
||||
struct game_state gs = {0,0};
|
||||
while(exists_empty_tile(&gs) && gs.turn!=-1){
|
||||
game_turn(&gs,get_player_input());
|
||||
display_game_state(&gs);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user