while(cos < 5) konczy sie mimo ze cos nie osiagnelo warunku < 5

0

Ucze sie dalej i ucze i sobie pisze gre w pokera, niestety zrobiło mi się coś bardzo dziwnego.

Blok z "try" został dodany poźniej po to żeby w bardzo zły sposób opanować error :P

Pętla while (gracz01.Hand.Count < 5 && gracz02.Hand.Count < 5) ma sie powtarzać póki obydwoje graczy maja poniżej 5 kart. Jednak z jakiegoś powodu pętla często kończy sie w momencie gdy gracz01 ma tylko 4 karty, co w dalszej części kodu tworzy IndexOutOfRangeException ( w pętli która wyświetla karty w oknie ). Nie mam zielonego pojęcia jak to w ogole możliwe ^^ Zwracam się do was z uprzejmą prośbą o naświetlenie mi o co chodzi :P

public void RozdajKarty()
        {
            int wynik;
            try
            {
                while (gracz01.Hand.Count < 5 && gracz02.Hand.Count < 5) // jeśli gracze maja poniżej 5 kart to się kręć
                {
                    wynik = 0;
                    while (wynik == 0) // player 1
                    {
                        wynik = rand.Next() % 52;
                    }
                    if (Talia[wynik].IsInDeck == true) // jeśli karta jest w talii i nie została już wcześniej wyjęta
                    {
                        gracz01.Hand.Add(Talia[wynik]);
                        Talia[wynik].IsInDeck = false;
                    }
                    wynik = 0;
                    while (wynik == 0) // player 2
                    {
                        wynik = rand.Next() % 52;
                    }
                    if (Talia[wynik].IsInDeck == true)
                    {
                        gracz02.Hand.Add(Talia[wynik]);
                        Talia[wynik].IsInDeck = false;
                    }
                }
                if (gracz01.Hand.Count < 5)
                {
                    throw new Exception("Sie zepsulo, jak to mozliwe w ogole?");
                }
            }
            catch (Exception ex)
            {
                ResetujKartyIHand();
                RozdajKarty();
            }                        
        } 
1

pętla while przestanie się wykonywać gdy przynajmniej jeden z graczy będize miał już 5 kart. Nie gwarantuje to tego, że drugi gracz będzie miał 5 kart. Zamiast && użyj ||

1
Vehumet napisał(a):
while (gracz01.Hand.Count < 5 && gracz02.Hand.Count < 5) // jeśli gracze maja poniżej 5 kart to się kręć

Warunek jest prawdziwy tak dlugo jak dlugo oboje gracze maja mniej niz 5 kart. Jednoczesnie w petli dla kazdego gracza losujesz karte i dodajesz ja do "reki gracza" jesli jest dostepna w tali tzn nie zostala wczesniej wylosowana. W zwiazku z tym mozliwa jest sytuacja kiedy gracz2 pierwszy dostanie 5 kart zanim gracz1 dostanie swoje 5 kart (bo dla gracza1 wylosowalo karte, ktora wczesniej zostala juz wylosowana a dla gracza2 wylosowalo 5 kart, ktorych wczesniej nie wylosowano)

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