Utrwalanie wiadomości // wylosuj słowo z pliku
Ostatnio zmodyfikowano 2020-02-23 07:23
Seba_S Temat założony przez niniejszego użytkownika |
Utrwalanie wiadomości // wylosuj słowo z pliku » 2020-02-22 07:51:24 Hej, po każdym rozdziale staram sie utrwalać wiedzie wymyślając sobie dodatkowe zadania domowe ... Stworzyłem program/ gra który wczytuje słowo/dane z pliku "slownik_gra.txt". Program miesza dane słowa a gracz musi je odgadnąć. Wszystko napisałem poza opcja losuj słowo/ wyraz z pliku. nie wiem jak to zrobić... na początku myślałem ze stworze funkcje w której przekaże zmienna "wers" do dynamicznej tablicy vector i go wylosuje ale tak się nie da(?) proszę o podpowiedz... #include <iostream> #include <string> #include <ctime> #include <cstdlib> #include <vector> #include <fstream>
std::string mieszajLitery( std::string slowo ) { std::string mieszanka; int pozycja = 0; while( slowo.size() != 0 ) { pozycja = rand() % slowo.size(); mieszanka += slowo[ pozycja ]; slowo.erase( pozycja, 1 ); } return mieszanka; }
std::string slownik( std::string slowo ) { std::fstream plik; plik.open( "slownik_gra.txt" ); std::string wers; std::getline( plik, wers ); return wers; }
int main() { std::string slowo, pomieszajSlowo, rozwiazanie; char wybor; std::vector < int > tab; srand( time( 0 ) ); do { int gracz = 1; int liczba = 0; int limit = 5; std::cout << "[GRA] losujemy slowo zagadke" << std::endl; slowo = slownik( slowo ); pomieszajSlowo = mieszajLitery( slowo ); std::cout << "co to za slowo: " << pomieszajSlowo << std::endl; std::cout << "Masz tylko " << limit << " prob - powodzenia !" << std::endl; do { std::cout << "[Gracz" << gracz << "] Twoj " << liczba + 1 << " strzal - "; std::cin >> rozwiazanie; if( slowo == rozwiazanie ) { std::cout << "[BooooooM] - trafiles" << std::endl; } else { std::cout << "zle - sprobuj jeszcze raz - "; std::cout << "[ " << pomieszajSlowo << " ]" << std::endl; std::cout << "masz jeszcze " << limit - 1 << " proby" << std::endl; limit--; if( limit == 0 ) { std::cout << std::endl; std::cout << "Nie odgadles slowa w 5 probach" << std::endl; std::cout << "[Game Over]" << std::endl; std::cout << std::endl; std::cout << "prawidlowa odpowiedz to: " << "[" << slowo << "]" << std::endl; } } liczba++; std::cout << std::endl; } while(( slowo != rozwiazanie ) and( limit != 0 ) ); std::cout << "Czy chcesz zagrac ponownie (T/N) - "; std::cin >> wybor; std::cout << std::endl; for( int i = 0; i < gracz; i++ ) { tab.push_back( liczba ); } if( wybor == 'N' ) { for( int i = 0; i < tab.size(); i++ ) { std::cout << "wynik gracza " << i + 1 << " = " << tab[ i ] << " strzaly" << std::endl; } } gracz++; } while( wybor != 'N' ); std::cout << std::endl; std::cout << "KONIEC" << std::endl; } } |
|
DejaVu |
» 2020-02-22 09:48:49 Wczytaj wszystkie wyrazy z pliku do std::vector<std::string>. Następnie wylosuj indeks z zakresu od 0 do wyrazy.size() - 1. |
|
Seba_S Temat założony przez niniejszego użytkownika |
» 2020-02-22 17:26:05 dziękuję , musiałem robić jakaś literówkę bo kompilator mi cały czas wyrzucał blad ... zrobiłem coś takiego ale dalej mi nie losuje... dla pewności zapętliłem żeby sprawdzić czy wypisze mi wszystkie słowa z pliku. Pomocy { std::fstream plik; plik.open( "slownik_gra.txt" ); srand( time( NULL ) ); std::vector < std::string > tablica; std::string wers; while( std::getline( plik, wers ) ) { tablica.push_back( wers ); } for( int i = 0; i < tablica.size(); i++ ) { std::cout << tablica[ i ] << std::endl; } wers = rand() % tablica.size(); std::cout << wers << std::endl; return 0; } } |
|
pekfos |
» 2020-02-22 17:37:23 Wczytaj wszystkie wyrazy z pliku do std::vector<std::string>. Następnie wylosuj indeks z zakresu od 0 do wyrazy.size() - 1. |
wers = rand() % tablica.size(); std::cout << wers << std::endl; |
..Następnie wyciągnij wyraz pod wylosowanym indeksem z wektora. |
|
Seba_S Temat założony przez niniejszego użytkownika |
» 2020-02-23 07:23:28 działa , dziękuję za pomoc { std::fstream plik; plik.open( "slownik_gra.txt" ); srand( time( NULL ) ); std::vector < std::string > tablica; std::string wers; while( std::getline( plik, wers ) ) { tablica.push_back( wers ); } for( int i = 0; i < tablica.size(); i++ ) { tablica[ i ]; } wers = tablica[ rand() % tablica.size() - 1 ]; std::cout << wers << std::endl; return 0; } } |
|
« 1 » |