Estou construindo este jogo da velha, no entanto, gostaria de uma ajuda! Como faço para que a maquina sempre ganhe do jogador. (Resumindo, sempre dará velha ou a maquina sempre ira ganhar!O jogador nunca pode vencer!).
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <windows.h>//necessário para usar SetConsoleTitle
#include <locale.h> //necessário para usar setlocale
//area de declaracao de constantes
#define lim 3
#define Jogador 'J'
#define Maquina 'M'
/*variáveis globais utilizadas no programa*/
int c; //variável de controle para laços
char op; //opção do jogador utilizado no programa principal
int vezde; //variável que define de quem é a vez para jogar
int jogo; //recebe o retorno das funções que define o fim do jogo
char jv[3][3]; //matriz jogo 3 X 3
//procedimento utilizado para limpeza da matriz, colocando '0' em toda a matriz
//O codigo abaixo percorre linhas e colunas da matriz. Cada posição é atribuido o caractere '0' para retirar o "lixo".
for (int w=0;w<lim;w++)
for (int j=0;j<lim;j++)
jv[w][j] = '0';
}
//Procedimento utilizado para visualizar o conteúdo da matriz.
void visualizar()
{
//Faz com que a estrutura da matriz apareça uma unica vez.
system("cls");
//Comando usado para colocar titulo no console.
SetConsoleTitle(TEXT("JOGO DA VELHA"));
//Permite suporte a língua portuguesa. Garante que caracteres como “ç” e acentuação sejam exibidos normalmente no programa.
setlocale(LC_ALL,"Portuguese");
int w,k;
printf("\n");
printf("\n\t\t\t\t JOGO DA VELHA \n\n\n\n");
//Esta função verifica se houve ou não ganhador, retornando true (verdadeiro) se houver,ou false (falso) se não tiver ganhador para cada jogada
int velha(char jog)
{
//printf("Em construção........");
//O codigo abaixo pecorre as LINHAS 1, 2, 3 em seguida verifica que foi o ganhador
if(jv[0][0] == jog && jv[0][1] == jog && jv[0][2] == jog)
return 1;
else if(jv[1][0] == jog && jv[1][1] == jog && jv[1][2] == jog)
return 1;
else if(jv[2][0] == jog && jv[2][1] == jog && jv[2][2] == jog)
return 1;
//O codigo abaixo percorre as COLUNAS 1,2,3 em seguida verifica quem foi o ganhador.
else if(jv[0][0] == jog &&
jv[1][0] == jog &&
jv[2][0] == jog)
return 1;
else if(jv[0][1] == jog &&
jv[1][1] == jog &&
jv[2][1] == jog)
return 1;
else if(jv[0][2] == jog &&
jv[1][2] == jog &&
jv[2][2] == jog)
return 1;
//O codigo abaixo percorre as diagonais (principal,secundaria) e verifica se um dos jogadores venceu
else if(jv[0][0] == jog && jv[1][1] == jog && jv[2][2] == jog)
return 1;
else if(jv[0][2] == jog && jv[1][1] == jog && jv[2][0] == jog)
return 1;
else return 0;
}
//Esta função recebe uma posição da matriz e verifica se esta posição já foi selecionada, retornando true (verdadeiro) se já tiver sido selecionada ou false (falso) caso contrário
int posicao( int l, int c)
{
//printf("Em construção........");
//O laço abaixo ira percorrer toda a matriz
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
// Os valores passados na função ('l','c') sao comparados com as posições; se ela for igual entra e faz uma outra comparação.
if(i == l && c == j)
{
// Apos validar as posições da matriz ele ainda verifica se aquela posição ja foi ocupada por um valor. Se esta posição estiver com caractere diferente de '0' o e porque ela ja foi usada. logo a função irá retornar 1 'true';
if(jv[j] == '0')
{
return 1;
}
// Caso contrario a função irá retornar 0 'false' pois aquela posição ainda pode ser usada.
else
{
return 0;
}
}
}
}
}
//Esta função utiliza a função random (rand) para selecionar uma nova jogada da máquina, retornando true se a jogada resultou em vitória ou false caso contrário.
int maquinajoga()
{
int l,c,rposicao,v;
rposicao = 1;
do
{
l = rand()%3;
c = rand()%3;
rposicao = posicao(l,c);
if (rposicao == 1)
jv[l][c] = Maquina;
}while (! rposicao == 1);
visualizar();
v = velha(Maquina);
if ( v == 1)
{
//Este bloco de comando faz com que o printf fique piscando na tela.
int i = 10;
while (i)
{
printf(" \n\n\n\t\t\t A MAQUINA VENCEU O JOGO! \n");
Sleep (1000);
system ("cls");
Sleep (100);
}
return 1;
}
else return 0;
}
//Esta função faz a jogada do jogador, que seleciona uma nova jogada válida, retornando true se a jogada resultou em vitória ou false caso contrário.
int jogadorjoga()
{
//printf("Em construção........");
// Este codigo e utilizado para a maquina. No entanto o usuario deve informar o caracter ('J') para linha e coluna.
int l,c,rposicao,v;
rposicao = 1;
//Este laço e utilizado quando o jogador nao informa uma posicao valida ele fica repetindo as mesmas perguntas.
do
{
//Solicita ao usuario que informe a linha e a coluna.
printf("\n Informe a linha: ");
scanf("%d",&l);
printf("\n Informe a coluna: ");
scanf("%d",&c);
//Faz verificação da linha e da coluna. Se caso ja tenha sido utilizada independente se a jogada foi da maquina ou do jogador, este trecho informa se esta valido ou não.
rposicao = posicao(l,c);
//O codigo abaixo informa se a posiçao e igual a 1. caso seja ele atribui o caracter 'J' a matriz conforme a posição que o usuario informou.
if (rposicao == 1)
jv[l][c] = Jogador;
}
while (! rposicao == 1);
//Visualiza a matriz apos a nova inserção
visualizar();
//Faz o retorno da validação verifica quem venceu o jogo ou não (caso tenha dado velha).
v = velha(Jogador);
//Informa se o jogador venceu.
if ( v == 1)
{
//Este bloco de comando faz com que o printf fique piscando na tela.
int i = 10;
while (i)
{
printf(" \n\n\n\t\t\t O JOGADOR VENCEU O JOGO! \n");
Sleep (2000);
system ("cls");
Sleep (100);
}
return 1;
}
else return 0;
}
//programa principal. Jogo da Velha, esta parte do programa é a mais importante, controla de quem é a vez de jogar, chamando as funções e procedimentos necessários
//para cada execução do programa.
int main()
{
c = 1;
limpeza(); //chama a função para limpeza da matriz
visualizar(); //visualiza a matriz 3 X 3 com '0'
//Controle para selecionar de quem é a primeira jogada MAQUINA ou JOGADOR
do
{
printf(" Opção para início do jogo...\n\n");
printf(" M = Máquina\n");
printf(" J = Jogador\n\n");
printf(" Informe a opção desejada: ");
op = getchar();
}while ( ( op != 'm' ) && ( op != 'M' ) && ( op != 'j' ) && ( op = 'J' ) );
system("cls");
if ( ( op == 'm' ) || ( op == 'M' ) )
{
jogo = maquinajoga();
vezde = 1; // está variável é muito importante no programa,
//fazendo com que após a máquina jogar ela sede a vez para o jogador.
}
else
{
jogo = jogadorjoga();
vezde = 0; //esta variável é muito importante no programa,
//fazendo com que após o jogador jogar ele sede a vez para a maquina
}
//Este laço controla as jogadas e só termina quando alguém ganha ou quando der empate: OBS.: uma ótima modificação neste programa seria o jogador
//selecionar se quer parar ou começar um novo jogo
do
{
if ( vezde == 1)
{
jogo = jogadorjoga();
vezde = 0;
}
else
{
jogo = maquinajoga();
vezde = 1;
}
//Mudança na verificação sendo que se igualar a 9 jogadas e ninguem vencer dara velha.
if(c == 8 && jogo == 0)
printf("\n\n\t\t\t\t Deu velha! :( \n");
c++;
//Mudança do laço de '!jogo' para 'jogo == 0'.
}while (( c <= 8 ) && ( jogo == 0 ));
Pergunta
Carine Reis
Estou construindo este jogo da velha, no entanto, gostaria de uma ajuda! Como faço para que a maquina sempre ganhe do jogador. (Resumindo, sempre dará velha ou a maquina sempre ira ganhar! O jogador nunca pode vencer!).
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <windows.h>//necessário para usar SetConsoleTitle
#include <locale.h> //necessário para usar setlocale
//area de declaracao de constantes
#define lim 3
#define Jogador 'J'
#define Maquina 'M'
/*variáveis globais utilizadas no programa*/
int c; //variável de controle para laços
char op; //opção do jogador utilizado no programa principal
int vezde; //variável que define de quem é a vez para jogar
int jogo; //recebe o retorno das funções que define o fim do jogo
char jv[3][3]; //matriz jogo 3 X 3
//procedimento utilizado para limpeza da matriz, colocando '0' em toda a matriz
void limpeza()
{
//printf("Em construção........");
//O codigo abaixo percorre linhas e colunas da matriz. Cada posição é atribuido o caractere '0' para retirar o "lixo".
for (int w=0;w<lim;w++)
for (int j=0;j<lim;j++)
jv[w][j] = '0';
}
//Procedimento utilizado para visualizar o conteúdo da matriz.
void visualizar()
{
//Faz com que a estrutura da matriz apareça uma unica vez.
system("cls");
//Comando usado para colocar titulo no console.
SetConsoleTitle(TEXT("JOGO DA VELHA"));
//Permite suporte a língua portuguesa. Garante que caracteres como “ç” e acentuação sejam exibidos normalmente no programa.
setlocale(LC_ALL,"Portuguese");
int w,k;
printf("\n");
printf("\n\t\t\t\t JOGO DA VELHA \n\n\n\n");
printf("\t\t\t\t C0 C1 C2 \n\n");
printf("\t\t\t\t L0 %c | %c | %c \n",jv[0][0],jv[0][1],jv[0][2]);
printf("\t\t\t\t ---|---|--- \n ");
printf("\t\t\t\t L1 %c | %c | %c \n",jv[1][0],jv[1][1],jv[1][2]);
printf("\t\t\t\t ---|---|--- \n ");
printf("\t\t\t\t L2 %c | %c | %c \n",jv[2][0],jv[2][1],jv[2][2]);
printf("\n\n");
}
//Esta função verifica se houve ou não ganhador, retornando true (verdadeiro) se houver,ou false (falso) se não tiver ganhador para cada jogada
int velha(char jog)
{
//printf("Em construção........");
//O codigo abaixo pecorre as LINHAS 1, 2, 3 em seguida verifica que foi o ganhador
if(jv[0][0] == jog && jv[0][1] == jog && jv[0][2] == jog)
return 1;
else if(jv[1][0] == jog && jv[1][1] == jog && jv[1][2] == jog)
return 1;
else if(jv[2][0] == jog && jv[2][1] == jog && jv[2][2] == jog)
return 1;
//O codigo abaixo percorre as COLUNAS 1,2,3 em seguida verifica quem foi o ganhador.
else if(jv[0][0] == jog &&
jv[1][0] == jog &&
jv[2][0] == jog)
return 1;
else if(jv[0][1] == jog &&
jv[1][1] == jog &&
jv[2][1] == jog)
return 1;
else if(jv[0][2] == jog &&
jv[1][2] == jog &&
jv[2][2] == jog)
return 1;
//O codigo abaixo percorre as diagonais (principal,secundaria) e verifica se um dos jogadores venceu
else if(jv[0][0] == jog && jv[1][1] == jog && jv[2][2] == jog)
return 1;
else if(jv[0][2] == jog && jv[1][1] == jog && jv[2][0] == jog)
return 1;
else return 0;
}
//Esta função recebe uma posição da matriz e verifica se esta posição já foi selecionada, retornando true (verdadeiro) se já tiver sido selecionada ou false (falso) caso contrário
int posicao( int l, int c)
{
//printf("Em construção........");
//O laço abaixo ira percorrer toda a matriz
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
// Os valores passados na função ('l','c') sao comparados com as posições; se ela for igual entra e faz uma outra comparação.
if(i == l && c == j)
{
// Apos validar as posições da matriz ele ainda verifica se aquela posição ja foi ocupada por um valor. Se esta posição estiver com caractere diferente de '0' o e porque ela ja foi usada. logo a função irá retornar 1 'true';
if(jv[j] == '0')
{
return 1;
}
// Caso contrario a função irá retornar 0 'false' pois aquela posição ainda pode ser usada.
else
{
return 0;
}
}
}
}
}
//Esta função utiliza a função random (rand) para selecionar uma nova jogada da máquina, retornando true se a jogada resultou em vitória ou false caso contrário.
int maquinajoga()
{
int l,c,rposicao,v;
rposicao = 1;
do
{
l = rand()%3;
c = rand()%3;
rposicao = posicao(l,c);
if (rposicao == 1)
jv[l][c] = Maquina;
}while (! rposicao == 1);
visualizar();
v = velha(Maquina);
if ( v == 1)
{
//Este bloco de comando faz com que o printf fique piscando na tela.
int i = 10;
while (i)
{
printf(" \n\n\n\t\t\t A MAQUINA VENCEU O JOGO! \n");
Sleep (1000);
system ("cls");
Sleep (100);
}
return 1;
}
else return 0;
}
//Esta função faz a jogada do jogador, que seleciona uma nova jogada válida, retornando true se a jogada resultou em vitória ou false caso contrário.
int jogadorjoga()
{
//printf("Em construção........");
// Este codigo e utilizado para a maquina. No entanto o usuario deve informar o caracter ('J') para linha e coluna.
int l,c,rposicao,v;
rposicao = 1;
//Este laço e utilizado quando o jogador nao informa uma posicao valida ele fica repetindo as mesmas perguntas.
do
{
//Solicita ao usuario que informe a linha e a coluna.
printf("\n Informe a linha: ");
scanf("%d",&l);
printf("\n Informe a coluna: ");
scanf("%d",&c);
//Faz verificação da linha e da coluna. Se caso ja tenha sido utilizada independente se a jogada foi da maquina ou do jogador, este trecho informa se esta valido ou não.
rposicao = posicao(l,c);
//O codigo abaixo informa se a posiçao e igual a 1. caso seja ele atribui o caracter 'J' a matriz conforme a posição que o usuario informou.
if (rposicao == 1)
jv[l][c] = Jogador;
}
while (! rposicao == 1);
//Visualiza a matriz apos a nova inserção
visualizar();
//Faz o retorno da validação verifica quem venceu o jogo ou não (caso tenha dado velha).
v = velha(Jogador);
//Informa se o jogador venceu.
if ( v == 1)
{
//Este bloco de comando faz com que o printf fique piscando na tela.
int i = 10;
while (i)
{
printf(" \n\n\n\t\t\t O JOGADOR VENCEU O JOGO! \n");
Sleep (2000);
system ("cls");
Sleep (100);
}
return 1;
}
else return 0;
}
//programa principal. Jogo da Velha, esta parte do programa é a mais importante, controla de quem é a vez de jogar, chamando as funções e procedimentos necessários
//para cada execução do programa.
int main()
{
c = 1;
limpeza(); //chama a função para limpeza da matriz
visualizar(); //visualiza a matriz 3 X 3 com '0'
//Controle para selecionar de quem é a primeira jogada MAQUINA ou JOGADOR
do
{
printf(" Opção para início do jogo...\n\n");
printf(" M = Máquina\n");
printf(" J = Jogador\n\n");
printf(" Informe a opção desejada: ");
op = getchar();
}while ( ( op != 'm' ) && ( op != 'M' ) && ( op != 'j' ) && ( op = 'J' ) );
system("cls");
if ( ( op == 'm' ) || ( op == 'M' ) )
{
jogo = maquinajoga();
vezde = 1; // está variável é muito importante no programa,
//fazendo com que após a máquina jogar ela sede a vez para o jogador.
}
else
{
jogo = jogadorjoga();
vezde = 0; //esta variável é muito importante no programa,
//fazendo com que após o jogador jogar ele sede a vez para a maquina
}
//Este laço controla as jogadas e só termina quando alguém ganha ou quando der empate: OBS.: uma ótima modificação neste programa seria o jogador
//selecionar se quer parar ou começar um novo jogo
do
{
if ( vezde == 1)
{
jogo = jogadorjoga();
vezde = 0;
}
else
{
jogo = maquinajoga();
vezde = 1;
}
//Mudança na verificação sendo que se igualar a 9 jogadas e ninguem vencer dara velha.
if(c == 8 && jogo == 0)
printf("\n\n\t\t\t\t Deu velha! :( \n");
c++;
//Mudança do laço de '!jogo' para 'jogo == 0'.
}while (( c <= 8 ) && ( jogo == 0 ));
getch();
return 0;
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.