Página Inicial História Inicio ao C++ Programação C++ Programas
 

Jogo do Galo

          Encontra se em baixo o código do jogo do galo em C++, onde aparece a grelha de jogo ao jogador, indicando em cima se o jogador é O ou X. As posisções para jogar no tabuleiro de jogo são: 1, 2, 3 para a primeira linha; 5, 6, 7 para a segunda linha e 7, 8, 9 para a terceira linha.

#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
typedef struct{
          char pos[3][3];
}GALO;

void limpar_tabuleiro(GALO *g){
          int l,c;
          for(l=0;l<3;l++)
                    for(c=0;c<3;c++)
                              (*g).pos[l][c]=' ';
}
void mostrar(GALO g){
          cout<<"+---+---+---+"<<endl;
          cout<<"| "<<g.pos[0][0]<<" | "<<g.pos[0][1]<<" | "<<g.pos[0][2]<<" |"<<endl;
          cout<<"+---+---+---+"<<endl;
          cout<<"| "<<g.pos[1][0]<<" | "<<g.pos[1][1]<<" | "<<g.pos[1][2]<<" |"<<endl;
          cout<<"+---+---+---+"<<endl;
          cout<<"| "<<g.pos[2][0]<<" | "<<g.pos[2][1]<<" | "<<g.pos[2][2]<<" |"<<endl;
          cout<<"+---+---+---+"<<endl;

}

bool vazio(GALO p){
          bool vazio=true;
          int l,c;

          //verificar se o tabuleiro está vazio
          for(l=0;l<3;l++)
                    for(c=0;c<3;c++)
                              if(p.pos[l][c]!=' ')
                                        vazio=false;
          return vazio;
}
bool vitoriax(GALO p){
          //verificar vitória das x
          if(       (p.pos[0][0]=='x'&&p.pos[0][1]=='x'&&p.pos[0][2]=='x')||
                    (p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
                    (p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
                    (p.pos[0][0]=='x'&&p.pos[1][0]=='x'&&p.pos[2][0]=='x')||
                    (p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
                    (p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
                    (p.pos[0][0]=='x'&&p.pos[1][1]=='x'&&p.pos[2][2]=='x')||
                    (p.pos[2][0]=='x'&&p.pos[1][1]=='x'&&p.pos[0][2]=='x'))
                    return true;
          else return false;

}
bool vitoriao(GALO p){
          //verificar vitória das o
          if(       (p.pos[0][0]=='o'&&p.pos[0][1]=='o'&&p.pos[0][2]=='o')||
                    (p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
                    (p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
                    (p.pos[0][0]=='o'&&p.pos[1][0]=='o'&&p.pos[2][0]=='o')||
                    (p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
                    (p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
                    (p.pos[0][0]=='o'&&p.pos[1][1]=='o'&&p.pos[2][2]=='o')||
                    (p.pos[2][0]=='o'&&p.pos[1][1]=='o'&&p.pos[0][2]=='o'))
                    return true;
          else return false;
}

bool empateox(GALO p){
          //verificar empate
          int l,c;
          int ocupados=0;
          for(l=0;l<3;l++)
                    for(c=0;c<3;c++)
                              if(p.pos[l][c]!=' ')
                                        ocupados++;
          if(ocupados==9)
                    return true;
          else return false;
}

char vez(GALO g){
          int l,c;
          int o=0,x=0;
          for(l=0;l<3;l++)
                    for(c=0;c<3;c++)
                              switch(g.pos[l][c]){
                                        case 'x':x++;break;
                                        case 'o':o++;break;
                              }
                    if(x==o)
                              return 'e';
                    else if(x>o)
                              return 'o';
                    else
                              return 'x';
}
void jogar(GALO *p ,int posicao,char caracter){
          switch(posicao){
                    case 1:(*p).pos[0][0]=caracter;break;
                    case 2:(*p).pos[0][1]=caracter;break;
                    case 3:(*p).pos[0][2]=caracter;break;
                    case 4:(*p).pos[1][0]=caracter;break;
                    case 5:(*p).pos[1][1]=caracter;break;
                    case 6:(*p).pos[1][2]=caracter;break;
                    case 7:(*p).pos[2][0]=caracter;break;
                    case 8:(*p).pos[2][1]=caracter;break;
                    case 9:(*p).pos[2][2]=caracter;break;
          }
}
int main(){
          GALO galo;
          char vez;
          int posicao;
          limpar_tabuleiro(&galo);

          vez='x';
          do{
                    cout<<"Vai jogar o "<<vez<<"\n";
                    mostrar(galo);
                    cout<<"Indique a posicao onde pretende jogar: ";cin>>posicao;
                    jogar(&galo,posicao,vez);
                    if(vez=='x')
                              vez='o';
                    else vez='x';
          }while(!vitoriax(galo)&&!vitoriao(galo)&&!empateox(galo));
          mostrar(galo);
          if(empateox(galo))
                    cout<<"O jogo terminou em empate!\n";
          else if(vitoriax(galo))
                    cout<<"Vitoria do jogador do X\n";
          else cout<<"Vitoria do jogador da O\n";

          return 0;
}



   

    © Todos os direitos reservados por Copyright    | Contactos | Mapa do site | Livro de Visitas |