System doświadczenia w grze tekstowej

0

Cześć jestem Kacper i jestem początkującym programistą.
Tworzę grę tekstową w c++ i moim problemem jest system expa.
Jest on stworzony na podstawie zakresu liczby expa do danego levelu oraz zmiennej levelParametr która ma za zadanie kontrolować by kilkuktornie nie dostawać punktów za dany lvl.
Myślę, że to włąsnie z tą zmienną jest problem. Z góry dziękuję za pomoc.

if(exp>0 && exp<=200){
			cout<<"Masz 1 level"<<endl;
			goto przeciwnicy;
		}else if(exp>200 && exp<=450){
			cout<<"Masz 2 level"<<endl;
			if(levelParametr==1){ //
				cout<<"W co chcesz dodac 1pkt: "<<endl;
				cout<<"1.Atak  2.Obrona"<<endl;
				levelParametr+=1;
				wyborPkt1: //
				cin>>wyborPkt;
				if(wyborPkt==1){
				atak++; //
				cout<<"Twoj atak wynosi: "<<atak<<endl;
				goto przeciwnicy;
				}else if(wyborPkt==2){
					obrona++; //
					cout<<"Twoja obrona wynosi: "<<obrona<<endl;
					goto przeciwnicy;
				}else{
					cout<<"Wybierz poprawny numer!"<<endl;
					goto wyborPkt1; //
				}
			}
		}else if(exp>=450 && exp<=900){
			cout<<"Masz 3 level"<<endl;
			if(levelParametr==2){
				cout<<"W co chcesz dodac 1pkt: "<<endl;
				cout<<"1.Atak  2.Obrona"<<endl;
				levelParametr+=1;
				wyborPkt2:
				cin>>wyborPkt;
				if(wyborPkt==1){
				atak+= 2;
				cout<<"Twoj atak wynosi: "<<atak<<endl;
				goto przeciwnicy;
				}else if(wyborPkt==2){
					obrona+=2;
					cout<<"Twoja obrona wynosi: "<<obrona<<endl;
					goto przeciwnicy;
				}else{
					cout<<"Wybierz poprawny numer!"<<endl;
					goto wyborPkt2;
				}
	
	
			}
3

Weź zrób sobie normalne menu np: https://4programmers.net/Forum/C_i_C++/352675-stos_funkcje_zapisu_i_odczytu_pliku_binarnego?p=1772198#id1772198
Wtedy nie musisz powtarzać kawałki kodu oraz jak zechcesz rozszerzyć do "1.Atak 2.Obrona 3.Zwinność" to będzie to w jednym miejscu programu.
Poza tym z poziomami oraz ekspem zrób sobie tabelkę:

struct { int exp,pkt; } Levels[]
{
  {200,1}, // Poziom 1, punktów razem 1
  {450,3}, // Poziom 2, punktów razem 3=1+2
  ...
};
const int LevelsCount=sizeof(tb)/sizeof(*tb);

Wyszukujesz w tablice odpowiedni exp, dostajesz ile punktów ma być:

while(atak+obrona<Levels[i].pkt)
{
// wybierz gdzie dodać pkt
1

@Alchemi TV: Za używanie goto od razu do sztumu, z kodu robi się spaghetti, także lepiej się go pozbądź ze słownika.

2
  1. Zapomnij o tym, że istnieje goto. To jest źródło wielu błędów.
  2. Pisz małe funkcje
  3. Kod wklejaj jako całą fukcję, żeby znane były typy wszystkich symboli (jak zadbasz o punkt wyżej, to nie trzeba będzie wklejać wszystkiego)

1 użytkowników online, w tym zalogowanych: 0, gości: 1