Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcosnatan

[Resolvido] Testador para Jogo da Velha

Recommended Posts

Olá galera!! Há alguns dias eu terminei meu primeiro game: Um jogo da velha muito simples!!

Ele ainda está na versão linha de comando, mas pretendo migrar para a versão GUI em breve, assim que aprender mais sobre a win32. Mas

estou aqui para pedir que testem o game e digam o que acharam e o que pode ser mudado p melhor. Eu já testei o jogo e ta rodando beleza, mas é bom

ter outra visão além da minha! Muito obrigado desde já!!

 

Aqui vai o arquivo .h:

 

JVelha.h

#define Line 3
#define Column 3
#ifndef JVelha_h     // Evita inclusões múltiplas do cabeçalho
#define JVelha_h

/*
  Defini a classe JVelha, que foi utilizada na produção do Game.
*/
class JVelha{
      private:
              struct JVelha_struct{
                     char array[Line][Column]; /* tabuleiro principal do game */
                     char array_check[Line][Column]; /* tabuleiro secundario do game */
                     char kindp1, kindp2, letter; /* letras usadas pelo P1, P2 e lida para ser marcada */
                     int line,column; /* Variaveis usadas para marcar o kind no array */
                     int kind_erro, jogada_erro, array_check_erro; /* variáveis utilizadas para indicar erros */
              }base;
      public:
             JVelha();
             ~JVelha();
             int looplimit;
             void display_array();           /* Declaração da interface pública da Classe JVelha */
             void check_kind();
             void pega_jogada(int);
             int check_jogada(int, int);
             int check_vencedor(int);
             int check_all_jogada(void);
};
#endif

Aqui vai a implementação da classe

 

JVelha.cpp

#include "JVelha.h"
#include <cstdio>
#include <cstdlib>
/* IMPLENTACAO DA CLASSE JVELHA*/
JVelha::JVelha(){
                 char fill = 'A'; // variavel usada para preencher o array com letras
                 looplimit = 0;
                 base.jogada_erro = 1;       /* Inicialização de variáveis da classe */
                 base.kind_erro = 1;
                 for(int y = 0; y < 3; y++){
                         for(register int z = 0; z < 3; z++){
                                 base.array[y][z] = fill++;
                                 base.array_check[y][z] = '-';                         
                         }                 
                 }
                 printf("Jogo da Velha sendo Criado...\n");
}
JVelha::~JVelha(){
                  printf("Jogo da Velha sendo Destruido!\n");
}
void JVelha::display_array(){
     printf("\t-- JVELHA GAME --\n");
     for(int y = 0; y < 3; y++){
             for(int z = 0; z < 3; z++){
                     printf("\t%c",base.array[y][z]);                         
             }
             printf("\n");                
     }     
}
void JVelha::check_kind(){
     // kind_erro = 1;
     do{
         printf("(Jogador1) Deseja ser X ou O? ");
         scanf("%c",&base.kindp1);
         switch(base.kindp1){
                       case 'X':
                       case 'x':   base.kindp1 = 'X';
                                   base.kindp2 = 'O';
                                   base.kind_erro = 0;
                                   break;
                       case 'O':
                       case 'o':   base.kindp1 = 'O';
                                   base.kindp2 = 'X';
                                   base.kind_erro = 0;
                                   break;
                       case 'S':
                       case 's':   printf("Voce escolheu a opcao sair do jogo!\n");
                                   system("cls");
                                   exit(0);
                                   break;
                       default:    printf("Opcao invalida, responda com X ou O!\n");
         
         }
         fflush(stdin);
     }while(base.kind_erro != 0);
}
/*
  Funcao que pega a jogada e verifica se é válida
*/
void JVelha::pega_jogada(int player){
     if(player == 1){
               do{
                   printf("(Jogador1) Digite a letra que deseja marcar: ");
                   scanf("%c",&base.letter);
                   switch(base.letter){
                            case 'A':
                            case 'a':  base.line = 0;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'B':
                            case 'b':  base.line = 0;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'C':
                            case 'c':  base.line = 0;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'D':
                            case 'd':  base.line = 1;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'E':
                            case 'e':  base.line = 1;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'F':
                            case 'f':  base.line = 1;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'G':
                            case 'g':  base.line = 2;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'H':
                            case 'h':  base.line = 2;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'I':
                            case 'i':  base.line = 2;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'S':
                            case 's':  printf("Voce escolheu a opcao sair do jogo!\n");
                                       system("cls");
                                       exit(0);
                                       break;
                            default:   printf("Opcao invalida tente novamente!\n");
                                       base.jogada_erro = 1;
                   }
                   fflush(stdin);
               }while(base.jogada_erro == 1 || base.array_check_erro == 1);
               base.array[base.line][base.column] = base.kindp1;
               base.array_check[base.line][base.column] = base.kindp1;
               looplimit++;
     }else{
           do{
                   printf("(Jogador2) Digite a letra que deseja marcar: ");
                   scanf("%c",&base.letter);
                   switch(base.letter){
                            case 'A':
                            case 'a':  base.line = 0;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'B':
                            case 'b':  base.line = 0;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'C':
                            case 'c':  base.line = 0;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'D':
                            case 'd':  base.line = 1;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'E':
                            case 'e':  base.line = 1;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'F':
                            case 'f':  base.line = 1;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'G':
                            case 'g':  base.line = 2;
                                       base.column = 0;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'H':
                            case 'h':  base.line = 2;
                                       base.column = 1;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'I':
                            case 'i':  base.line = 2;
                                       base.column = 2;
                                       base.jogada_erro = 0;
                                       if(base.array_check_erro = check_jogada(base.line, base.column))
                                                             printf("Letra ja marcada, tente outra!\n");
                                       break;
                            case 'S':
                            case 's':  printf("Saindo do Jogo!\n");
                                       exit(0);
                                       break;
                            default:   printf("Opcao invalida tente novamente!\n");
                                       base.jogada_erro = 1;
                   }
                   fflush(stdin);
               }while(base.jogada_erro == 1 || base.array_check_erro == 1);
               base.array[base.line][base.column] = base.kindp2;
               base.array_check[base.line][base.column] = base.kindp2;
               looplimit++; 
     }     
}
/*
  Funcão que verifica se a posicão já foi marcada
*/
int JVelha::check_jogada(int arg1, int arg2){
    if(base.array_check[arg1][arg2] != '-')
                               return 1; // retorna 1 se a letra ja foi marcada
    else
        return 0; // retorna 0 se a letra ainda nao foi marcada    
}
int JVelha::check_all_jogada(void){
    int find = 0;
    for(int a = 0; a < 3; a++){
            for(int b = 0; b < 3; b++){
                    if(base.array_check[a][b] != '-')
                                              find++;
            }
    }
    return find;
}
/*
  Função que checa se há um vencedor
*/
int JVelha::check_vencedor(int arg){
    if(arg == 1){
           for(int index = 0; index < 3; index++){
                   if(base.array[index][0] == base.kindp1 && base.array[index][1] == base.kindp1 && base.array[index][2] == base.kindp1){
                                      return 1;
                   }
                   if(base.array[0][index] == base.kindp1 && base.array[1][index] == base.kindp1 && base.array[2][index] == base.kindp1){
                                      return 1;
                   }
           }
           if(base.array[0][0] == base.kindp1 && base.array[1][1] == base.kindp1 && base.array[2][2] == base.kindp1){
               return 1;
           }
           if(base.array[2][0] == base.kindp1 && base.array[1][1] == base.kindp1 && base.array[0][2] == base.kindp1){
               return 1;
           }
           return 0; 
    }else{
          for(int index = 0; index < 3; index++){
                   if(base.array[index][0] == base.kindp2 && base.array[index][1] == base.kindp2 && base.array[index][2] == base.kindp2){
                                      return 1;
                   }if(base.array[0][index] == base.kindp2 && base.array[1][index] == base.kindp2 && base.array[2][index] == base.kindp2){
                                      return 1;
                   }
           }
           if(base.array[0][0] == base.kindp2 && base.array[1][1] == base.kindp2 && base.array[2][2] == base.kindp2){
               return 1;
           }
           if(base.array[2][0] == base.kindp2 && base.array[1][1] == base.kindp2 && base.array[0][2] == base.kindp2){
               return 1;
           }
           return 0;  
    }    
}

E enfim o arquivo principal: JVelhaGame.cpp

#include "JVelha.cpp"
#include <cstdio>
#include <cstdlib>

int main(void){
    JVelha game;
    printf("Para sair do jogo digite S ou s\n");
    game.display_array();
    game.check_kind();
    do{
        game.pega_jogada(1);
        game.display_array();
        printf("looplimit: %i\n",game.looplimit);
        if(game.check_vencedor(1)){
                                  printf("Parabens Jogador1 voce venceu!\n");
                                  printf("Fim do jogo!\n");
                                  system("pause");
                                  exit(0);
        }
        if(game.check_all_jogada() == 9){
                                 printf("Nao houve vencedor, todas as posicoes ja foram jogadas!\n");
                                 system("pause");
                                 exit(0);
        }
        game.pega_jogada(2);
        game.display_array();
        printf("looplimit: %i\n",game.looplimit);
        if(game.check_vencedor(2)){
                                  printf("Parabens Jogador2 voce venceu!\n");
                                  printf("Fim do jogo!\n");
                                  system("pause");
                                  exit(0);
        }
        if(game.check_all_jogada() == 9){
                                 printf("Nao houve vencedor, todas as posicoes ja foram jogadas!\n");
                                 system("pause");
                                 exit(0);
        }
    }while(1); //condicao de termino do loop
    printf("Fim do jogo!\n");
    system("pause");
    exit(0);    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- você tem uma classe. Por que raios uma struct dentro da classe ?

 

2- Não use fflush(stdin). Antes de começar o flame, vá ler porque.

 

3- Enxugue mais o código.

 

void JVelha::pega_jogada(int player){

do {
	printf("(Jogador%d) Ditige a letra que deseja marcar:", player);
	scanf("%c",&base.letter);

letter = toupper(letter);

if (letter == 'S') {
	printf("Voce escolheu a opcao sair do jogo!\n");
	system("cls");
	exit(0);
}

	if ((int)letter < (int)'A' || (int)letter > (int)'I') {
	printf("Opcao invalida tente novamente!\n");
	base.jogada_erro = 1;

	} else {

	jogada_erro = 0;
	column = ((int)letter % (int)'A') % 3;
	if (letter == 'A' || letter == 'B' || letter == 'C')
	linha = 0;
	else if (letter == 'D' || letter == 'E' || letter == 'F')
	linha = 1;
	else if (letter == 'G' || letter == 'H' || letter == 'I')
	linha = 2;

	if(base.array_check_erro = check_jogada(base.line, base.column))
	printf("Letra ja marcada, tente outra!\n");

	}

}while(base.jogada_erro == 1 || base.array_check_erro == 1);

if(player == 1) {
	base.array[base.line][base.column] = base.kindp1;
	base.array_check[base.line][base.column] = base.kindp1;
} else {
	base.array[base.line][base.column] = base.kindp2;
	base.array_check[base.line][base.column] = base.kindp2;
}
looplimit++;

}

 

int JVelha::check_jogada(int arg1, int arg2){
return (base.array_check[arg1][arg2] != '-');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.