Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

03.09.2007, 18:05

hmm ... das kann jetzt mal net war sein ^^

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <ctime>
#include <algorithm>
#include <vector>
#include <iostream>

template <typename T>
T rand_likely(T const& low, T const& height, const std::vector<T>& more_likely, T const& intervall = 1)
{
    std::vector<T> tmp_data(height - low + more_likely.size());
    T data = low;
    for (std::size_t i = 0; i < (tmp_data.size() - more_likely.size()); ++i, data += intervall) tmp_data[i] = data;
    std::copy(more_likely.begin(), more_likely.end(), tmp_data.begin() + (height - low));
    std::random_shuffle(tmp_data.begin(), tmp_data.end());
    return tmp_data.at(0);
}

int main()
{
    std::cout << "Randome!" << std::endl;
    std::srand(std::time(0));
    std::vector<int> more_likely;
    for (std::size_t i = 0; i < 10; ++i)
        more_likely.push_back((i % 3) * 5000 + 15000);
    std::cout << rand_likely<int>(15000, 45000, more_likely, 1000) << std::endl;
}
... wäre bsw. ne Möglichkeit.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

12

03.09.2007, 18:13

C-/C++-Quelltext

1
2
 more_likely.push_back((i % 3) * 5000 + 15000);
    std::cout << rand_likely<int>(15000, 45000, more_likely, 1000) << std::endl;


die beiden zeilen sind so mein Problem ..

vorallem die obere , wie kann ich ihm da sagen welche zahlen ich bevorzuge ?

Die untere ist eigentlich klar , das ist die range zwischen 15000 und 45000 ..

man muss halt statt den 1000 von dir nur 1 übergeben denn sonst sind die zahlen zu groß

Edit : und wie mach ich es das er statt alle zahlen zwischen 15000 und 4500 nur die vollen sekunden nimmt also 1000 , 2000 , 3000 , 4000 , 5 000 usw

13

03.09.2007, 18:22

Ehm ja ^^ Solangsam komm ich mir hier doof vor. Ich hab kein Bock dir das alles zu machen. Vllt. bemühst du mal den debugger... dann würdest du merken, das er einen viel zu großen Vektor erstellt! Hab vergessen das intervall mit einzubeziehen.
=>

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
template <typename T>
T rand_likely(T const& low, T const& height, const std::vector<T>& more_likely, T const& intervall = 1)
{
    std::vector<T> tmp_data((height - low) / intervall + more_likely.size());
    T data = low;
    for (std::size_t i = 0; i < (tmp_data.size() - more_likely.size()); ++i, data += intervall) tmp_data[i] = data;
    std::copy(more_likely.begin(), more_likely.end(), tmp_data.begin() + (height - low) / intervall);
    std::random_shuffle(tmp_data.begin(), tmp_data.end());
    return tmp_data.at(0);
}
Noch ne Frage und es klatsch ^^
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

14

03.09.2007, 18:28

Oo ich schlag Deviloper für die schönste Nutzung von std:: Klassen und Methoden/Funktionen vor :D

Mir wäre auf Anhieb nur folgendes eingefallen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int MeineZufallszahl(void)
{
     int fr = rand() * 100.0f / RAND_MAX + 1.5f; //eine Zahl zwischen 1 und 100


     if(fr <= 10)             return 1; //gib eine 1 zurück bei einen würfelereignis zwischen 0 und 11 => 10%

     else if(fr <= 25)        return 3; //gib eine 3 zurück bei einem würfelereignis zwischen 10 und 26 => 15%


usw.
}     


Ist natürlich lange nicht so flexibel und mit ziemlich plump geschrieben ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

15

03.09.2007, 18:30

Vector ? ... Kann man das essen ? xD :? ... ne spaß .. ich danke dir den Rest bekomm ich hin .. sorry das ich dir so umstände bereitet hab ...

Hier habsch auch was für dich .. http://leibniz-ps.bildung-rp.de/Fachbere…f9site/keks.jpg

Werbeanzeige