C++ erro com funcoes

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();
     }
 
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:
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:
Back
Topo