Jump to content

Jogo do Galo


nunolevezinho

Recommended Posts

Olá, tenho andado a tentar melhorar os meus conhecimentos em C++ e resolvi tentar fazer um típico jogo do galo.

Abaixo deixo o meu código e gostaria que dessem opiniões sobre o que melhorar, desde a indentação à maneira de programar, funções, etc.

E reportem erros sff.

/*
Criado Por: Nuno Silva
Data: 2012/06/11
*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int fim_jogo= 0;
int posicao[9]={1,2,3,4,5,6,7,8,9};
char define[9]={'1','2','3','4','5','6','7','8','9'};
int escolhido[9]={0,0,0,0,0,0,0,0,0};
char jogador1 = 'X';
char jogador2 = 'O';
void imprime_tabuleiro_inicial()  //Imprime o Tabuleiro ao iniciar o jogo
{
cout<<"Bem vindo ao Jogo do Galo."<<endl;
cout<<""<<endl;
cout<<"|"<<posicao[0]<<"|"<<posicao[1]<<"|"<<posicao[2]<<"|"<<endl;
cout<<"-------"<<endl;
cout<<"|"<<posicao[3]<<"|"<<posicao[4]<<"|"<<posicao[5]<<"|"<<endl;
cout<<"-------"<<endl;
cout<<"|"<<posicao[6]<<"|"<<posicao[7]<<"|"<<posicao[8]<<"|"<<endl;
cout<<"-------"<<endl;
}
void introduzido_x(int user_posicao_x) //define o valor X para o jogador 1.
{
define[user_posicao_x-1]= 'X';
}
void introduzido_y(int user_posicao_y) //define o valor O para o jogador 2.
{
define[user_posicao_y-1]= 'O';
}
void tabuleiro_resultado_final() //Imprime o resultado após ter acabado o jogo.
{
cout<<""<<endl;
cout<<"|"<<define[0]<<"|"<<define[1]<<"|"<<define[2]<<endl;
cout<<"-------"<<endl;
cout<<"|"<<define[3]<<"|"<<define[4]<<"|"<<define[5]<<endl;
cout<<"-------"<<endl;
cout<<"|"<<define[6]<<"|"<<define[7]<<"|"<<define[8]<<endl;
cout<<"-------"<<endl;
cout<<""<<endl;
}

int verifica_fim_jogo() // Verifica se o jogo acabou
{
//***---Verificação se o jogo acabou.***---//
 //1 Possibilidade
 if(define[0] == define[1] && define[2] == define[0])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[0] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
  //2 Possibilidade
 if(define[0] == define[3] && define[6] == define[0])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[0] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 //3 Possibilidade
 if(define[0] == define[4] && define[8] == define[0])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[0] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 //4 Possibilidade
 if(define[1] == define[4] && define[7] == define[1])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[1] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 //5 Possibilidade
 if(define[2] == define[5] && define[2] == define[8])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[2] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 //6 Possibilidade
 if(define[2] == define[4] && define[4] == define[6])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[2] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 //7 Possibilidade
 if(define[6] == define[7] && define[8] == define[6])
 {
  cout<<"Fim Jogo!"<<endl;
  fim_jogo = 1;
  if(define[2] == jogador1)
  {
  cout<<"Ganha o Jogador 1!"<<endl;
  }
  else
cout<<"Ganha o Jogador 2!"<<endl;
 }
 return fim_jogo;
}
int verifica_duplicado(int i) //Verifica se algum dos dois jogadores introduziu alguma posicao duplicada.
{
while(escolhido[i-1] == 1)
{
 cout<<i<<" ja esta escolhido, por favor escolha outro lugar: ";
 cin>>i;
}
return i;
}
/* Começa o Jogo */
int main()
{
int count = 0;
int x_posicao,y_posicao;
imprime_tabuleiro_inicial();
cout<<""<<endl;
cout<<"Jogador 1 : X"<<endl<<"Jogador 2 : O"<<endl;
while(fim_jogo==0 && count<=8)
{
 count++;
 cout<<""<<endl;
 cout<<"Introduz a posicao para X :"<<endl;
 cin>>x_posicao;
 while(x_posicao>9 || x_posicao <1 )
 {
  cout<<"Jogada Invalida! Por favor introduz uma posicao de 0 a 9:  ";
  cin>>x_posicao;
 }

 if(escolhido[x_posicao-1] == 1)
 {
  x_posicao=verifica_duplicado(x_posicao);
 }
 introduzido_x(x_posicao); //define a posicao de X.
 escolhido[x_posicao -1] = 1; //atribui a posicao escolhida ao array escolhido
 verifica_fim_jogo();  //verifica se o jogo acabou.
 if(fim_jogo == 1) //Se o jogo acabar, esta parte do codigo ira terminar o while
 {
  break;
 }
 if(count == 9) //Se houveram 9 jogadas, o jogo para
 {
  break;
 }
 count++;
 tabuleiro_resultado_final(); //imprime o tabuleiro actual
 cout<<"Introduz a posicao para O : "<<endl;
 cin>>y_posicao;
 while(y_posicao>9 || y_posicao <1 ) //Se o jogador introduz uma jogada invalida. Tem de estar entre 9 e 0
 {
  cout<<"Jogada Invalida! Por favor introduz uma posicao de 0 a 9:  ";
  cin>>y_posicao;
 }
 if(escolhido[y_posicao-1] == 1)
 {
  y_posicao=verifica_duplicado(y_posicao);
 }
 introduzido_y(y_posicao); //define a posicao de Y.
 escolhido[y_posicao -1] = 1; //atribui a posicao escolhida ao array escolhido
 verifica_fim_jogo();  //verifica se o jogo acabou
 tabuleiro_resultado_final(); //imprime o tabuleiro actual
 if(fim_jogo == 1) //Se o jogo acabar, esta parte do codigo ira terminar o while
 {
  break;
 }
}
if(fim_jogo == 0) //se não houver resultado (ex: fim_jogo fica a 0 após 9 iterações).
{
 cout<<"Empate"<<endl;
}
tabuleiro_resultado_final();
getch();
}
Link to comment
Share on other sites

não percebi essa pergunta neste tópico ...

Eu sempre usei variáveis globais para me poupar ao trabalho de passar as variáveis e principalmente vectores e matrizes com apontadores para as funções.. Não sei se é o caso dele ou não.. Mas já me larguei disso.

Foi só isso..

Ja agora, @Nunolevezinho, tu verificas cada possibilidade, não será mais fácil um ciclo for que te verifique as colunas, outro as linhas e outro as duas diagonais?

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.