Losowanie kolejnych pytań
Ostatnio zmodyfikowano 2014-02-04 08:53
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. #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; } }
|
|
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. |
|
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ąć ?? |
|
alixir |
» 2014-02-04 07:43:37 Kompletny kod ułatwiłby szukanie błędu.
|
|
sekont Temat założony przez niniejszego użytkownika |
» 2014-02-04 08:09:40 #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 ); }
. |
|
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. 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; . |
|
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ć. #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 ); } |
|
« 1 » |