1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C++ erro com funcoes

Discussão em 'Programação' iniciada por Midnighthowl, 4 de Maio de 2009. (Respostas: 3; Visualizações: 1639)

  1. boas!!!
    comecei a aprender c++ atraves de uns tutorials na net e comecei a fazer uns programas e jogos para treinar mas encravei numa parte...

    criei um menu com as seguistes escolhas :

    1-jogo 1
    2-jogo 2
    3-sair

    normalmente quando abro o jogo e meto sair corre tudo bem ...
    mas quando eu meto jogo 1, e quando vou a escolher a dificuldade (1-4) e carrego 5 (supostamente devia saltar para o menu e dar tudo normalmente) mostra o menu mas eu escolho sair e aquilo comeca me um jogo de novo ...
    quando escolho jogo2 isso n acontece

    esta aqui o codigo ... cortei o desnecessario...

    Código:
    #include <iostream>
    #include <stdlib.h>   
    #include <windows.h>      
    using namespace std;
    
    
    int menu2;
    bool jogar = true;
    int difj1;
    int numero;
    int tentativas;
    int adivinha;
    
    
    
    void menu();
    void J1();
    void J1Dif ();
    void J2();
    int random(int de, int ate) 
    {
        int random;
        ate -= de;
        random = rand() % (ate + 1) + de;
        return random;
    }
    
    
    
    
    
    int main ()
    {
        srand(GetTickCount());
        cout << "C++ Games" << endl;
        cout << "Created By Midnighthowl" << endl << endl << endl;
        menu ();
        
        cin.get();
        return 0;
        }
        
        
        
    
    
    void menu()
    {
         cout << "Menu:" << endl << endl;
         cout << "1-Adivinha o Numero"<< endl;
         cout << "2-Jogo2"<< endl;
         cout << "3-Sair"<< endl;
         cin >> menu2;
         
         switch(menu2)
         {
                     case 1:
                          J1();
                          break;
                     case 2:
                          J2();
                          break;                 
                     case 3:
                          jogar = false;
                          break;
                     default:
                          cout << "Opcao errada, escolha novamente:" << endl << endl;
                          menu();       
                     }
         }
    
    void J1()
    {
         cout << endl;
         cout << "Voce escolheu o jogo Adivinha o Numero." << endl;
         cout << "Escolha agora a dificuldade a que deseja jogar:" <<endl << endl;
         J1Dif ();
         }
    void J1Dif ()
    {
         cout << "1-Diabolico" << endl;
         cout << "2-Dificil" << endl;
         cout << "3-Medio" << endl;
         cout << "4-Facil" << endl;     
         cin >> difj1;
         cout << endl;
              
         tentativas = difj1*3;
         numero = random(1,10*difj1);
         
         switch(difj1)
         {
                      case 1:
                           cout << "Diabolico:" << endl << endl;
                           break;
                      case 2:
                           cout << "Dificil" << endl << endl;
                           break;
                      case 3:
                           cout << "Medio" << endl << endl;
                           break;
                      case 4:
                           cout << "Facil" << endl << endl;
                           break;
                      default:
                              menu();
                              break;
                              }            
                           cout << "Tem "<<difj1*3<<" tentativas para acertar no numero certo (1-"<<difj1*10<<")" << endl << endl;
                           
         while(adivinha != numero)
         {
                        cin >> adivinha;
                            if(adivinha == numero)
                            {
                                        cout << "Parabens... Ganhaste"<< endl << endl << endl;
                                        menu();
                                        }
                            else if(adivinha < numero)
                            {
                                 cout << "Mais"<< endl;
                                 }
                            else if(adivinha > numero)
                            {
                                 cout << "Menos"<< endl;
                                 }
                            else 
                            {
                                 cout << "por favor escolhe um numero entre 1 e " << difj1*10 << endl;
                                 }
                            tentativas --;
                            if(tentativas >0)
                            {
                        cout << "Tens " << tentativas << " tentativas" << endl << endl;
                             }
                             else
                             {
                                 cout <<  "GAME OVER" << endl;
                                 cout << "Era o numero "<< numero << endl << endl;
                                 menu();
                                 }
                        }
              }
    void J2()
    {
         cout << "Em construcao... "<< endl;
         menu();
         }
    
     
  2. zgruli

    zgruli Power Member

    Código:
    void menu()
    {
    [COLOR="Red"]do{[/COLOR]
         cout << "Menu:" << endl << endl;
         cout << "1-Adivinha o Numero"<< endl;
         cout << "2-Jogo2"<< endl;
         cout << "3-Sair"<< endl;
         cin >> menu2;
         
         switch(menu2){
                     case 1:
                          J1();
                          break;
                     case 2:
                          J2();
                          break;                 
                     case 3:
                          jogar = false;
                          break;
                     default:
                          cout << "Opcao errada, escolha novamente:" << endl << endl;
                          [COLOR="Yellow"]//menu();   Não é muito boa ideia chamar outra vez a função :)[/COLOR]
               }
          [COLOR="#ff0000"]}while(menu2!=3);[/COLOR]
    }
    
    Vê se já funciona (acho que está bem mas n testei) e se percebeste a lógica.
    Agora n tenho tempo para ver o resto do código para mais dicas, mais logo vejo se posso.

    EDIT: Bem, o grande problema que tens em todo o código é ires chamando a função menu dentro dela própria umas quantas vezes. (como tinhas nesta função que eu tinha alterado)
    Isso é que te faz estoirar com o programa.
    Não chames a função menu na função J1Dif nem na J2 e usa o do while como eu fiz atrás:
    Código:
    void J1Dif ()
    {
    [COLOR="#ff0000"]do{[/COLOR]
         cout << "1-Diabolico" << endl;
         cout << "2-Dificil" << endl;
         cout << "3-Medio" << endl;
         cout << "4-Facil" << endl;     
         cin >> difj1;
         cout << endl;
              
         tentativas = difj1*3;
         numero = random(1,10*difj1);
         
         switch(difj1)
         {
                      case 1:
                           cout << "Diabolico:" << endl << endl;
                           break;
                      case 2:
                           cout << "Dificil" << endl << endl;
                           break;
                      case 3:
                           cout << "Medio" << endl << endl;
                           break;
                      case 4:
                           cout << "Facil" << endl << endl;
                           break;
                      default:
                              break;
                              }            
    cout << "Tem "<<difj1*3<<" tentativas para acertar no numero certo (1-"<<difj1*10<<")" << endl << endl;
    [COLOR="Red"]}while(difj1<1 || difj1>4);    [/COLOR]          
         [COLOR="Yellow"]//while(adivinha != numero)[/COLOR]
         [COLOR="Red"]do[/COLOR]{
               [COLOR="Red"]cout << "por favor escolhe um numero entre 1 e " << difj1*10 << endl;[/COLOR]
                        cin >> adivinha;
    [COLOR="#ffff00"]                        //if(adivinha == numero)
                            //{
                                        //cout << "Parabens... Ganhaste"<< endl << endl << endl;
                                        //menu();
                                        //}[/COLOR]
                            else[/COLOR] if(adivinha < numero)
                            {
                                 cout << "Mais"<< endl;
                                 }
                            else if(adivinha > numero)
                            {
                                 cout << "Menos"<< endl;
                                 }
                            [COLOR="#ffff00"]//else 
                            //{
                                 //cout << "por favor escolhe um numero entre 1 e " << difj1*10 << endl;
                                 //}[/COLOR]
                            tentativas --;
                            if(tentativas >0)
                            {
                        cout << "Tens " << tentativas << " tentativas" << endl << endl;
                             }
                             [COLOR="Yellow"]//else
                             //{
                                 //cout <<  "GAME OVER" << endl;
                                 //cout << "Era o numero "<< numero << endl << endl;
                                 //menu();
                                 //}[/COLOR]
                        }[COLOR="#ff0000"]while(adivinha!=numero || tentativas<=0);[/COLOR]
    [COLOR="#ff0000"]if(adivinha==numero){
    cout << "Parabens... Ganhaste"<< endl << endl << endl;
    }else{
    cout <<  "GAME OVER" << endl;
    cout << "Era o numero "<< numero << endl << endl;
    }[/COLOR]
              }
    
    Acho que deve estar mais ou menos. Vê lá se funciona e se percebeste.
     
    Última edição: 5 de Maio de 2009
  3. bem obigrado pela ajuda
    mas n resolveu o meu problema principal ... eu entendi a ideia mas nao pareceu resolver o meu prob. ... amanha vejo melhor e depois digo qq coisa ... se calhar escapou-me algo
     
    Última edição: 6 de Maio de 2009
  4. ok afinal deu ...
    mt obrigado :003:...
     

Partilhar esta Página