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

Utrwalanie wiadomości // wylosuj słowo z pliku

Ostatnio zmodyfikowano 2020-02-23 07:23
Autor Wiadomość
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...

C/C++
#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 );
        // std::cout << slowo <<std::endl;
        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;
}
}
P-176269
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.
P-176270
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
C/C++
{
    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;
}
}
P-176273
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.
C/C++
wers = rand() % tablica.size();
std::cout << wers << std::endl;
..Następnie wyciągnij wyraz pod wylosowanym indeksem z wektora.
P-176274
Seba_S
Temat założony przez niniejszego użytkownika
» 2020-02-23 07:23:28
działa , dziękuję za pomoc

C/C++
{
    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;
}
}
P-176276
« 1 »
  Strona 1 z 1