Gra Kamień papier nożyce

0

Miałem za zadanie napisać troszkę bardziej rozbudowaną wersję gry Kamień, papier, nożyce (dodatkowo dwa elementy, jaszczurka i Spock) i po wyjściu z pętli wyświetlić statystyki rozgrywek dla gracza, jeśli uczestniczył w danej sesji. Problem w tym, że program wyświetla statystyki tylko dla tych graczy, którzy brali udział w ostatniej grze sesji, a ja nie wiem, co zrobić, żeby wyświetlał je poprawnie.

 // Konrad Korus
// Gra "Kamień, papier, nożyce, jaszczurka, Spock"
#include <iostream>

using namespace std;

int main(){
	int ilosc;
	int i=1;
	
	int wygrane_a=0;
	int remisy_a=0;
	int gry_a=0;
	int porazki_a=0;
	
	int wygrane_b=0;
	int remisy_b=0;
	int gry_b=0;
	int porazki_b=0;
	
	int wygrane_c=0;
	int remisy_c=0;
	int gry_c=0;
	int porazki_c=0;

	char id1,id2,w1,w2;
	
	cin >> ilosc; //liczba rozgrywek
		while(i<=ilosc){
			cin >> id1 >> w1 >> id2 >> w2; //identyfikator wybor identyfikator wybor
			if(id1=='a'){
				gry_a += 1;
					if((w1=='J' && (w2=='P' || w2=='S')) || (w1=='K' && (w2=='J' || w2=='N')) ||
			 			(w1=='N' && (w2=='J' || w2=='P')) || (w1=='P' && (w2=='K' || w2=='S')) || 
			 			(w1=='S' && (w2=='K' || w2=='N'))){
			 			
						 wygrane_a += 1;
			 		
				}
					else if(w1==w2){
						remisy_a += 1;
				}
					else
					porazki_a += 1;
			}
			if(id2=='a'){
				gry_a += 1;
				if((w2=='J' && (w1=='P' || w1=='S')) || (w2=='K' && (w1=='J' || w1=='N')) ||
			 			(w2=='N' && (w1=='J' || w1=='P')) || (w2=='P' && (w1=='K' || w1=='S')) || 
			 			(w2=='S' && (w1=='K' || w1=='N'))){
			 				 wygrane_a += 1;
			 		
				}
				else if(w1==w2){
					remisy_a += 1;
				}
				else
					porazki_a += 1;
			}
			
			if(id1=='b'){
				gry_b += 1;
					if((w1=='J' && (w2=='P' || w2=='S')) || (w1=='K' && (w2=='J' || w2=='N')) ||
			 			(w1=='N' && (w2=='J' || w2=='P')) || (w1=='P' && (w2=='K' || w2=='S')) || 
			 			(w1=='S' && (w2=='K' || w2=='N'))){
			 				
							 wygrane_b += 1;
						 }
				else if(w1==w2){
					remisy_b += 1;
				}
				else
				porazki_b += 1;
			}
			if(id2=='b'){
				gry_b += 1;
				if((w2=='J' && (w1=='P' || w1=='S')) || (w2=='K' && (w1=='J' || w1=='N')) ||
			 			(w2=='N' && (w1=='J' || w1=='P')) || (w2=='P' && (w1=='K' || w1=='S')) || 
			 			(w2=='S' && (w1=='K' || w1=='N'))){
			 				 
							  wygrane_b += 1;
			 		
				}
				else if(w1==w2){
					remisy_b += 1;
				}
				else
					porazki_b += 1;
			}
			
			if(id1=='c'){
				gry_c += 1;
					if((w1=='J' && (w2=='P' || w2=='S')) || (w1=='K' && (w2=='J' || w2=='N')) ||
			 			(w1=='N' && (w2=='J' || w2=='P')) || (w1=='P' && (w2=='K' || w2=='S')) || 
			 			(w1=='S' && (w2=='K' || w2=='N'))){
			 				
							 wygrane_c += 1;
						 }
				else if(w1==w2){
					remisy_c += 1;
				}
				else
				porazki_c += 1;
			}
			if(id2=='c'){
				gry_c += 1;
				if((w2=='J' && (w1=='P' || w1=='S')) || (w2=='K' && (w1=='J' || w1=='N')) ||
			 			(w2=='N' && (w1=='J' || w1=='P')) || (w2=='P' && (w1=='K' || w1=='S')) || 
			 			(w2=='S' && (w1=='K' || w1=='N'))){
			 				 
							  wygrane_c += 1;
			 		
				}
				else if(w1==w2){
					remisy_c += 1;
				}
				else
					porazki_c += 1;
			}
			i++;
		}
	
		if(id1=='a' || id2=='a'){
			cout << "gracz a" << endl;
			if(wygrane_a>0)
			cout << "    wygrane: " << (double(wygrane_a)/double(gry_a))*100 << "%" << endl;
			if(remisy_a>0)
			cout << "    remisy: " << (double(remisy_a)/double(gry_a))*100 << "%" << endl;
			if(porazki_a>0)
			cout << "    przegrane: " << (double(porazki_a)/double(gry_a))*100 << "%" << endl;
		}
		if(id1=='b' || id2=='b'){
			cout << endl << "gracz b" << endl;
			if(wygrane_b>0)
			cout << "    wygrane: " << (double(wygrane_b)/double(gry_b))*100 << "%" << endl;
			if(remisy_b>0)
			cout << "    remisy: " << (double(remisy_b)/double(gry_b))*100<< "%" << endl;
			if(porazki_b>0)
			cout << "    przegrane: " << (double(porazki_b)/double(gry_b))*100 << "%" << endl;
		}
		if(id1=='c' || id2=='c'){
			cout << endl << "gracz c" << endl;
			if(wygrane_c>0)
			cout << "    wygrane: " << (double(wygrane_c)/double(gry_c))*100 << "%" << endl;
			if(remisy_c>0)
			cout << "    remisy: " << (double(remisy_c)/double(gry_c))*100 << "%" << endl;
			if(porazki_c>0)
			cout << "    przegrane: " << (double(porazki_c)/double(gry_c))*100 << "%" << endl;
		}
	return 0;
}
0

Ok, ten problem rozwiązałem, jednak dalej zalicza mi tylko na 40% :/

0
 
       // if(id1=='a' || id2=='a'){
            cout << "gracz a" << endl;
            if(wygrane_a>0)
            cout << "    wygrane: " << (double(wygrane_a)/double(gry_a))*100 << "%" << endl;
            if(remisy_a>0)
            cout << "    remisy: " << (double(remisy_a)/double(gry_a))*100 << "%" << endl;
            if(porazki_a>0)
            cout << "    przegrane: " << (double(porazki_a)/double(gry_a))*100 << "%" << endl;
       // }
       // if(id1=='b' || id2=='b'){
            cout << endl << "gracz b" << endl;
            if(wygrane_b>0)
            cout << "    wygrane: " << (double(wygrane_b)/double(gry_b))*100 << "%" << endl;
            if(remisy_b>0)
            cout << "    remisy: " << (double(remisy_b)/double(gry_b))*100<< "%" << endl;
            if(porazki_b>0)
            cout << "    przegrane: " << (double(porazki_b)/double(gry_b))*100 << "%" << endl;
       // }
       // if(id1=='c' || id2=='c'){
            cout << endl << "gracz c" << endl;
            if(wygrane_c>0)
            cout << "    wygrane: " << (double(wygrane_c)/double(gry_c))*100 << "%" << endl;
            if(remisy_c>0)
            cout << "    remisy: " << (double(remisy_c)/double(gry_c))*100 << "%" << endl;
            if(porazki_c>0)
            cout << "    przegrane: " << (double(porazki_c)/double(gry_c))*100 << "%" << endl;
      //  }

Wystarczy wyświetlać każdego gracza, zamiast specjalnie filtrować. Ale szczerze, to kod jest tragicznej jakości i jeżeli to było zadanie do szkoły, to ja bym postawił 2. Z C++ ma to wspólnego tylko użycie cout/cin.

0
Biały Terrorysta napisał(a):

Ok, ten problem rozwiązałem, jednak dalej zalicza mi tylko na 40% :/

Nieważne, błąd dalej występuje.

0

Z tym, że w Twoim kodzie program wyświetla nazwę gracza nawet, gdy nie brał udziału w sesji.

Co do jakości kodu to proszę o wyrozumiałość, bo programuję dopiero niecały miesiąc.

0
Biały Terrorysta napisał(a):

Z tym, że w Twoim kodzie program wyświetla nazwę gracza nawet, gdy nie brał udziału w sesji.

Co do jakości kodu to proszę o wyrozumiałość, bo programuję dopiero niecały miesiąc.

Tu dalej autor posta, nie miałem jeszcze klas, funkcji ani nawet tablic, których z resztą nie mogę używać w zadaniu, tak samo jak pętli for.

0

IMO: wystarczy sprawdzac wygrane kazdego gracza - jesli wygral, to wygral, jesli nie wygral, to sprawdzic czy drugi ma zwyciestwo. Jesli obaj nie wygrali to remis. Zobacz ile ifow mozna uproscic.

0

Dobra, to pomogło na wyświetlanie wyników, ale nie bardzo rozumiem w jaki sposób mógłbym uprościć te ify.

if(gry_a>0){
            cout << "gracz a" << endl;
            if(wygrane_a>0)
            cout << "    wygrane: " << (double(wygrane_a)/double(gry_a))*100 << "%" << endl;
            if(remisy_a>0)
            cout << "    remisy: " << (double(remisy_a)/double(gry_a))*100 << "%" << endl;
            if(porazki_a>0)
            cout << "    przegrane: " << (double(porazki_a)/double(gry_a))*100 << "%" << endl;
        	}
       	if(gry_b>0){
            cout << endl << "gracz b" << endl;
            if(wygrane_b>0)
            cout << "    wygrane: " << (double(wygrane_b)/double(gry_b))*100 << "%" << endl;
            if(remisy_b>0)
            cout << "    remisy: " << (double(remisy_b)/double(gry_b))*100<< "%" << endl;
            if(porazki_b>0)
            cout << "    przegrane: " << (double(porazki_b)/double(gry_b))*100 << "%" << endl;
       	 	}
       	if(gry_c>0){
            cout << endl << "gracz c" << endl;
            if(wygrane_c>0)
            cout << "    wygrane: " << (double(wygrane_c)/double(gry_c))*100 << "%" << endl;
            if(remisy_c>0)
            cout << "    remisy: " << (double(remisy_c)/double(gry_c))*100 << "%" << endl;
            if(porazki_c>0)
            cout << "    przegrane: " << (double(porazki_c)/double(gry_c))*100 << "%" << endl;
      	} 

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