nunolevezinho Posted June 11, 2012 at 05:38 PM Report Share #462031 Posted June 11, 2012 at 05:38 PM 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 More sharing options...
HappyHippyHippo Posted June 11, 2012 at 05:56 PM Report Share #462035 Posted June 11, 2012 at 05:56 PM (edited) sem ler mais nada : não uses variáveis globais ps : para não falar que não usaste nenhuma das vantagens do c++ em relação ao c Edited June 11, 2012 at 05:57 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
seuqram Posted June 18, 2012 at 11:44 PM Report Share #463893 Posted June 18, 2012 at 11:44 PM sem ler mais nada : não uses variáveis globais ps : para não falar que não usaste nenhuma das vantagens do c++ em relação ao c porra, voces tem de meter sempre esse defeito lol Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 18, 2012 at 11:50 PM Report Share #463894 Posted June 18, 2012 at 11:50 PM porra, voces tem de meter sempre esse defeito lol sim temos, são boas práticas de programação .... quando os programas começam a aumentar em tamanho não existe outra maneira de prevenir bugs que levam imenso tempo a descobrir IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
polska Posted June 18, 2012 at 11:54 PM Report Share #463896 Posted June 18, 2012 at 11:54 PM (edited) Os apontadores servem para algo não é? xD Edited June 18, 2012 at 11:58 PM 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 More sharing options...
HappyHippyHippo Posted June 18, 2012 at 11:55 PM Report Share #463898 Posted June 18, 2012 at 11:55 PM Os apontadores servem para algo não é? xD não percebi essa pergunta neste tópico ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
polska Posted June 19, 2012 at 12:01 AM Report Share #463900 Posted June 19, 2012 at 12:01 AM (edited) 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 June 19, 2012 at 12:02 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now