Gra poker + txt

0

Witam,

Mam mały problem. Do wykonania mam gre poker, która polega na wczytaniu danych z pliku txt gdzie znajduje sie okolo 1000 kombinacji ( w takiej formie: KD 9C JH 7H KC 5S 5S 6S 6D 8H).
Posiada juz calosc, ale niestety wynik nie zgadza sie z tym ktory powinien byc. Sprawdzalem kilku krotnie troche kombinacji i wyszlo ze problem znajduje sie gdzies w tym miejscu:

//Poker			  
				   if (tabkolor[0].equals(tabkolor[1]) & tabkolor[1].equals(tabkolor[2]) & tabkolor[2].equals(tabkolor[3]) & tabkolor[3].equals(tabkolor[4]) & tabfigur[0] == (tabfigur[1]-1) & tabfigur[1] == (tabfigur[2]-1) & tabfigur[2] == (tabfigur[3]-1) & tabfigur[3] == (tabfigur[4]-1)){
					   moc = 22 + (tabfigur[4]/0.100);
						  wynik = moc;
				  }
				  
				   if(tabkolor[5].equals(tabkolor[6]) & tabkolor[6].equals(tabkolor[7]) & tabkolor[7].equals(tabkolor[8]) & tabkolor[8].equals(tabkolor[9]) & tabfigur[5] == (tabfigur[6]-1) & tabfigur[6] == (tabfigur[7]-1) & tabfigur[7] == (tabfigur[8]-1) & tabfigur[8] == (tabfigur[9]-1)){
					   moc1 = 22 + (tabfigur[9]/0.100);
						  wynik = moc1;
				  }
				   
				  //Kareta
				  if(tabfigur[0] == tabfigur[1] & tabfigur[1] == tabfigur[2] & tabfigur[2] == tabfigur[3] & tabfigur[3] != tabfigur[4]){
					  moc = 21 + (tabfigur[3]/0.100);
					  wynik = moc;
				  } else if (tabfigur[0] != tabfigur[1] & tabfigur[1] == tabfigur[2] & tabfigur[2] == tabfigur[3] & tabfigur[3] == tabfigur[4]){
					  moc = 21 + (tabfigur[4]/0.100);
					  wynik = moc;
				  }
				  
				  if(tabfigur[5] == tabfigur[6] & tabfigur[6] == tabfigur[7] & tabfigur[7] == tabfigur[8] & tabfigur[8] != tabfigur[9]){ 
					  moc1 = 21 + (tabfigur[8]/0.100);
					  wynik = moc1;
				  } else if (tabfigur[5] != tabfigur[6] & tabfigur[6] == tabfigur[7] & tabfigur[7] == tabfigur[8] & tabfigur[8] == tabfigur[9]){
					  moc1 = 21 + (tabfigur[9]/0.100);
					  wynik = moc1;
				  }
				  
				  
				  
				  //Full
				  if(tabfigur[0] == tabfigur[1] & tabfigur[1] == tabfigur[2] & tabfigur[3] == tabfigur[4]){
					  moc = 20 + (tabfigur[4]/0.100);
					  wynik = moc;
				  } else if (tabfigur[0] == tabfigur[1] & tabfigur[2] == tabfigur[3] & tabfigur[3] == tabfigur[4]){
					  moc = 20 + (tabfigur[4]/0.100);
					  wynik = moc;
				  }
				  
				   if(tabfigur[5] == tabfigur[6] & tabfigur[7] == tabfigur[8] & tabfigur[8] == tabfigur[9]){
					   moc1 = 20 + (tabfigur[9]/0.100);
						  wynik = moc1;
				  } else if (tabfigur[5] == tabfigur[6] & tabfigur[6] == tabfigur[7] & tabfigur[8] == tabfigur[9]){
					  moc1 = 20 + (tabfigur[9]/0.100);
					  wynik = moc1;
				  }
				   
				//Kolor
				   if (tabkolor[0].equals(tabkolor[1]) & tabkolor[1].equals(tabkolor[2]) & tabkolor[2].equals(tabkolor[3]) & tabkolor[3].equals(tabkolor[4])){
					  moc = 19+(tabfigur[4]/0.100);
					  wynik = moc;
				  }
				  
				   if (tabkolor[5].equals(tabkolor[6]) & tabkolor[6].equals(tabkolor[7]) & tabkolor[7].equals(tabkolor[8]) & tabkolor[8].equals(tabkolor[9])){
					  moc1 = 19 +(tabfigur[9]/0.100);
					  wynik1 = moc1;
				  }
				   
				   
				 //Strit
				   if(tabfigur[0] == (tabfigur[1]-1) & tabfigur[1] == (tabfigur[2]-1) & tabfigur[2] == (tabfigur[3]-1) & tabfigur[3] == (tabfigur[4]-1)){
					   moc = 18 + (tabfigur[0]/0.100);
					  wynik = moc;
				  }
				  
				   if(tabfigur[5] == (tabfigur[6]-1) & tabfigur[6] == (tabfigur[7]-1) & tabfigur[7] == (tabfigur[8]-1) & tabfigur[8] == (tabfigur[9]-1)){
					    moc1 = 18 + (tabfigur[5]/0.100);
					wynik1 = moc1;
				   
				   }
				   
				   

				//Trojka
				   if(tabfigur[0] == tabfigur[1] & tabfigur[1] == tabfigur[2] & tabfigur[3] != tabfigur[2] & tabfigur[4] != tabfigur[3]){ 
					   moc = 17 + (tabfigur[0]/0.100);
					  wynik = moc;
				  } else if (tabfigur[0] != tabfigur[1] & tabfigur[2] == tabfigur[3] & tabfigur[3] == tabfigur[4]){
					   moc = 17 + (tabfigur[2]/0.100);
					  wynik = moc;
				  } else if (tabfigur[0] != tabfigur[1] & tabfigur[1] == tabfigur[2] & tabfigur[2] == tabfigur[3] & tabfigur[4] != tabfigur[3]){
					   moc = 17 + (tabfigur[1]/0.100);
					  wynik = moc;
				  }
				  
				   if(tabfigur[5] == tabfigur[6] & tabfigur[6] == tabfigur[7] & tabfigur[8] != tabfigur[7] & tabfigur[9] != tabfigur[7]){
					   moc1 = 17 + (tabfigur[5]/0.100);
					  wynik1 = moc1;
				  } else if (tabfigur[5] != tabfigur[6] & tabfigur[7] == tabfigur[8] & tabfigur[8] == tabfigur[9]){
					   moc1 = 17 + (tabfigur[7]/0.100);
					  wynik1 = moc1;
				  } else if (tabfigur[5] != tabfigur[6] & tabfigur[6] == tabfigur[7] & tabfigur[7] == tabfigur[8] & tabfigur[9] != tabfigur[7]){
					   moc1 = 17 + (tabfigur[6]/0.100);
					  wynik1 = moc1;
				  }
				   
				   */
				  //Dwie pary
				  if(tabfigur[0] == tabfigur[1] & tabfigur[2] == tabfigur[3] & tabfigur[3] != tabfigur[4]){
					   moc = 16 + (tabfigur[2]/0.100);
					  wynik = moc;
					  }
				  else if(tabfigur[0] == tabfigur[1] & tabfigur[3] == tabfigur[4] & tabfigur[2] != tabfigur[3])
				  {
					   moc = 16 + (tabfigur[3]/0.100);
					  wynik = moc;		 	  
					  } else if(tabfigur[1] == tabfigur[2] & tabfigur[3] == tabfigur[4] & tabfigur[0] != tabfigur[1]){
						   moc = 16 + (tabfigur[4]/0.100);
						  wynik = moc;
						  
						  
					  }
				  if(tabfigur[5] == tabfigur[6] & tabfigur[7] == tabfigur[8] & tabfigur[6] != tabfigur[7]){
					   moc1 = 16 + (tabfigur[7]/0.100);
					  wynik1 = moc1;
				  } else if(tabfigur[5] == tabfigur[6] & tabfigur[8] == tabfigur[9] & tabfigur[7] != tabfigur[8]){
					   moc1 = 16 + (tabfigur[8]/0.100);
					  wynik1 = moc1;
				  }else if (tabfigur[6] == tabfigur[7] & tabfigur[8] == tabfigur[9] & tabfigur[5] != tabfigur[6]){
					   moc1 = 16 + (tabfigur[9]/0.100);
					  wynik1 = moc1;
				  }
				  
				  
				  
				  //Para
				 if(tabfigur[0] == tabfigur[1]){
					   moc =15.0 + (tabfigur[0]/0.100);
					 wynik = moc;
				  } else if (tabfigur[1] == tabfigur[2] ){
					   moc = 15.0 + (tabfigur[1]/0.100);
						 wynik = moc;
				  } else if (tabfigur[2]==tabfigur[3]){
					   moc = 15.0 + (tabfigur[2]/0.100);
						 wynik = moc;
				  } else if (tabfigur[3] == tabfigur[4]){
					   moc = 15.0 + (tabfigur[3]/0.100);
						 wynik = moc;
				 
						 
						 
				  }	if (tabfigur[5] == tabfigur[6]){
						  moc1 = 15.0 + (tabfigur[5]/0.100);
						 wynik1 = moc1;
				  } else if(tabfigur[6]==tabfigur[7]){
					   moc1 = 15.0+(tabfigur[6]/0.100);
						 wynik1 = moc1;
				  } else if (tabfigur[7] == tabfigur[8]){
					   moc1 = 15.0+(tabfigur[7]/0.100);
						 wynik1 = moc1;
				  } else if (tabfigur[8] == tabfigur[9]){
					   moc1 = 15.0+(tabfigur[8]/0.100);
						 wynik1 = moc1;
				  }
				  
				  


						  if(wynik > wynik1){
							  gracz1++;		
							  System.out.println("				Wygral gracz 1");
						  } else if (wynik1 > wynik){
							  gracz2++;
							  System.out.println("							Wygral gracz 2");
						  } else if (wynik == wynik1){
							  if (tabfigur[4] > tabfigur[9]){
							  gracz1++;
							  System.out.println("				Wygral gracz 1");
							  }
							  else if (tabfigur[9] > tabfigur[4]){
								  gracz2++;
							  System.out.println("							Wygral gracz 2");
							  }
							  
						  } 

Dodam jeszcze, ze przy kombinacji: KD 9C JH 7H KC 5S 5S 6S 6D 8H
Wynik wyskakuje mi taki:
7 9 11 13 13 5 5 6 6 8
H C H D C S S S D H
Wygral gracz 1
Gracz nr 1 wygrał : 1 razy.
0

1

Napisz kilka testów i zobacz dla jakich przykładów działa nieprawidłowo, nikt ci tutaj całej tej if-else driven developerki nie przeanalizuje.

3

Rozważ ponowne napisanie tego kodu.

0

Sprawdzałem i problem pojawia mi sie juz przy Dwoch parach, nie potrafi odroznic ze dwie pary 5 5 i 6 6 sa wieksze od jednej parawy 13 13.
Domyslam sie ze kod faktycznie wyglada dosc kiepsko w tych ifach ale nie widzialem innego rozwiazania.

0
dzyzas napisał(a):

Sprawdzałem i problem pojawia mi sie juz przy Dwoch parach, nie potrafi odroznic ze dwie pary 5 5 i 6 6 sa wieksze od jednej parawy 13 13.
Domyslam sie ze kod faktycznie wyglada dosc kiepsko w tych ifach ale nie widzialem innego rozwiazania.

Pytanie nr 1 - w jaki sposób rozróżniasz obu graczy? poprzez zapisywanie co 5 elementów?
Pytanie nr 2 - czy karty są uporządkowane? bo porównujesz tylko sąsiednie karty w danej kombinacji...

Wg mnie można by napisać jakąś klasę przechowującą karty gracza, stworzyć 2 obiekty tej klasy, następnie napisać 2 funkcje - jedną sprawdzającą jaką kombinację kart ma gracz, a drugą sprawdzającą moc tej kombinacji - powinno to trochę uporządkować kod...

0

Odp 1 Wykonuje figura1 = linia.substring(0,1); a nastepnie wpisuej w tablice, wtedy jest to moje tabfigur[0] i tak do tabfigur[4] gdzie jest to gracz nr 1, nastepnie od 5-9 to gracz nr 2.
Odp 2 Tak, tablice sa posortowane.

Czyli proponujesz zeby wykonac to obiektowo ? (wzbranialem sie przed tym, bo jeszcze nie wykonywalem nic obiektowo)

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