Ir ao conteúdo

Posts recomendados

Postado

@devair1010

O único problema do código é que não vai converter as casas onde foi escolhido anteriormente

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c;
string aux="O";
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	cout << "Digite uma posicao: " << endl;
	cin >> pos[r];
	system("cls");
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			if(pos[r] != velha[o][p]){
			cout << " [ " << velha[o][p] << "] ";
			}else{
			if(pos[r] == velha[o][p]){
			X_ou_O();
			velha[o][p] = (int)aux[0]; 
			cout << " [ " << (char)velha[o][p] << "] ";
			}
			}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;

	}
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1
Postado

@João Augusto Gomes Ribeiro    isso por que ficou faltando um comando para isso,  o código está certo , apenas coloque essas linhas dentro do laço :

mostrar();
for(r=0;r<9;r++){
    cout << "Digite uma posicao: " << endl;
    cin >> pos[r];
    system("cls");
    cout << " +----+-----+----+" << endl;
    for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";//essa linhas aqui 
                else cout << " [ " <<(velha[o][p]) << "] ";//e essa também
            }else{
                if(pos[r] == velha[o][p]){
                    X_ou_O();
                    velha[o][p] = (int)aux[0];
                    cout << " [ " << char ( velha[o][p] ) << "] ";//esse comando char aqui é fora do parenteses
                                                                  //e não dentro

 

  • Curtir 1
Postado

Olá @devair1010 Eu agora estou com um problema na hora de exibir quando um jogador ganha,

recentemente o código está assim.

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c;
string aux="O";
bool g;
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	cout << "Digite uma posicao: " << endl;
	cin >> pos[r];
	system("cls");
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";//essa linhas aqui 
                else cout << " [ " <<(velha[o][p]) << "] ";//e essa também
            }else{
                if(pos[r] == velha[o][p]){
                    X_ou_O();
                    velha[o][p] = (int)aux[0];
                    cout << " [ " << char ( velha[o][p] ) << "] ";
				}
	}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;

	}
      for(o=0;o<3;o++){
	if(velha[o][1]==velha[o][2]&&velha[o][2]==velha[o][3]){
	g = true;
	}
	}
	for(p=0;p<3;p++){
	if(velha[1][p]==velha[2][p]&&velha[2][p]==velha[3][p]){
	g = true;
	}
	}
	if(velha[1][1]==velha[2][2]&&velha[2][2]==velha[3][3]){
	g = true;
	}
	if(velha[1][3]==velha[2][2]&&velha[2][2]==velha[3][1]){
	g = true;
	}
	if(g==true){
	cout << " JOGO FINALIZADO!!!" << endl;
	system("cls");
	}
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1
Postado

@João Augusto Gomes Ribeiro    na hora de comparar para ver se ganhou, você colocou 

velha[o][1]  velha[o][2]   velha[o][3]

mas na matriz, velha, não  tem a posição 3 , mas apenas de zero até 2 , então precisa ser assim :

velha[o][0]   velha[o][1]   velha[o][2]

e depois de cada loop que compara , coloque um if para fazer outras comparações apenas se g for diferente de true . e  seria bom colocar um loop do / while  para poder jogar outras vezes .  assim  a cada vez que for jogar novamente precisa zerar as variáveis  c=0  g=true  .

  • Curtir 1
Postado

@devair1010Bom eu descobri isso em outra postagem sua sobre o jogo da velha,mesmo assim obrigado. Bom eu não tenho mais esse problema ,mas eu tenho outros problemas que são:

quando um jogador faz uma jogada igual a uma jogada anterior:

for(r=0;r<9;r++){
cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
for(s=0;s<9;s++){
  if(pos[s]==pos[r]){
    preencher = true;
  }
}
if(preencher==true){
 cout << " JOGADA INVALIDA " << endl;
cout << " +----+-----+----+" << endl;
cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
cin >> pos[r];
system("cls");
}

ou quando faz uma jogada maior que o numero de casas:

for(r=0;r<9;r++){
cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
  if(pos[r]>9){
    cout << " JOGADA INVALIDA " << endl;
	cout << " +----+-----+----+" << endl;
	cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
	cin >> pos[r];
	system("cls");
  }
}

ou quando o jogo empatou(quando nenhum jogador conseguiu ganhar):

for(r=0;r<9;r++){
if(empatou==true){
cout <<  "JOGO EMPATADO" << endl;
 system("pause");
  return 0;
}
if(r==9){
if(ganhou!=true){
empatou = true;
}
}
}

Nenhumas dessas funcionou pode me ajudar,obrigado.

  • Curtir 1
Postado

@João Augusto Gomes Ribeiro      nesse código acima,  que você postou quarta-feira ,  para saber se empatou coloque um if  para saber se a variável g é false e se for então empatou.  e para as jogadas invalidas coloque um loop e dentro dele pega qual jogada e verifique se é menor que 1 ou maior que nove se for então repete . e se for uma letra então precisa usar uma variável char para pegar a jogada e verificar com strlen()

char h[10];
   .
   .
c=strlen(h);
if(c>1)cout<<"jogada invalida\n";
   .
   .
c=int(h[0]);
pos[r]=c;

se o tamanho for maior que 1 então é jogada inválida e em seguida transforme para inteiro e verifique se é menor que 1 ou maior que 9 .

  • Curtir 1
Postado

@devair1010Eu estou com uma duvida onde eu irei usar esses codigos pois eu fiz uma gambiarra

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c,g,s;
string aux="O";
bool ganhador,jog_inv=false,empatou;
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
void terminou_velha(){
	g = false;
	//horizontal
	if(velha[0][0]==velha[0][1]&&velha[0][1]==velha[0][2]){
	g = true;
	}else{
	if(velha[1][0]==velha[1][1]&&velha[1][1]==velha[1][2]){
	g = true;
	}else{
	if(velha[2][0]==velha[2][1]&&velha[2][1]==velha[2][2]){
	g = true;
	}else{
	//vertical
	if(velha[0][0]==velha[1][0]&&velha[1][0]==velha[2][0]){
	g = true;
	}else{
	if(velha[0][1]==velha[1][1]&&velha[1][1]==velha[2][1]){
	g = true;
	}else{
	if(velha[0][2]==velha[1][2]&&velha[1][2]==velha[2][2]){
	g = true;
	}else{
	//diagonal
	if(velha[0][0]==velha[1][1]&&velha[1][1]==velha[2][2]){
    g = true;
    }else{
    if(velha[0][2]==velha[1][1]&&velha[1][1]==velha[2][0]){
	g = true;
    }
	}
	}
	}
	}
	}
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	if(r==9){
	if(g==false){
	empatou = true;
	}
	}
	X_ou_O();
	if(g==false){
	cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
	}else{
	if(g==true){
	cout << " JOGO ENCERRADO!!!!!!	" << endl;
	system("pause");
	return 0;
	}else{
	if(jog_inv==true){ 
	cout << " JOGADA INVALIDA " << endl;
	cout << " +----+-----+----+" << endl;
	cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
	cin >> pos[r];
	system("cls");
	}else{
	if(empatou==true){
	cout << " JOGO EMPATOU " << endl;
	system("pause");
	return 0;
	}
	}
	}
	}
	if(pos[r]<1 || pos[r]>9){
	jog_inv = true;
	}else{
	for(s=0;s<9;s++){
	if(pos[s]==pos[r]){
	jog_inv = true;
	}
	}
	}
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";
                else cout << " [ " <<(velha[o][p]) << "] ";
            }else{
            velha[o][p] = (int)aux[0];
            cout << " [ " << char ( velha[o][p] ) << "] ";
			}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;
	}// ver se o jogo empatou
	terminou_velha();
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...