Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia
To fazendo um jogo da velha, e to com dificuldade na parte em que o computador faz a jogada dele.
Eu pretendia fazer o seguinte:
Pessoa faz a jogada dela;
1ª jogada do computador é randomica;
Pessoa faz a segunda jogada;
Computador lê a matriz e procura dois 'X' ou dois 'O' juntos separados por um espaço;
Se ele encontrou vê se o espaço está vazio;
Se estiver vazio ele preenche com 'O', finalizando o jogo caso 'O'|'O'|'O', ou evitando perder caso 'X'|'X'|'O';
E caso ele nao encontre nada preenche um espaço randomico;
Mas nao ta dando certo, abaixo segue o código:
void get_computer_move(void)
{
int i,j,marcou;
marcou=0;
/*----- RANDOMICO -----*/
if(jogadas<2){
do{
randomico();
if(matrix[a][b]==' '){
matrix[a][b]='O';
marcou++;
}
}while(marcou==0);
}
else{
/*-------- CONTROLA HORIZONTAIS ---------*/
if(!marcou)
for(i=0;i<3;i++)
if(matrix[i][0] == matrix[i][1])
if(matrix[i][2]==' ')
{
matrix[i][2]=='O';
marcou++;
break;
}
if(!marcou)
for(i=0;i<3;i++)
if(matrix[i][1] == matrix[i][2])
if(matrix[i][0]==' ')
{
matrix[i][0]='O';
marcou++;
break;
}
if(!marcou)
for(i=0;i<3;i++)
if(matrix[i][0] == matrix[i][2])
if(matrix[i][1]==' ')
{
matrix[i][1]='O';
marcou++;
break;
}
/*------- CONTROLA VERTICAIS ---------*/
if(!marcou)
for(i=0;i<3;i++)
if(matrix[0][i] == matrix[1][i])
if(matrix[2][i]==' ')
{
matrix[2][i]='O';
marcou++;
break;
}
if(!marcou)
for(i=0;i<3;i++)
if(matrix[0][i] == matrix[2][i])
if(matrix[1][i]==' ')
{
matrix[1][i]='O';
marcou++;
break;
}
if(!marcou)
for(i=0;i<3;i++)
if(matrix[1][i] == matrix[2][i])
if(matrix[0][i]==' ')
{
matrix[0][i]='O';
marcou++;
break;
}
/*------ CONTROLA DIAGONAIS -----------*/
if(!marcou)
if(matrix[0][0] == matrix[1][1])
if(matrix[2][2]==' ')
{
matrix[2][2]='O';
marcou++;
}
if(!marcou)
if(matrix[1][1] == matrix[2][2])
if(matrix[0][0]==' ')
{
matrix[0][0]='O';
marcou++;
}
if(!marcou)
if(matrix[0][0] == matrix[2][2])
if(matrix[1][1]==' ')
{
matrix[1][1]='O';
marcou++;
}
if(!marcou)
if(matrix[0][2] == matrix[1][1])
if(matrix[2][0]==' ')
{
matrix[2][0]='O';
marcou++;
}
if(!marcou)
if(matrix[1][1] == matrix[2][0])
if(matrix[0][2]==' ')
{
matrix[0][2]='O';
marcou++;
}
if(!marcou)
if(matrix[0][2] == matrix[2][0])
if(matrix[1][1]==' ')
{
matrix[1][1]='O';
marcou++;
}
/*------ Randomico --------*/
if(!marcou)
do{
randomico();
if(matrix[a][b]==' '){
matrix[a][b]='O';
marcou++;
}
}while(marcou==0);
}
}Eu fiz isso em DarkBasic, 10x mais simples ^^
>
Eu fiz isso em DarkBasic, 10x mais simples ^^
Sério kra? nem sei o q é darkbasic, você pode postar o código pra eu dar uma olhada na logica que você usou?
Ulysses Freitas, se interessar eu tinha feito esse código hoje:
#include <stdio.h>
#include <stdlib.h>
char matrix[3][3];
char check(void);
void init(void);
void get_player(void);
void get_computer(void);
void display(void);
void get_radom(void);
int main()
{
char done;
printf("Este é o jogo da velha\n");
printf("Você jogara contra o computador.\n");
done = ' ';
init();
do {
display();
get_player();
done = check();
if (done != ' ') break;
get_computer();
done = check();
} while (done == ' ');
if (done == 'X') printf("Você Ganhou!\n");
else printf("Você Perdeu!\n");
display();
return 0;
}
void init(void)
{
int x, y;
for(x=0; x<3; ++x)
for(y=0; y<3; ++y) matrix[x][y] = ' ';
}
void get_player(void)
{
int x, y;
printf("Digite as cordenadas para o X:\n");
scanf("%d%d", &x, &y);
x--; y--;
if (matrix[x][y] != ' ') {
printf("Posição inválida, tente novamente. \n");
get_player();
}
else matrix[x][y] = 'X';
}
void get_computer(void)
{
register int x;
int ver = 0;
/verifica linhas/
for (x=0; x<3; ++x)
if (ver !=1 && matrix[x][0] != ' ' && matrix[x][0] == matrix[x][1]) {
if (matrix[x][2] == ' ') {
matrix[x][2] = 'O';
ver = 1;
break;
}
}
for (x=0; x<3;++x)
if (ver !=1 && matrix[x][1] != ' ' && matrix[x][1] == matrix[x][2]) {
if (matrix[x][0] == ' ') {
matrix[x][0] = 'O';
ver = 1;
break;
}
}
for (x=0; x<3;++x)
if (ver !=1 && matrix[x][0] != ' ' && matrix[x][0] == matrix[x][2]) {
if (matrix[x][1] == ' ') {
matrix[x][1] = 'O';
ver = 1;
break;
}
}
/verifica colunas/
for (x=0; x<3; ++x)
if (ver !=1 && matrix[0][x] != ' ' && matrix[0][x] == matrix[1][x]) {
if (matrix[2][x] == ' ') {
matrix[2][x] = 'O';
ver = 1;
break;
}
}
for (x=0; x<3;++x)
if (ver !=1 && matrix[1][x] != ' ' && matrix[1][x] == matrix[2][x]) {
if (matrix[0][x] == ' ') {
matrix[0][x] = 'O';
ver = 1;
break;
}
}
for (x=0; x<3;++x)
if (ver !=1 && matrix[0][x] != ' ' && matrix[0][x] == matrix[2][x]) {
if (matrix[1][x] == ' ') {
matrix[1][x] = 'O';
ver = 1;
break;
}
}
/Não achei uma relação matematica entre as diagonais, então não usarei um lago para verificalas/
/Verifica a diagonal principal/
if (ver !=1 && matrix[0][0] != ' ' && matrix[0][0] == matrix[1][1])
if (matrix[2][2] == ' ') {
matrix[2][2] = 'O';
ver = 1;
}
if (ver !=1 && matrix[0][0] != ' ' && matrix[0][0] == matrix[2][2])
if (matrix[1][1] == ' ') {
matrix[1][1] = 'O';
ver = 1;
}
if (ver !=1 && matrix[1][1] != ' ' && matrix[1][1] == matrix[2][2])
if (matrix[0][0] == ' ') {
matrix[0][0] = 'O';
ver = 1;
}
if (ver !=1 && matrix[0][0] != ' ' && matrix[0][0] == matrix[1][1])
if (matrix[2][2] == ' ') {
matrix[2][2] = 'O';
ver = 1;
}
/Verifica a diagonal secundaria/
if (ver !=1 && matrix[0][2] != ' ' && matrix[0][2] == matrix[1][1])
if (matrix[2][0] == ' ') {
matrix[2][0] = 'O';
ver = 1;
}
if (ver !=1 && matrix[0][2] != ' ' && matrix[0][2] == matrix[2][0])
if (matrix[1][1] == ' ') {
matrix[1][1] = 'O';
ver = 1;
}
if (ver !=1 && matrix[1][1] != ' ' && matrix[1][1] == matrix[2][0])
if (matrix[0][2] == ' ') {
matrix[0][2] = 'O';
ver = 1;
}
if (ver == 1)
ver = 0;void get_radom(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) {
printf("Empate!");
exit(0);
}
else matrix[i][j] = 'O';
}
void display(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");
}
printf("\n");
}
char check(void)
{
int x;
for (x=0; x<3;++x)
if (matrix[x][0] == matrix[x][1] && matrix[x][0] == matrix[x][2]) return matrix[x][0];
for (x=0; x<3;++x)
if (matrix[0][x] == matrix[1][x] && matrix[0][x] == matrix[2][x]) return matrix[0][x];
/Testa as diagonais/
if (matrix[0][0] == matrix[1][1] && matrix[0][0] == matrix[2][2]) return matrix[0][0];
if (matrix[0][2] == matrix[1][1] && matrix[0][2] == matrix[2][0]) return matrix[0][2];
return ' ';
}Ow yago fico chic cara, gostei da parte de comparar, eu fiz um código parecido com esse, porém testando a matriz duas vezes, a primeira tenta encontrar os 0 para ganhar, se não achar nenhuma possibilidade ele tenta encontrar os X para bloquear, adicionei outras coisas tambem, um placar, menu pra escolher se vai jogar contra computador ou outra pessoa ficou extenso mais ficou legal.
Agradeço por compartilhar teu código.
Abraços
Eu apenas verifiquei a matriz apenas uma vez, pq ai se ele achasse dois "O" ou dois "X", ele jogaria lá broqueando ou ganhando :D
>
Eu apenas verifiquei a matriz apenas uma vez, pq ai se ele achasse dois "O" ou dois "X", ele jogaria lá broqueando ou ganhando :D
Entao eu tentei fazer isso tambem, mas eu percebi um problema, o jogo fica meio burro, por exemplo:
o que aconteceria, verificando uma vez só esse jogo?
X | X |
----------
0 | 0 |
----------
| |
o computador iria jogar no X para bloquear, mas pq raios ele não joga direto no O e ganha o jogo de uma vez? Entendeu meu ponto de vista? pra isso eu nao consegui pensar em outra alternativa do que rodar a matriz duas vezes primeiro pra tentar ganhar segunda pra tentar bloquear.
>
Entao eu tentei fazer isso tambem, mas eu percebi um problema, o jogo fica meio burro, por exemplo:
o que aconteceria, verificando uma vez só esse jogo?
X | X |
----------
0 | 0 |
----------
| |
o computador iria jogar no X para bloquear, mas pq raios ele não joga direto no O e ganha o jogo de uma vez? Entendeu meu ponto de vista? pra isso eu nao consegui pensar em outra alternativa do que rodar a matriz duas vezes primeiro pra tentar ganhar segunda pra tentar bloquear.
Eu realmente não tinha pensado nisso :)
Ow pessoal consegui fazer funcionar.
Eu usei duas estruturas condicionais umar pra testar as jogadas do computador pra ele ganhar e outra pra testar as jogadas do jogador pra evitar que ele ganhe, achei que ficou muito grande, pelo menos o dobro dessa que eu postei, mas ta funcionando :)