Merge remote-tracking branch 'our_old_dick/master' into master

This commit is contained in:
r0nk 2020-08-14 22:29:15 -05:00
commit d42990d57b

View File

@ -1,6 +1,6 @@
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <stdlib.h>
#include <time.h>
// 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;i<TILE_COUNT;i++)
if(!gs->board[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());
}
}