Ir para conteúdo

POWERED BY:

Arquivado

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

viciado

Joguinho em C++

Recommended Posts

Estou tentando fazer um jogo simples, quebra cabeça de tijolos deslizante, jogo na qual tem que formar a sequencia de numeros em ordem crescente, sendo que os numeros começam de forma randomica e uma das casas fica livre para a troca de lugar dos numeros.

Estou obtendo erro quando chamo as funções na main, estou com erro em game.print() na main

 

#include <iostream>
#include <cstdlib>

using namespace std;

class jogo{
      private:
              int v[9];
      public:
             jogo(void);
             int mover_cima(int pos);
             int mover_baixo(int pos);
             int mover_esq(int pos);
             int mover_dir(int pos);
             void mover(int pos,int num);
             int testa_pos(int pos);
             int testa_casa(int pos, int num);
             int ganha(void);
             int num_usado(int x);
             void print(void);
             };

int jogo::num_usado(int x){
    for(int i=0; i<9; i++)
            if(x==v[i]) return 1;
            else continue;
    return 0;
}
             
jogo::jogo(void){
      for(int k=0;k<9;k++)
               v[k] = 0;
      int i, j, x = 0;
      for(i=0;i<10;i++){
                  label:
                  x = 1 + rand()%9;
                  if(this->num_usado(x)){
                               v[i] = x;
                                        }
                   else goto label;
                   }
}                 

int jogo::mover_cima(int pos){
       if(v[pos]==0 || v[pos]==1 || v[pos]==2 || v[pos-3]!=0)
                  return 1;
       else return 0;
}

int jogo::mover_baixo(int pos){
    if(v[pos]==6 || v[pos]==7 || v[pos]==8 || v[pos+3]!=0)
                 return 1;
    else return 0;
}

int jogo::mover_esq(int pos){
    if(v[pos]==0 || v[pos]==3 || v[pos]==6 || v[pos-1]!=0)
               return 1;
    else return 0;
}

int jogo::mover_dir(int pos){
    if(v[pos]==2 || v[pos]==5 || v[pos]==8 || v[pos+1]!=0)
               return 1;
    else return 0;
}
  
int jogo::testa_pos(int pos){
    if(pos<1 || pos>9) return 1;
    else return 0;  
}
   
int jogo::testa_casa(int pos, int num){
    switch(num){
                case 2:
                     if(v[pos+3]!=0) return 1;
                     else return 0;
                case 6:
                     if(v[pos+1]!=0) return 1;
                     else return 0;
                case 8:
                     if(v[pos-3]!=0) return 1;
                     else return 0;
                case 4:
                     if(v[pos-1]!=0) return 1;
                     else return 0;
                }   
}
   
void jogo::mover(int pos,int num){
    switch(num){
                case 2:
                     v[pos-3] = v[pos];
                     v[pos] = 0;
                case 6:
                     v[pos+1] = v[pos];
                     v[pos] = 0;
                case 8:
                     v[pos-3] = v[pos];
                     v[pos] = 0;
                case 4:
                     v[pos-1] = v[pos];
                     v[pos] = 0;
                     } 
}
    
int jogo::ganha(void){
    int i;
    for(i=0;i<9;i++){
             if(v[i]<v[i+1]){
                       cout << "\n\n\ Ganhou !!!! \n\n";
                       system("pause");
                       return 0;
                             }
             else return 1;
                  }
}

void jogo::print(void){
     cout << v[0] << "  " << v[1] << "  " << v[2] << endl;
     cout << v[3] << "  " << v[4] << "  " << v[5] << endl;
     cout << v[6] << "  " << v[7] << "  " << v[8] << endl; 
}
    
int main(){
    jogo game();
    game.print();
    system("pause");
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou obtendo erro quando chamo as funções na main, estou com erro em game.print() na main
Poste a saída do compilador, porque são 99% de chances de ter algo lá que você não lê.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou obtendo erro quando chamo as funções na main, estou com erro em game.print() na main

Poste a saída do compilador, porque são 99% de chances de ter algo lá que você não lê.

 

 

127 E:\Dev-Cpp\jogo.cpp request for member `print' in `game', which is of non-class type `jogo ()()'

Compartilhar este post


Link para o post
Compartilhar em outros sites

A gente olha no código.

int main(){ 

jogo game();

game.print(); 

system("pause");

return 0; }

Compartilhar este post


Link para o post
Compartilhar em outros sites
isis@linux-45c9:~/src> g++ -Wall jogo.cpp jogo.cpp: In constructor ‘jogo::jogo()’: jogo.cpp:33: warning: unused variable ‘j’ jogo.cpp: In member function ‘int jogo::ganha()’: jogo.cpp:111: error: unknown escape sequence: '\040' jogo.cpp: In function ‘int main()’: jogo.cpp:127: error: request for member ‘print’ in ‘game’, which is of non-class type ‘jogo ()()’
Olhe p/ o código e responda: desde quando 'game' é uma função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de você arrumar oq a _Isis_ ta qrendo dizer, foi você que fez esse código???

oq acha q esta fazendo nessa linha:

else goto label;
se você acompanha msm o post do pessoal que entende verá q usar goto n é uma boa pratica.

verifique tbm seu construtor.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de você arrumar oq a _Isis_ ta qrendo dizer, foi você que fez esse código???

oq acha q esta fazendo nessa linha:

else goto label;
se você acompanha msm o post do pessoal que entende verá q usar goto n é uma boa pratica.

verifique tbm seu construtor.

 

[]s

 

 

Eu sei que não se deve utilizar goto, mais não descobri outra maneira de resolver o problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

tudo bem entaum, qr usar goto pode até usar.

+ verifique seu construtor, ele esta em "loop" infinito, soh para você ter uma ideia:

jogo::jogo(void){
    memset(v,0,sizeof(int)*9);
    int i, x = 0;
    for(i=0;i<10;i++){
        for(;;){
            printf("aki");
            x = 1 + rand()%9;
            if(this->num_usado(x)){
                v[i] = x;
                break;
            }
        }
    }
}

Não resolvi seu problema pq qro q você identifique te tente resolver!

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Projete direito o algoritmo.

 

 for(i=0;inum_usado(x)){
v[i] = x;
}
else
goto label;

 

 

 

Isso gera loop infinito.

 

 void jogo::mover(int pos,int num){
switch(num){ 
case 2: 
v[pos-3] = v[pos];
v[pos] = 0; 
case 6:
v[pos+1] = v[pos];
v[pos] = 0;
case 8: 
v[pos-3] = v[pos];
v[pos] = 0;
case 4: 
v[pos-1] = v[pos]; 
v[pos] = 0; 
} 
}

 

Você vai fazer tudo isso sempre, independente do valor de num? Cadê o break? E existe repetição desnecessária aí. E novamente, comente o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Projete direito o algoritmo.

 

for(i=0;inum_usado(x)){
 v[i] = x;
 }
 else
 goto label;

 

 

 

Isso gera loop infinito.

 

void jogo::mover(int pos,int num){
 switch(num){ 
 case 2: 
 v[pos-3] = v[pos];
 v[pos] = 0; 
 case 6:
 v[pos+1] = v[pos];
 v[pos] = 0;
 case 8: 
 v[pos-3] = v[pos];
 v[pos] = 0;
 case 4: 
 v[pos-1] = v[pos]; 
 v[pos] = 0; 
 } 
}

 

Você vai fazer tudo isso sempre, independente do valor de num? Cadê o break? E existe repetição desnecessária aí. E novamente, comente o código.

 

 

Agora estou um pouco sem tempo, estudando, depois volto ao joguinho. Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

tudo bem entaum, qr usar goto pode até usar.

+ verifique seu construtor, ele esta em "loop" infinito, soh para você ter uma ideia:

 

jogo::jogo(void){
    memset(v,0,sizeof(int)*9);
    int i, x = 0;
    for(i=0;i<10;i++){
        for(;;){
            printf("aki");
            x = 1 + rand()%9;
            if(this->num_usado(x)){
                v[i] = x;
                break;
            }
        }
    }
}

 

Não resolvi seu problema pq qro q você identifique te tente resolver!

 

 

O que é memset ?

 

 

 

Isso gera loop infinito.

 

void jogo::mover(int pos,int num){
 switch(num){ 
 case 2: 
 v[pos-3] = v[pos];
 v[pos] = 0; 
 case 6:
 v[pos+1] = v[pos];
 v[pos] = 0;
 case 8: 
 v[pos-3] = v[pos];
 v[pos] = 0;
 case 4: 
 v[pos-1] = v[pos]; 
 v[pos] = 0; 
 } 
}

Na main eu verifico se o número digitado está correto.

 

 

Obrigado pela ajuda pessoal é q sou muito iniciante mesmo e estou tentando aprender por isso que as vezes tem coisas obvias que eu não enchergo

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.