/* Um exemplo de jogo-da-velha simples */
#include <stdio.h>
#include <stdlib.h>
char matrix[ 3 ] [ 3 ] ; /* A matriz do jogo */
char check( void ) ;
void int_matrix( void ) ;
void get_player_move( void ) ;
void get_computer_move( void ) ;
void disp_matrix( void ) ;
void main( void )
{
char done;
printf ( "Este é o jogo-da-velha\n " ) ; printf ( "Você estará jogando contra o computador\n " ) ;
done = ' ' ;
init_matrix( ) ;
do {
disp_matrix( ) ;
get_player_move( ) ;
done = check( ) ; /* Verifica se há vencedor */
if ( done!= ' ' ) break ; /* Vencedor */
get_computer_move( ) ;
done = check( ) ; /* Verifica se há vencedor */
} while ( done == ' ' ) ;
if ( done
== 'X' ) printf ( "Voce ganhou!\n " ) ; disp_matrix( ) ; /* Mostra as posições finais */
}
/* Inicializa a matriz */
void init_matrix( void )
{
int i, j;
for ( i= 0 ; i< 3 ; i++ )
for ( j= 0 ; j< 3 ; j++ ) matrix[ i] [ j] = ' ' ;
}
/* Obtém a sua jogada */
void get_player_move( void )
{
int x, y;
printf ( "Digite as coordenadas para o X: " ) ;
x--; y--;
if ( matrix[ x] [ y] != ' ' ) {
printf ( "Posicao invalida, tente novamente\n " ) ; get_player_move( ) ;
}
else matrix[ x] [ y] = 'X' ;
}
/* Obtém uma jogada do computador */
void get_computer_move( void )
{
int i, j;
for ( i= 0 ; i< 3 ; i++ ) {
for ( j= 0 ; j< 3 ; j++ )
if ( matrix[ i] [ j] == ' ' ) break ;
if ( matrix[ i] [ j] == ' ' ) break ;
}
if ( i* j == 9 ) {
}
else
matrix[ i] [ j] = 'O' ;
}
/* Mostra a matriz na tela */
void disp_matrix( void )
{
int t;
for ( t= 0 ; t< 3 ; t++ ) {
printf ( " %c | %c | %c " , matrix
[ t
] [ 0 ] , matrix
[ t
] [ 1 ] , matrix
[ t
] [ 2 ] ) ; if ( t
!= 2 ) printf ( "\n ---|---|---\n " ) ; }
}
/* Verifica se há um vencedor */
char check( void )
{
int i;
for ( i= 0 ; i< 3 ; i++ ) /* Verifica as linhas */
if ( matrix[ i] [ 0 ] == matrix[ i] [ 1 ] && matrix[ i] [ 0 ] == matriz[ i] [ 2 ] ) return matrix[ i] [ 0 ] ;
for ( i= 0 ; i< 3 ; i++ ) /* Verifica as colunas */
if ( matrix[ 0 ] [ i] == matrix[ 1 ] [ i] && matrix[ 0 ] [ i] == matrix[ 2 ] [ i] ) return matrix[ 0 ] [ i] ;
/* Testa as diagonais */
if ( matrix[ 0 ] [ 0 ] == matrix[ 1 ] [ 1 ] && matrix[ 1 ] [ 1 ] == matriz[ 2 ] [ 2 ] ) return matrix[ 0 ] [ 0 ] ;
if ( matrix[ 0 ] [ 2 ] == matrix[ 1 ] [ 1 ] && matrix[ 1 ] [ 1 ] == matriz[ 2 ] [ 0 ] ) return matrix[ 0 ] [ 2 ] ;
return ' ' ;
}
LyogVW0gZXhlbXBsbyBkZSBqb2dvLWRhLXZlbGhhIHNpbXBsZXMgKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmNoYXIgbWF0cml4WzNdWzNdOyAvKiBBIG1hdHJpeiBkbyBqb2dvICovCgpjaGFyIGNoZWNrKHZvaWQpOwp2b2lkIGludF9tYXRyaXgodm9pZCk7CnZvaWQgZ2V0X3BsYXllcl9tb3ZlKHZvaWQpOwp2b2lkIGdldF9jb21wdXRlcl9tb3ZlKHZvaWQpOwp2b2lkIGRpc3BfbWF0cml4KHZvaWQpOwoKdm9pZCBtYWluKHZvaWQpCnsKY2hhciBkb25lOwoKcHJpbnRmKCJFc3RlIMOpIG8gam9nby1kYS12ZWxoYVxuIik7CnByaW50ZigiVm9jw6ogZXN0YXLDoSBqb2dhbmRvIGNvbnRyYSBvIGNvbXB1dGFkb3JcbiIpOwoKZG9uZSA9ICcgJzsKaW5pdF9tYXRyaXgoKTsKZG97CiAgICBkaXNwX21hdHJpeCgpOwogICAgZ2V0X3BsYXllcl9tb3ZlKCk7CiAgICBkb25lID0gY2hlY2soKTsgLyogVmVyaWZpY2Egc2UgaMOhIHZlbmNlZG9yICovCiAgICBpZihkb25lIT0nICcpIGJyZWFrOyAvKiBWZW5jZWRvciAqLwogICAgZ2V0X2NvbXB1dGVyX21vdmUoKTsKICAgIGRvbmUgPSBjaGVjaygpOyAvKiBWZXJpZmljYSBzZSBow6EgdmVuY2Vkb3IgKi8KfSB3aGlsZShkb25lID09ICcgJyk7CmlmKGRvbmUgPT0gJ1gnKSBwcmludGYoIlZvY2UgZ2FuaG91IVxuIik7CmVsc2UgcHJpbnRmKCJFdSBnYW5oZWkhXG4iKTsKZGlzcF9tYXRyaXgoKTsgLyogTW9zdHJhIGFzIHBvc2nDp8O1ZXMgZmluYWlzICovCn0KCi8qIEluaWNpYWxpemEgYSBtYXRyaXogKi8KCnZvaWQgaW5pdF9tYXRyaXgodm9pZCkKewppbnQgaSwgajsKCmZvcihpPTA7IGk8MzsgaSsrKQogICAgZm9yKGo9MDsgajwzOyBqKyspIG1hdHJpeFtpXVtqXSA9ICcgJzsKfQoKLyogT2J0w6ltIGEgc3VhIGpvZ2FkYSAqLwoKdm9pZCBnZXRfcGxheWVyX21vdmUodm9pZCkKewppbnQgeCwgeTsKCnByaW50ZigiRGlnaXRlIGFzIGNvb3JkZW5hZGFzIHBhcmEgbyBYOiAiKTsKc2NhbmYoIiVkJWQiLCAmeCwgJnkpOwoKeC0tOyB5LS07CgppZihtYXRyaXhbeF1beV0gIT0gJyAnKXsKICAgIHByaW50ZigiUG9zaWNhbyBpbnZhbGlkYSwgdGVudGUgbm92YW1lbnRlXG4iKTsKICAgIGdldF9wbGF5ZXJfbW92ZSgpOwp9CmVsc2UgbWF0cml4W3hdW3ldID0gJ1gnOwp9CgovKiBPYnTDqW0gdW1hIGpvZ2FkYSBkbyBjb21wdXRhZG9yICovCgp2b2lkIGdldF9jb21wdXRlcl9tb3ZlKHZvaWQpCnsKaW50IGksIGo7CmZvcihpPTA7IGk8MzsgaSsrKXsKICAgIGZvcihqPTA7IGo8MzsgaisrKQogICAgICAgIGlmKG1hdHJpeFtpXVtqXSA9PSAnICcpIGJyZWFrOwogICAgaWYobWF0cml4W2ldW2pdID09ICcgJykgYnJlYWs7Cn0KaWYoaSpqID09IDkpewogICAgcHJpbnRmKCJFbXBhdGVcbiIpOwogICAgZXhpdCgwKTsKfQplbHNlCiAgICBtYXRyaXhbaV1bal0gPSAnTyc7Cn0KCi8qIE1vc3RyYSBhIG1hdHJpeiBuYSB0ZWxhICovCgp2b2lkIGRpc3BfbWF0cml4KHZvaWQpCnsKaW50IHQ7Cgpmb3IodD0wOyB0PDM7IHQrKyl7CiAgICBwcmludGYoIiAlYyB8ICVjIHwgJWMgIiwgbWF0cml4W3RdWzBdLCBtYXRyaXggW3RdWzFdLCBtYXRyaXhbdF1bMl0pOwogICAgaWYodCAhPSAyKSBwcmludGYoIlxuLS0tfC0tLXwtLS1cbiIpOwp9CnByaW50ZigiXG4iKTsKfQoKLyogVmVyaWZpY2Egc2UgaMOhIHVtIHZlbmNlZG9yICovCgpjaGFyIGNoZWNrKHZvaWQpCnsKaW50IGk7Cgpmb3IoaT0wOyBpPDM7IGkrKykgLyogVmVyaWZpY2EgYXMgbGluaGFzICovCiAgICBpZihtYXRyaXhbaV1bMF0gPT0gbWF0cml4W2ldWzFdICYmIG1hdHJpeFtpXVswXSA9PSBtYXRyaXpbaV1bMl0pIHJldHVybiBtYXRyaXhbaV1bMF07Cgpmb3IoaT0wOyBpPDM7IGkrKykgLyogVmVyaWZpY2EgYXMgY29sdW5hcyAqLwogICAgaWYobWF0cml4WzBdW2ldID09IG1hdHJpeFsxXVtpXSAmJiBtYXRyaXhbMF1baV0gPT0gbWF0cml4WzJdW2ldKSByZXR1cm4gbWF0cml4WzBdW2ldOwoKLyogVGVzdGEgYXMgZGlhZ29uYWlzICovCgppZihtYXRyaXhbMF1bMF0gPT0gbWF0cml4WzFdWzFdICYmIG1hdHJpeFsxXVsxXSA9PSBtYXRyaXpbMl1bMl0pIHJldHVybiBtYXRyaXhbMF1bMF07CmlmKG1hdHJpeFswXVsyXSA9PSBtYXRyaXhbMV1bMV0gJiYgbWF0cml4WzFdWzFdID09IG1hdHJpelsyXVswXSkgcmV0dXJuIG1hdHJpeFswXVsyXTsKCnJldHVybiAnICc7Cn0=