Pomoc z napisaniem gry oczko - kilka pytań

0

Witam! Na studiach mam programowanie obiektowe, z którego jestem raczej lewy. Na zajęciach napisaliśmy grę oczko którą mamy dokończyć, w związku z czym mam kilka problemów. Po pierwsze mam taki kod na dobór kart:

bool Czlowiek::czyNastepna()
{
    cout<<"Twoje karty to:"<<endl;
    wyswietl();

    char wybor;
    do
    {
        cout<<"Czy chcesz nastepna karte?[T/N]";
        cin>>wybor;
        if(wybor=='T' || wybor=='t')
            return true;
        else
            if(wybor=='N' || wybor=='n'){
            return false;
        }
        cout<<"wybrano nieprawidlowa opcje"<<endl;
        cin.sync();
        cin.ignore();
    }while(wybor);


}

Problem jest taki, że gracz komputerowy korzysta właśnie z klasy człowiek. Gdy chcę dobrać karty, wszystko jest ok, ale gdy już nie chcę dobierać kart, wpisuję n, i program ponownie mnie pyta czy chcę dobrać karty dopóki gracze komputerowi nie zaprzestaną ich dobierać, a dobierają je dopóki mają mniej niż zadeklarowana ilość punktów (np. 15). Jest jakaś opcja żeby program zapamiętywał że raz już wpisalimy "nie" i za każdym
kolejnym razem już bez naszego pytania wyrzucał false?

Sama funkcja grania wygląda tak:

void Oczko::graj()
{
    t->tasuj();
    bool warunek;
    do
    {
        warunek=false;
        for(int i=0;i<5;++i)
        {
            if(g[i]!=NULL && g[i]->czyNastepna())
            {
                warunek=true;
                g[i]->dodajKarte(t->dajKarte());
                }
            }
    }while(warunek);
    for(int i=0;i<5;++i)
    {
        if(g[i]!=NULL)
        {   g[i]->wyswietl();
            cout<<"Punkty: "<<g[i]->policzPunkty()<<endl;
        }
    }
}

Z góry dzięki za pomoc!

0

gracz komputerowy korzysta właśnie z klasy człowiek

Zastanów się ile w tym sensu ;​)

bool warunek;
do {
    warunek = false;
    for (int i = 0; i < 5; ++i) {
        if (g[i] != NULL && g[i]->czyNastepna()) {
            warunek = true;
            g[i]->dodajKarte(t->dajKarte());
        }
    }
} while (warunek);

Nie lepiej po prostu każdego gracza obsłużyć do końca, zamiast po kolei pytać?

for(int i = 0; i < 5; ++i) {
    if(!g[i]) continue;
    while(g[i]->czyNastepna())
        g[i]->dodajKarte(t->dajKarte());
}
0

Pewnie i lepiej, ja sam tego kodu czasem nie rozumiem, pisaliśmy o na zajęciach z prowadzącym i szczerze powiedziawszy nie podoba mi się ten kod, ale raczej lepszego nie napiszę. Z tym problemem się już uporałem, a tą funkcję twoją wykorzystam. Teraz mój program wygląda tak że po wyborze ilości przeciwników komputerowych dobierasz sobie ile kart chcesz. Gdy wybierzesz że już nie chcesz dobierać wyświetla karty przeciwników i ich punkty. Teraz nie mam pomysłu jakby napisać końcową funkcję która porównywała by wyniki i wybierała zwycięzce(i musi pamiętać o tym że powyżej 21 jest dyskwalifikacja itp.)

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