Non puoi essere un po' più preciso?Originariamente inviato da Vinciokaboom
Per quanto riguarda il programma se potreste provarlo è meglio, però l'errore sta nel fatto che in alcuni casi esegue funzioni che non dovrebbe eseguire.Chiedere di tentare tutti i percorsi possibili in un programma "a bivi" è un po' eccessivo, specie considerando che noi non abbiamo bene in mente che cosa dovrebbe fare nelle tue intenzioni. Inoltre, hai letto il messaggio di Alex'87? È facile che, nell'indentazione diciamo "poco ordinata" del tuo programma abbia fatto confusione con break & co.
Il mio consiglio è indentare il codice in maniera coerente (in modo da vedere al volo dove si chiudono gli scope), e quindi controllare man mano che i break e le varie istruzioni di controllo del flusso siano dove devono stare. Per aggiustare ora l'indentazione, comunque, basta un tool automatico come astyle:
Inoltre, un'altra cosa che puoi fare per rendere il tuo codice più leggibile (e quindi meno soggetto ad errori di controllo del flusso) è spezzarlo in funzioni (in maniera possibilmente sensatacodice:#include <iostream> #include <cstdlib> using namespace std; int main() { //generali int risposta; //scelte int sceltainiziale; int sceltamagia; int sceltabattaglia; //statistiche int atkmio=50; int difmio=50; int magiafuoco=0; int magiatempo=0; int magiascimmia=0; int hpmio=1000; int mpfuoco=30; int mptempo=30; int mpscimmia=30; //statistiche nemici 1 int atknemico1=50; int difnemico1=30; int hpnemico1=150; cout<<"Sei il figlio illeggittimo del re, assaggia la vendetta e conquista il trono che ti spetta."<<endl<<endl; cout<<" Queste sono le tue statistiche ATK=50; DANNO MAGIA=0; DIF=50; PUNTI MAGIA=30; HP=1000."<<endl<<endl; cout<<"Sei davanti al castello di tuo padre, combatti i guerrieri."<<endl<<endl; cout<<"Hai due possibilità, cosa vuoi fare? Aumentare il tuo attacco [1], aumentare la tua difesa[2] o imparare una magia[3], cosa scegli?"<<endl<<endl; cin>>sceltainiziale; switch (sceltainiziale) { case 1: cout<<"Hai deciso di aumentare il tuo attacco, hai ricevuto una spada con del fuoco attorno[Shishkebab, attacco + 30!]"<<endl<<endl; atkmio = atkmio+30; mpfuoco = mpfuoco-30; mptempo= mptempo- 30; mpscimmia= mpscimmia - 30; break; case 2: cout<<"Hai deciso di aumentare la tua difesa, hai ricevuto uno scudo e un'armatura di maglia[scudo del re, armatura di maglia, difesa +30!]"<<endl<<endl; difmio = difmio+30; mpfuoco = mpfuoco-30; mptempo= mptempo- 30; mpscimmia= mpscimmia - 30; break; case 3: cout<<" Hai deciso di imparare una magia, premi un tasto a caso tra 1, 2, 3 e imparerai una magia."<<endl<<endl; cin>>sceltamagia; switch (sceltamagia) { case 1: cout<<"Hai imparato la magia del fuoco che potrai usare in alcune occasioni nella battaglia. [magia+47!]Questa magia ti diminurà gli mp di 3"<<endl<<endl; magiafuoco = magiafuoco+47; mptempo= mptempo- 30; mpscimmia= mpscimmia - 30; break; case 2: cout<<"Hai imparato la magia del tempo, tu sarai superveloce e i tuoi nemici saranno lentissimi[magia +67]Questa magia ti diminuirà gli mp di 5."<<endl<<endl; magiatempo = magiatempo+67; mpfuoco= mpfuoco- 30; mpscimmia= mpscimmia - 30; break; case 3: cout<<"Hai imparato la magia più potente, complimenti, trasformerai il tuo avversario in una scimmia con hp di 0 e vincerai. La potrai usare contro chi vuoi, una sola volta, tranne contro il boss finale.[magia + 1000!] Questa magia ti diminuirà i tuoi mp a 0."<<endl<<endl; magiascimmia = magiascimmia+1000; mpfuoco= mpfuoco- 30; mptempo= mptempo - 30; }//sceltamagia }//sceltainiziale if (hpnemico1<=0) { cout<<"Hai ucciso il tuo nemico!"<<endl<<endl; } else { do { cout<<"I tuoi hp:"<<hpmio<<endl; cout<<"I tuoi mpfuoco:"<<mpfuoco<<endl; cout<<"I tuoi mptempo:"<<mptempo<<endl; cout<<"I tuoi mpscimmia:"<<mpscimmia<<endl; cout<<"Hp del nemico"<<hpnemico1<<endl; cout<<"Un nemico! Cosa vuoi fare? [1] usa attacco, [2] usa magia fuoco, [3] usa magia tempo, [4] usa magia scimmia, [5] difenditi."<<endl; cin>>sceltabattaglia; switch (sceltabattaglia) { case 1: cout<<"Hai attaccato il primo nemico, i suoi hp scendono!"<<endl<<endl; hpnemico1=hpnemico1 - (atkmio-difnemico1); cout<<"Ugh!"<<endl; cout<<"Ti attacca anche lui, i tuoi hp scendono!"<<endl<<endl; hpmio= hpmio- atknemico1; if (hpnemico1<=0) { cout<<"hai ucciso il nemico!"<<endl<<endl; cout<<"COMPLIMENTI, HAI VINTO!"<<endl; cout<<"premi [0] "; cin>>risposta; } else { cout<<"Premi [1]"<<endl<<endl; cin>>risposta; } break; case 2: if (mpfuoco<3) { cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)"; cin>>risposta; }//chiusura if finiti mp else { cout<<"Hai attaccato il primo nemico con la magia del fuoco"<<endl<<endl; hpnemico1=hpnemico1 - (magiafuoco-difnemico1); mpfuoco= mpfuoco - 3; if (hpnemico1<=0) { cout<<"hai ucciso il nemico!"<<endl<<endl; cout<<"COMPLIMENTI, HAI VINTO!"<<endl; cout<<"premi [0] "; cin>>risposta; }//chiusura if else { cout<<"Premi [1]"<<endl<<endl; cin>>risposta; }//chiusura else break; }//chiusura else magia fuoco case 3: if (mptempo<5) { cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)"; cin>>risposta; }//chiusura if finiti mp else { cout<<"Hai attaccato il nemico con la magia del tempo!"<<endl<<endl; hpnemico1=hpnemico1 - (magiatempo-difnemico1); mptempo= mptempo - 5; if (hpnemico1<=0) { cout<<"hai ucciso il nemico!"<<endl<<endl; cout<<"COMPLIMENTI, HAI VINTO!"<<endl; cout<<"premi [0] "; cin>>risposta; }//chiusura if else { cout<<"Premi [1]"<<endl<<endl; cin>>risposta; }//chiusura else break; }//chiusura else magia tempo case 4: if (mpscimmia<30) { cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)"; cin>>risposta; }//chiusura if finiti mp else { cout<<"Hai attaccato il nemico con la magia della scimmia, spero tu l'abbia usata bene!"<<endl<<endl; hpnemico1=hpnemico1 - (magiascimmia-difnemico1); mpscimmia= mpscimmia - 30; if (hpnemico1<=0) { cout<<"Hai ucciso il nemico!"<<endl<<endl; cout<<"COMPLIMENTI, HAI VINTO!"<<endl; cout<<"premi [0] "; cin>>risposta; }//chiusura if else { cout<<"Premi [1]"<<endl<<endl; cin>>risposta; }//chiusura else break; }//chiusura else magia scimmia case 5: cout<<"Hai decido di difenderti dall'attacco del nemico!"; hpmio=hpmio - (atknemico1-difmio); cout<<" Il nemico ti ha colpito!"<<endl<<endl; break; }//chiusura switchbattaglia }//chiusura do while (risposta==1); cout<<"Complimenti, ora si va avanti!"<<endl; system("PAUSE"); return 0; } }), in modo da poter controllare facilmente una funzione alla volta che non contengano errori e quindi richiamarle via via dal main.

Chiedere di tentare tutti i percorsi possibili in un programma "a bivi" è un po' eccessivo, specie considerando che noi non abbiamo bene in mente che cosa dovrebbe fare nelle tue intenzioni. Inoltre, hai letto il messaggio di Alex'87? È facile che, nell'indentazione diciamo "poco ordinata" del tuo programma abbia fatto confusione con break & co.
Rispondi quotando