Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pomoc z napisaniem gry oczko, kilka pytań.

Ostatnio zmodyfikowano 2017-04-23 16:33
Autor Wiadomość
Avantu
Temat założony przez niniejszego użytkownika
Pomoc z napisaniem gry oczko, kilka pytań.
» 2017-04-22 18:28:38
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:

C/C++
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 do pó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:
C/C++
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!
P-160366
maly7
» 2017-04-23 01:48:19
Żeby zapamiętywał, deklaruj zmienną
char wybor;
 w klasie a nie jako zmienną lokalną. Następnie już wystarczy sprawdzać wartość zmiennej wybor gdzie chcesz (w metodzie czyNastepna lub graj).
P-160391
Avantu
Temat założony przez niniejszego użytkownika
» 2017-04-23 15:16:30
No dobra, ale nadal nie rozumiem co muszę dopisać do programu żeby nie pytał mnie za każdym razem gdy komputer chce dobrać kartę :/

//Edit: Zresztą wpisałem char wybor; do public klasy czlowiek, i nawet jakbym chcial to teraz użyć w oczko::graj to co musze zrobic? Wpisując Czlowiek::wybor dostaje komunikat invalid use of non static data member "Czlowiek::wybor".
P-160413
maly7
» 2017-04-23 16:21:24
Jeśli masz metodę o nazwie wybor to zmienna musi mieć inną nazwę.
Jeśli chcesz, żeby metoda czyNastpepna zwracała wartość false po podaniu n to na początku metody możesz wstawić po prostu:
C/C++
if( wybor == 'N' || wybor == 'n' )
     return false;

P-160420
Avantu
Temat założony przez niniejszego użytkownika
» 2017-04-23 16:33:44
@maly7: Faktycznie, chyba działa, dzięki! Metoda czyli funkcja w klasie? Bo ja do klasy w publicu dopisałem do prostu "char wybor;", to to też jest metoda?

//Edit: Teraz muszę jeszcze napisać funkcje która będzie na koniec gry porównywała liczbę punktów każdego gracza i wybierała zwycięzcę, i w sumie też nie mam pomysłu :/
P-160423
« 1 »
  Strona 1 z 1