#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char a[ 9 ] ;
// Print the Tic Tac Toe field
void print_the_field( ) {
for ( int i = 0 ; i < 9 ; i++ ) {
if ( a[ i] == ' ' ) printf ( "%d" , i + 1 ) ;
else printf ( "%c" , a[ i] ) ;
if ( i % 3 == 2 ) {
if ( i ! = 8 ) printf ( "\n -+-+-\n " ) ;
else printf ( "\n " ) ;
} else {
printf ( "|" ) ;
}
}
printf ( "\n " ) ;
}
// Check for win, loss, draw, or ongoing
int check( ) {
int wins[ 8 ] [ 3 ] = {
{ 0 , 1 , 2 } ,
{ 3 , 4 , 5 } ,
{ 6 , 7 , 8 } ,
{ 0 , 3 , 6 } ,
{ 1 , 4 , 7 } ,
{ 2 , 5 , 8 } ,
{ 0 , 4 , 8 } ,
{ 2 , 4 , 6 }
} ;
for ( int i = 0 ; i < 8 ; i++ ) {
if ( a[ wins[ i] [ 0 ] ] ! = ' ' &&
a[ wins[ i] [ 0 ] ] == a[ wins[ i] [ 1 ] ] &&
a[ wins[ i] [ 1 ] ] == a[ wins[ i] [ 2 ] ] ) {
if ( a[ wins[ i] [ 0 ] ] == 'X' ) return 1 ;
else return 2 ;
}
}
for ( int i = 0 ; i < 9 ; i++ ) {
if ( a[ i] == ' ' ) return 0 ;
}
return 3 ; // Draw
}
int main( ) {
srand ( time ( 0 ) ) ;
for ( int i = 0 ; i < 9 ; i++ ) a[ i] = ' ' ;
int turn = 0 ;
while ( 1 ) {
if ( turn == 0 ) {
printf ( "Enter the number of the cell: " ) ;
int x;
scanf ( "%d" , & x) ;
x-- ;
if ( x < 0 || x >= 9 || a[ x] ! = ' ' ) {
printf ( "Invalid cell number. Try again.\n " ) ;
system ( "pause" ) ;
continue ;
}
a[ x] = 'X' ;
int res = check( ) ;
if ( res ! = 0 ) {
print_the_field( ) ;
if ( res == 1 ) printf ( "You Win!\n " ) ;
else if ( res == 2 ) printf ( "Computer Wins!\n " ) ;
else printf ( "It's a Draw!\n " ) ;
break ;
}
turn = 1 ;
} else {
int x;
while ( 1 ) {
x = rand ( ) % 9 ;
if ( a[ x] == ' ' ) {
a[ x] = 'O' ;
break ;
}
}
printf ( "Computer chose cell %d\n " , x + 1 ) ;
int res = check( ) ;
if ( res ! = 0 ) {
print_the_field( ) ;
if ( res == 1 ) printf ( "You Win!\n " ) ;
else if ( res == 2 ) printf ( "Computer Wins!\n " ) ;
else printf ( "It's a Draw!\n " ) ;
break ;
}
turn = 0 ;
}
system ( "cls" ) ;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCmNoYXIgYVs5XTsKCi8vIFByaW50IHRoZSBUaWMgVGFjIFRvZSBmaWVsZAp2b2lkIHByaW50X3RoZV9maWVsZCgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CiAgICAgICAgaWYgKGFbaV0gPT0gJyAnKSBwcmludGYoIiVkIiwgaSArIDEpOwogICAgICAgIGVsc2UgcHJpbnRmKCIlYyIsIGFbaV0pOwoKICAgICAgICBpZiAoaSAlIDMgPT0gMikgewogICAgICAgICAgICBpZiAoaSAhPSA4KSBwcmludGYoIlxuLSstKy1cbiIpOwogICAgICAgICAgICBlbHNlIHByaW50ZigiXG4iKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludGYoInwiKTsKICAgICAgICB9CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCi8vIENoZWNrIGZvciB3aW4sIGxvc3MsIGRyYXcsIG9yIG9uZ29pbmcKaW50IGNoZWNrKCkgewogICAgaW50IHdpbnNbOF1bM10gPSB7CiAgICAgICAgezAsIDEsIDJ9LAogICAgICAgIHszLCA0LCA1fSwKICAgICAgICB7NiwgNywgOH0sCiAgICAgICAgezAsIDMsIDZ9LAogICAgICAgIHsxLCA0LCA3fSwKICAgICAgICB7MiwgNSwgOH0sCiAgICAgICAgezAsIDQsIDh9LAogICAgICAgIHsyLCA0LCA2fQogICAgfTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIGlmIChhW3dpbnNbaV1bMF1dICE9ICcgJyAmJgogICAgICAgICAgICBhW3dpbnNbaV1bMF1dID09IGFbd2luc1tpXVsxXV0gJiYKICAgICAgICAgICAgYVt3aW5zW2ldWzFdXSA9PSBhW3dpbnNbaV1bMl1dKSB7CiAgICAgICAgICAgIGlmKGFbd2luc1tpXVswXV0gPT0gJ1gnKSByZXR1cm4gMTsKICAgICAgICAgICAgZWxzZSByZXR1cm4gMjsgICAgCiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CiAgICAgICAgaWYgKGFbaV0gPT0gJyAnKSByZXR1cm4gMDsKICAgIH0KCiAgICByZXR1cm4gMzsgLy8gRHJhdwp9CgppbnQgbWFpbigpIHsKICAgIHNyYW5kKHRpbWUoMCkpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSBhW2ldID0gJyAnOwoKICAgIGludCB0dXJuID0gMDsKCiAgICB3aGlsZSAoMSkgewoKICAgICAgICBpZiAodHVybiA9PSAwKSB7CiAgICAgICAgICAgIHByaW50ZigiRW50ZXIgdGhlIG51bWJlciBvZiB0aGUgY2VsbDogIik7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBzY2FuZigiJWQiLCAmeCk7CiAgICAgICAgICAgIHgtLTsKCiAgICAgICAgICAgIGlmICh4IDwgMCB8fCB4ID49IDkgfHwgYVt4XSAhPSAnICcpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBjZWxsIG51bWJlci4gVHJ5IGFnYWluLlxuIik7CiAgICAgICAgICAgICAgICBzeXN0ZW0oInBhdXNlIik7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYVt4XSA9ICdYJzsKCiAgICAgICAgICAgIGludCByZXMgPSBjaGVjaygpOwogICAgICAgICAgICBpZiAocmVzICE9IDApIHsKICAgICAgICAgICAgICAgIHByaW50X3RoZV9maWVsZCgpOwogICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAxKSBwcmludGYoIllvdSBXaW4hXG4iKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcyA9PSAyKSBwcmludGYoIkNvbXB1dGVyIFdpbnMhXG4iKTsKICAgICAgICAgICAgICAgIGVsc2UgcHJpbnRmKCJJdCdzIGEgRHJhdyFcbiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHR1cm4gPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgICAgeCA9IHJhbmQoKSAlIDk7CiAgICAgICAgICAgICAgICBpZiAoYVt4XSA9PSAnICcpIHsKICAgICAgICAgICAgICAgICAgICBhW3hdID0gJ08nOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmludGYoIkNvbXB1dGVyIGNob3NlIGNlbGwgJWRcbiIsIHggKyAxKTsKCiAgICAgICAgICAgIGludCByZXMgPSBjaGVjaygpOwogICAgICAgICAgICBpZiAocmVzICE9IDApIHsKICAgICAgICAgICAgICAgIHByaW50X3RoZV9maWVsZCgpOwogICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAxKSBwcmludGYoIllvdSBXaW4hXG4iKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcyA9PSAyKSBwcmludGYoIkNvbXB1dGVyIFdpbnMhXG4iKTsKICAgICAgICAgICAgICAgIGVsc2UgcHJpbnRmKCJJdCdzIGEgRHJhdyFcbiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHR1cm4gPSAwOwogICAgICAgIH0KICAgICAgICBzeXN0ZW0oImNscyIpOyAKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=