Hauptmenü öffnen

AntamarWiki β

Random

Version vom 6. September 2020, 17:49 Uhr von Lowlander (Diskussion | Beiträge) (case mit factor= dokumentiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Mit <random> wird eine Zufallsauswahl definiert.

Alle möglichen Varianten werden in eine <random>...</random>-Folge eingeschlossen und von je einem <case>...</case>-Paar umschlossen.

Um für ein Ereignis/Zweig die Wahrscheinlichkeit anzugeben siehe Switch.


Sollen zufällig die Worte 'Wurst' oder 'Käse' ausgewählt werden, dann schreibt man das so:

<random>
  <case>Wurst</case>
  <case>Käse</case>
</random>

Statt einfacher Worte zwischen den case-Tags können auch XHTML-Tags und weitere der hier aufgezählten XML-Tags für ZB-Aktionen dort eingefügt werden.

Mit dem Attribut 'count' kann angegeben werden, wieviele der case-Knoten ausgewählt werden sollen:

Der Händler bietet an seinem Stand
<random count="2">
  <case>Kräuter, </case>
  <case>Eier, </case>
  <case>Wurst, </case>
  <case>Käse, </case>
</random> Brot und viele Obst- und Gemüsesorten der Umgebung an.

Würde so etwas erzeugen:

Der Händler bietet an seinem Stand Kräuter, Käse, Brot und viele Obst- und Gemüsesorten der Umgebung an.

Bei 'case' kann optional ein Faktor angegeben werden, mit dem der Fall gewichtet wird, praktisch wird dieser also mehrfach berücksichtigt, als hätte man ihn wiederholt ausgeschrieben:

<random count="2">
  <case>kommt 1mal in die Liste</case>
  <case factor="3">kommt 3mal in die Liste</case>
  <case factor="0">kommt nicht Liste</case>
</random>

In diesem Beispiel wären also 4 Fälle in der Liste, von denen 2 ausgewählt werden.

Der Wert 0 für den Faktor ist sinnvoll, wenn der Wert aus einer Variable kommt. So lässt sich z.B. eine wiederholte Zufallsauswahl programmieren, bei der die bereits ausgewählten Fälle nicht wieder vorkommen dürfen:

Bei der Initialisierung (z.B. in start.xml) alle Fälle zulassen:

  <set name="fall_eins_factor" val="1"/>
  <set name="fall_zwei_factor" val="1"/>
  <set name="fall_drei_factor" val="1"/>

Und dann bei der tatsächlichen Auswahl, den ausgewählten für zu Zukunft deaktivieren:

  <random>
    <case factor="${fall_eins_factor}">
      <set name="auswahl" scope="scene" val="fall_eins"/>
      <set name="fall_eins_factor" val="0"/>
    </case>
    <case factor="${fall_zwei_factor}">
      <set name="auswahl" scope="scene" val="fall_zwei"/>
      <set name="fall_zwei_factor" val="0"/>
    </case>
    <case factor="${fall_drei_factor}">
      <set name="auswahl" scope="scene" val="fall_drei"/>
      <set name="fall_drei_factor" val="0"/>
    </case>
  </random>