viciado 1 Denunciar post Postado Outubro 17, 2009 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
_Isis_ 202 Denunciar post Postado Outubro 17, 2009 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
viciado 1 Denunciar post Postado Outubro 17, 2009 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
_Isis_ 202 Denunciar post Postado Outubro 17, 2009 Você tem certeza que o objeto 'game' é da classe 'jogo'? Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Outubro 18, 2009 Você tem certeza que o objeto 'game' é da classe 'jogo'? Eu não sei estou aprendendo C++ Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 18, 2009 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
viciado 1 Denunciar post Postado Outubro 19, 2009 A gente olha no código. int main(){ jogo game(); game.print(); system("pause"); return 0; } Desculpe. Não entendi o que você quis dizer Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 19, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 19, 2009 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
viciado 1 Denunciar post Postado Outubro 19, 2009 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
quitZAUMMM 18 Denunciar post Postado Outubro 19, 2009 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
_Isis_ 202 Denunciar post Postado Outubro 19, 2009 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
viciado 1 Denunciar post Postado Outubro 19, 2009 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
viciado 1 Denunciar post Postado Outubro 21, 2009 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
_Isis_ 202 Denunciar post Postado Outubro 21, 2009 http://lmgtfy.com/?q=memset O loop infinito é no for... E caso você tenha pulado essa parte de C/C++, case tem um break p/ interromper a "execução em cascata" dos comandos. Compartilhar este post Link para o post Compartilhar em outros sites