Ich finde diesen Ansatz am Besten:
Delphi-Quellcode:
x:=Random(2000);
if x < 20 then Level:=5 else //0..19, kommt sicher recht selten vor
if x < 100 then Level:=4 else //20..99, kann schon etwas öfter passieren
if x < 300 then Level:=3 else //100..299, noch öfter
if x < 800 then Level:=2 else //300..799, schon relativ großer Bereich
Level:=1; //800 .. 1999, größter Bereich, hier wirds wohl die meisten Treffer geben
Wobei ich ihn etwas ändern würde:
Du nimmst ein Array und schreibst da die Bereiche rein, für eine Gleichverteilung also
[1,2,3,4,5]. Dann kannst du daüber eine Schleife laufen lassen und schauen, ob ein Zufallswert aus (1,6) über dem betrachtetetn Wert liegt. Sobald das der Fall ist kannst du abbrechen.
Wenn du einmal wirklich viele Bereiche hast, könntest du noch ein Art Binäre Suche machen. Also erstmal schauen, ob das Element in der Mitte über dem Zufallswert liegt und dann nur noch die entsprechende Hälfte der Gesamtliste anschauen, dass du dann on O(log n) das Ganze machen kannst. (wobei das für 5 Element noch nicht so notwendig ist...)
Erwarte das Beste und bereite dich auf das Schlimmste vor.