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

Losowanie kolejnych pytań

Ostatnio zmodyfikowano 2014-02-04 08:53
Autor Wiadomość
sekont
Temat założony przez niniejszego użytkownika
Losowanie kolejnych pytań
» 2014-02-03 19:18:16
Witam poszukuje pomocy w sprawie mojej gry chodzi o to że nie mam pojęcia jak zrobić by po odpowiedzeniu na pytanie losowało i pokazało kolejne pytanie. Bardzo proszę o pomoc.

C/C++
#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;
int wylosowana;
void gra();
int odpowiedz;
int pytanie;
int poprawna;
int prawda;
int main()
{
   
    cout << "Witaj w grze Prawda Falsz. Zycze milej zabawy. " << endl;
    cout << "\n 1 Nowa gra \n 2 Instrukcja \n 3 Wyjscie" << endl;
    int opcja;
    cin >> opcja;
    switch( opcja )
    {
    case 1: gra();
        break;
    case 2:
        break;
    case 3:
        break;
    }
    return 0;
}
void gra()
{
    srand( time( NULL ) );
    wylosowana =( rand() % 2 ) + 1;
   
    if( wylosowana == 1 )
   
    {
        pytanie;
        poprawna == prawda;
        cout << "pytanie 1" << endl;
        cin >> odpowiedz;
       
        if( odpowiedz == prawda )
        {
            cout << "Gratulacje" << endl;
        }
        else
             cout << "Odpowiedz bledna!!" << endl;
       
    }
   
    if( wylosowana == 2 )
    {
        poprawna == prawda;
        cout << "pytanie 2" << endl;
        cin >> odpowiedz;
       
        if( odpowiedz == prawda )
        {
            cout << "Gratulacje" << endl;
        }
        else
             cout << "Odpowiedz bledna!!" << endl;
       
    }
   
   
    if( wylosowana == 3 )
    {
        poprawna == prawda;
        cout << "pytanie 3" << endl;
        cin >> odpowiedz;
       
        if( odpowiedz == prawda )
        {
            cout << "Gratulacje" << endl;
        }
        else
             cout << "Odpowiedz bledna!!" << endl;
       
    }
   
    if( wylosowana == 4 )
    {
        poprawna == prawda;
        cout << "pytanie 4" << endl;
        cin >> odpowiedz;
       
        if( odpowiedz == prawda )
        {
            cout << "Gratulacje" << endl;
        }
        else
             cout << "Odpowiedz bledna!!" << endl;
       
    }
   
   
    if( wylosowana == 5 )
    {
        poprawna == prawda;
        cout << "pytanie5" << endl;
        cin >> odpowiedz;
       
        if( odpowiedz == prawda )
        {
            cout << "Gratulacje" << endl;
        }
        else
             cout << "Odpowiedz bledna!!" << endl;
       
    }
}
P-103927
leon_w
» 2014-02-03 20:15:22
Pytania zapisujesz w tablicy stringów, a losujesz tylko indeks tej tablicy. Nr. poprawnej odpowiedzi możesz zapisać w tablicy int-ów i porównywać używając wylosowanego indeksu.
To oczywiście propozycja bo są też inne sposoby.
P-103928
sekont
Temat założony przez niniejszego użytkownika
» 2014-02-03 22:31:32
użyłem Pętli do while ale jak wpisuje np: "prawda" to losuje kolejny ale wyświetla go 6 razy macie pomysły jak to pominąć ??
P-103932
alixir
» 2014-02-04 07:43:37
Kompletny kod ułatwiłby szukanie błędu.

P-103936
sekont
Temat założony przez niniejszego użytkownika
» 2014-02-04 08:09:40
C/C++
#include <ctime>
#include <cstdlib>
#include <iostream>




using namespace std;
int wylosowana;
int gra();
char odpowiedz;
int pytania();
int poprawna;
int prawda;
int bledna = 0;
int main()
{
   
    cout << "Witaj w grze Prawda Falsz. Zycze milej zabawy. " << endl;
    cout << "\n 1 Nowa gra \n 2 Instrukcja \n 3 Wyjscie" << endl;
    int opcja;
    cin >> opcja;
    switch( opcja )
    {
    case 1: gra();
       
    case 2:
        break;
    case 3:
        break;
    }
}
int gra()
{
    bledna = 0;
    do
    {
       
       
       
        srand( time( NULL ) );
        wylosowana =( rand() % 4 ) + 1;
       
        if( wylosowana == 1 )
        {
            poprawna = prawda;
            cout << "pytanie 1" << endl;
        }
       
        if( wylosowana == 2 )
        {
            poprawna = prawda;
            cout << "pytanie 2" << endl;
        }
       
       
        if( wylosowana == 3 )
        {
            poprawna = prawda;
            cout << "pytanie 3" << endl;
        }
       
        if( wylosowana == 4 )
        {
            poprawna = prawda;
            cout << "pytanie 4" << endl;
        }
       
       
        if( wylosowana == 5 )
        {
            poprawna = prawda;
            cout << "pytanie5" << endl;
        }
        cin >> odpowiedz;
       
        if( odpowiedz == poprawna )
        {
            cout << "dobra odp" << endl;
        }
       
       
       
    } while( bledna != 1 );
   
}
.
P-103937
akwes
» 2014-02-04 08:36:49
Poczytaj o tablicach, bo w tym momencie robisz to na około i posiadasz dużo nadmiarowego kodu. Pomyśl jak mógłbyś to zautomatyzować za pomocą tablic.

C/C++
// Pseudokod
std::string PYTANIA[ 20 ];
char ODPOWIEDZI[ 20 ];
PYTANIA[ 0 ] = "Pytanie 1";
ODPOWIDZI[ 0 ] = '1';
// ...

char odpowiedz;
PETLA
int indexPytania = LOSUJ();
WYPISZ( PYTANIE[ indexPytania ] );
CZYTAJ( odpowiedz );
if( odpowiedz == ODPOWIEDZI[ indexPytania ] ) {
   
} else {
   
}
KONIEC PETLI

Poczytaj też o tym co robi funkcja
srand();
 oraz jak jej używać, ponieważ to, że u Ciebie jest w funkcji jest podejrzane.

// A co do błędu, to czy jesteś pewien, że odpowiedzią zawsze jest jeden znak? Nie widzę też inicjalziacji zmiennej
int prawda;
 czy
int poprawna;
.
P-103938
alixir
» 2014-02-04 08:53:41
Masa błędów.

Po 1. Zmienne globalne -> unikaj ich
Po 2. Zmienna odpowiedz to typ char. Przyjmuje tylko 1 znak, więc nie możesz wpisać prawda. Jeśli to zrobisz to przez 6 kolejnych pętli program pobiera po jednym znaku. Stąd te powtórzenia.
Po 3. Porównujesz zmienną odpowiedz do zmiennej poprawna (typ char do typu int). Nic sensownego w ten sposób nie uzyskasz.
Po 4. Ani main ani funkcja gra nie zwracają wyniku, a według definicji powinny.
Po 5. Funkcja srand musi być użyta tylko 1x na początku. Inaczej losowanie nie będzie poprawne
Po 6. Po case 1 brakuje break

Ogólnie chyba źle podchodzisz do sprawy. Dokonałem pewnych modyfikacji twojego kodu. Przyjrzyj się temu i postaraj zrozumieć.

C/C++
#include <ctime>
#include <iostream>
#include <string>

using namespace std;

void gra();

int main()
{
    cout << "Witaj w grze. Zycze milej zabawy. " << endl;
    cout << "\n 1 Nowa gra \n 2 Instrukcja \n 3 Wyjscie" << endl;
    int opcja;
    cin >> opcja;
    switch( opcja )
    {
    case 1:
        gra();
        break;
    case 2:
        break;
    case 3:
        break;
    }
   
    return 0;
}

void gra()
{
    srand( time( NULL ) );
    bool bledna = true;
    char odpowiedz;
   
    std::string pytania[] = { "1 + 1 = ?\na) 1\nb) 2\nc) 3",
        "2 * 3 = ?\na) 4\nb) 5\nc) 6",
        "5 - 3 = ?\na) 2\nb) 3\nc) 4",
        "10 / 2 = ?\na) 2\nb) 5\nc) 8",
        "4 + 3 - 2 = ?\na) 2\nb) 5\nc) 6",
        "2 * 3 + 4 = ?\na) 6\nb) 8\nc) 10" };
   
    char odpowiedzi[] = { 'b', 'c', 'a', 'b', 'b', 'c' };
   
    do
    {
        int wylosowana =( rand() % 4 ) + 1;
       
        cout << endl << pytania[ wylosowana ] << endl << "Twoja odpowiedz: ";
        cin >> odpowiedz;
       
        if( odpowiedz == odpowiedzi[ wylosowana ] )
        {
            cout << "Brawo - wygrales!" << endl;
            bledna = false;
        }
       
    } while( bledna );
   
}
P-103939
« 1 »
  Strona 1 z 1