• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Zufallsentscheidung: Gewichtung aus Table lesen

In meinem aktuellen Projekt gibt es an einer bestimmten Stelle eine Zufallsentscheidung zwischen zwölf verschiedenen Ereignissen. Die Wahrscheinlichkeiten für das Eintreten jedes dieser Ereignisse stehen aus bestimmten Gründen in einer Table.

Wie kann ich nun den zufälligen Gewinner ermitteln?

Wenn ich das in Urwigo realisiere, kann ich ja bei Zufallsentscheidungen nur fixe Werte für die einzelnen Gewichtungen nehmen. Ich würde die Gewichtungen/Wahrscheinlichkeiten nun aber gerne aus der Table lesen.

Hat jemand eine Ahnung, wie ich das machen kann?
 
OP
W

whiterussian_ch

Geocacher
Ich habe mich gerade an Kroloks letzten Blogeintrag erinnert und mir mal die _cartridge.lua angesehen, nachdem ich mal ein Bsp. zusammengeklickt habe.

Und: mittels einer selbst geschriebenen Lua-Funktion hat es dann auch geklappt.
 
OP
W

whiterussian_ch

Geocacher
Klar, sorry ganz vergessen...

Ich habe aufbauend auf dem Code, welchen Urwigo bei Zufallsentscheidungen generiert, eine Funktion gebaut, welche eine table entgegennimmt, die ein Element (nennt man das so?) namens "wsk" mit den kumulierten Wahrscheinlichkeiten enthält:

Code:
function getWinner(tbl)
    local _rndChoiceValue = math.random()
    --print(_rndChoiceValue)
    if _rndChoiceValue < tbl[1].wsk then
        var_racewinner = 1
    elseif _rndChoiceValue < tbl[2].wsk then
        var_racewinner = 2
    elseif _rndChoiceValue < tbl[3].wsk then
        var_racewinner = 3
    elseif _rndChoiceValue < tbl[4].wsk then
        var_racewinner = 4
    elseif _rndChoiceValue < tbl[5].wsk then
        var_racewinner = 5
    elseif _rndChoiceValue < tbl[6].wsk then
        var_racewinner = 6
    elseif _rndChoiceValue < tbl[7].wsk then
        var_racewinner = 7
    elseif _rndChoiceValue < tbl[8].wsk then
        var_racewinner = 8
    elseif _rndChoiceValue < tbl[9].wsk then
        var_racewinner = 9
    elseif _rndChoiceValue < tbl[10].wsk then
        var_racewinner = 10
    elseif _rndChoiceValue < tbl[11].wsk then
        var_racewinner = 11
    else
        var_racewinner = 12
    end
end

Anschliessend schreibe ich in eine Variable die Nummer des Siegers. Die brauche ich anschliessend, die Table enthält neben den Wahrscheinlichkeiten natürlich noch andere Dinge.
 
Oben