Pseudolosowość w c++

0

Mam problem z losowością w mojej grze. Chciałem losować statystyki i imiona dla najemników, ale mimo że przy każdym razem są inne to każdy najemnik ma dokładnie takie same statystyki i to samo imię. Poniżej umieściłem funkcje, których używam. Proszę o jakieś rady.

int losowanie(int min, int max)         //losowanie wartosci
{
    srand(time(NULL));
    return rand() % (max - min) + min;
}
```cpp
```cpp
string newName()                         //losowanie imienia
{
    srand(time(NULL));
    string imie[12] = { "Kamil", "Adam", "Wojtek", "Borys", "Bagieta", "Kiepasa", "Pavlo", "Ryman", "Ivan", "Ted", "Rita", "Barbra" };
    int i = rand() % 12;
    return imie[i];
}
```cpp
```cpp
void generuj_najemnikow(int ilosc, naj* spis_karczma)
{
    for (int i = 0; i < ilosc; i++)
    {
        spis_karczma[i].name = newName();
        spis_karczma[i].hp = losowanie(MinHP, MaxHP);
        spis_karczma[i].atk = losowanie(MinStat, MaxStat);
        spis_karczma[i].obr = losowanie(MinStat, MaxStat);
        spis_karczma[i].zad = baseZad;
        spis_karczma[i].pen = pensja(spis_karczma[i].hp, spis_karczma[i].atk, spis_karczma[i].obr);
    }
}
```cpp
5

Poczytaj jak działa srand(time(NULL));
To ustawia ziarno dla rand na podstawie czasu.
Jako, że kod wykonuje się szybko, to czas nie zdąży się zmienić (zwykle liczy sekundy), przez co ustawiasz ziarno ciągle na tą samą wartość, czyli przywracasz sekwencje liczb pseudolosowych.

Polecam skorzystać z nowszych rozwiązań: https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/

No i oczywiście ustawiaj ziarno raz na samym początku programu, a nie wielokrotnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1