Code:
#include <stdio.h>
#include <stdlib.h>
void print_layout(const char *numbers);
void start_game(int players, char *numbers, char *playagain);
int who_turn(int count);
int play();
int win(char *numbers, char sign);
void valid(int *pcount, char *pturn1, int *pgoodplay, char *numbers);
int main ()
{
int players;
char array [] = {'0','1','2','3','4','5','6','7','8','9'};
char *numbers = array;
char play_again = 'Y';
char *playagain = &play_again;
printf ("Please enter number of players: ");
scanf("%d", &players);
print_layout(numbers);
while (play_again = 'Y')
start_game(players, numbers, playagain);
return 0;
}
void print_layout(const char *numbers)
{
printf("+---+---+---+\n"
"| %c | %c | %c |\n"
"+---+---+--+\n"
"| %c | %c | %c |\n"
"+---+---+---+\n"
"| %c | %c | %c |\n"
"+---+---+---+\n",
numbers[1], numbers[2], numbers[3],
numbers[4], numbers[5], numbers[6],
numbers[7], numbers[8], numbers[9]);
}
int play()
{
int play;
printf("Please enter the number you would like to play: ");
scanf("%d", &play);
system("clear");
return play;
}
void valid(int *pcount, char *pturn1, int *pgoodplay, char *numbers)
{
if (who_turn(*pcount) == 1)
*pturn1 = 'X';
else
*pturn1 = 'O';
*pgoodplay = play();
while (numbers[*pgoodplay] == 'X' || numbers[*pgoodplay] == 'O' || *pgoodplay > 9)
{
print_layout(numbers);
printf("\n");
printf ("This move has already been made, or number out of range\nPlease pick another one: ");
scanf("%d", pgoodplay);
system("clear");
}
numbers[*pgoodplay] = *pturn1;
print_layout(numbers);
*pcount = (*pcount) + 1;
}
void start_game(int players, char *numbers, char *playagain)
{
int goodplay;
int *pgoodplay = &goodplay;
char turn1 = 'X';
char *pturn1 = &turn1;
int count = 1;
int *pcount = &count;
int comp;
int winstat = 0;
while (count <= 9 && winstat < 1)
{
if (players == 2)
{
valid(pcount, pturn1, pgoodplay, numbers);
}
else if (players == 1)
{
if (who_turn(count) == 1)
{
valid(pcount, pturn1, pgoodplay, numbers);
}
else
{
turn1 = 'O';
comp = (rand() % 9 + 1);
while (numbers[comp] == 'X' || numbers[comp] == 'O')
comp = (rand() % 9 + 1);
if ((numbers[1] == 'X' && numbers[2] == 'X') && (numbers[3] != 'X' && numbers[3] != 'O'))
numbers[3] = turn1;
else if ((numbers[1] == 'X' && numbers[3] == 'X') && (numbers[2] != 'X' && numbers[2] != 'O'))
numbers[2] = turn1;
else if ((numbers[2] == 'X' && numbers[3] == 'X') && (numbers[1] != 'X' && numbers[1] != 'O'))
numbers[1] = turn1;
else if ((numbers[4] == 'X' && numbers[5] == 'X') && (numbers[6] != 'X' && numbers[6] != 'O'))
numbers[6] = turn1;
else if ((numbers[4] == 'X' && numbers[6] == 'X') && (numbers[5] != 'X' && numbers[5] != 'O'))
numbers[5] = turn1;
else if ((numbers[5] == 'X' && numbers[6] == 'X') && (numbers[4] != 'X' && numbers[4] != 'O'))
numbers[4] = turn1;
else if ((numbers[7] == 'X' && numbers[8] == 'X') && (numbers[9] != 'X' && numbers[9] != 'O'))
numbers[9] = turn1;
else if ((numbers[7] == 'X' && numbers[9] == 'X') && (numbers[8] != 'X' && numbers[8] != 'O'))
numbers[8] = turn1;
else if ((numbers[8] == 'X' && numbers[9] == 'X') && (numbers[7] != 'X' && numbers[7] != 'O'))
numbers[7] = turn1;
else if ((numbers[1] == 'X' && numbers[4] == 'X') && (numbers[7] != 'X' && numbers[7] != 'O'))
numbers[7] = turn1;
else if ((numbers[1] == 'X' && numbers[7] == 'X') && (numbers[4] != 'X' && numbers[4] != 'O'))
numbers[4] = turn1;
else if ((numbers[4] == 'X' && numbers[7] == 'X') && (numbers[1] != 'X' && numbers[1] != 'O'))
numbers[1] = turn1;
else if ((numbers[2] == 'X' && numbers[5] == 'X') && (numbers[8] != 'X' && numbers[8] != 'O'))
numbers[8] = turn1;
else if ((numbers[2] == 'X' && numbers[8] == 'X') && (numbers[5] != 'X' && numbers[5] != 'O'))
numbers[5] = turn1;
else if ((numbers[5] == 'X' && numbers[8] == 'X') && (numbers[2] != 'X' && numbers[2] != 'O'))
numbers[2] = turn1;
else if ((numbers[3] == 'X' && numbers[6] == 'X') && (numbers[9] != 'X' && numbers[9] != 'O'))
numbers[9] = turn1;
else if ((numbers[3] == 'X' && numbers[9] == 'X') && (numbers[6] != 'X' && numbers[6] != 'O'))
numbers[6] = turn1;
else if ((numbers[6] == 'X' && numbers[9] == 'X') && (numbers[3] != 'X' && numbers[3] != 'O'))
numbers[3] = turn1;
else if ((numbers[1] == 'X' && numbers[5] == 'X') && (numbers[9] != 'X' && numbers[9] != 'O'))
numbers[9] = turn1;
else if ((numbers[1] == 'X' && numbers[9] == 'X') && (numbers[5] != 'X' && numbers[5] != 'O'))
numbers[5] = turn1;
else if ((numbers[5] == 'X' && numbers[9] == 'X') && (numbers[1] != 'X' && numbers[1] != 'O'))
numbers[1] = turn1;
else if ((numbers[3] == 'X' && numbers[5] == 'X') && (numbers[7] != 'X' && numbers[7] != 'O'))
numbers[7] = turn1;
else if ((numbers[3] == 'X' && numbers[7] == 'X') && (numbers[5] != 'X' && numbers[5] != 'O'))
numbers[5] = turn1;
else if ((numbers[5] == 'X' && numbers[7] == 'X') && (numbers[3] != 'X' && numbers[3] != 'O'))
numbers[3] = turn1;
else
numbers[comp] = turn1;
system("clear");
print_layout(numbers);
count ++;
}
}
if (count >= 3)
{
winstat = win(numbers, turn1);
}
}
if (winstat == 0)
printf("\n\n TIIEEE!!!!\n\n");
else if (winstat == 1)
printf("\n\nPlayer 1 Wins!!!!!!!!!!!!!!!!!\n\n");
else if (winstat == 2 && players == 2)
printf("\n\nPlayer 2 Wins!!!!!!!!!!!!!!!!!\n\n");
else if (winstat == 2 && players == 1)
printf("\n\n Computer has WON!!!\n\n");
getchar();
printf("Do you want to play again (Y or N): ");
scanf("%c", playagain);
if (*playagain == 'Y' || *playagain == 'y')
{
win(numbers, 'W');
count = 0;
char i;
for (i = '0'; i <= '9'; i++)
numbers[i - '0'] = i;
print_layout(numbers);
}
else
exit(0);
}
int who_turn(int count)
{
if (count % 2 == 0)
return 2;
else
return 1;
}
int win(char *numbers, char sign)
{
if ((numbers[1] == sign && numbers[2] == sign && numbers[3] == sign) ||
(numbers[4] == sign && numbers[5] == sign && numbers[6] == sign) ||
(numbers[7] == sign && numbers[8] == sign && numbers[9] == sign) ||
(numbers[1] == sign && numbers[4] == sign && numbers[7] == sign) ||
(numbers[2] == sign && numbers[5] == sign && numbers[8] == sign) ||
(numbers[3] == sign && numbers[6] == sign && numbers[9] == sign) ||
(numbers[1] == sign && numbers[5] == sign && numbers[9] == sign) ||
(numbers[3] == sign && numbers[5] == sign && numbers[7] == sign) )
{
if (sign == 'X')
return 1;
else if (sign == 'O')
return 2;
}
else
return 0;
}