Zufallsgenerator "ohne zurücklegen" erstellen. Drei verschiedene Zahlen

  • Hallo,

    Derzeit arbeite ich an einem Minigame für mein erstes Spiel . Im Minigame soll ein Code geknackt werden. Der Code soll aus drei verschiedenen Zahlen zwischen 1 und 5 bestehen. Soweit so gut. Es ist ein leichtes eine Variabel als Zufallszahl festzulegen. Nun möchte ich aber, dass in dem Code jede Zahl nur einmal vorkommt. Wie beim 'Ziehen ohne zurücklegen' eben. Da keine 'Lücke' im Zufallsbereich machbar ist ('Zufällige Nummer aus 1 bis 5 außer Var1'), wird der Befehl für den Zufallsgenerator wirklich lang ('Ziehe Var1 zufällig von 1-5... wenn es eine 1 ist, dann ist Var2 zufällig zwischen 2-5, wenn Var2 eine zwei ist, ist Var3 zufällig zwischen 3-5, ist Var2 aber eine 3, generiere eine weitere Zufallszahl, wenn die dann eins ist, dann ist Var3=2, ansonsten ist Var3 zufällig zwischen 4 und 5.......') . Geht das auch kürzer und einfacher? Gibt es einen Skript-Befehl, mit dem bestimmte Zahlen ausgeschlossen werden können, oder kann man mit Vektoren arbeiten?

    Vielen Dank schon mal ;)

    Hope

  • Erstell ein Array und check einfach ob die zufallszahl ein element des Arrays ist wenn nicht dann setz sie an letzte stelle des arrays und generier eine neue für die nächste Variable. So kannst du so viele variablen wie du willst generieren. und beim abfragen ob der spieler die richtigen zahlen der richtigen reihenfolge nach eingibt gehst du einfach das array von pos0 bis ende durch :D

  • Klingt gut, aber wie erstelle ich in diesem Programm ein Array? Ich habe doch nur "Variabeln steuern". Und wo kann ich auf einzelne Elemente des Arrays zugreifen? Wenn das über "Skript" geht finde ich einfach keine Tabelle mit möglichen Befehlen.

  • Stellt die erste Zahl auf Random1-5


    Stell die 2. Zahl auch auf 1-5
    Frag im nächsten Schritt die 2 Zahl ab auf "ist nicht gleich" Zahl 1.

    Wenn Nicht gleich ist, wird die 3 Zahl bearbeitet.

    Bei gleichen Zahlen wird erneut eine Zahl random gesetzt.


    Bei nur 3 Zahlen ist diese Methode am eifachsten.

    Musst aber bei der 3 Zahl die 1 und 2 Zahl prüfen.


    -MrSerji


    Schritt 1:


    Setze Var Zahl 1 = Random 1-5


    Schritt 2

    Setze Var Zahl 2 = Random 1-5

    Abfrage: Var Zahl 2 nicht = Var Zahl 1

    Else Setze Var Zahl 2 = Random 1-5


    Schritt 3


    Setze Var Zahl 3 = Random 1-5

    Abfrage: Var Zahl 3 nicht = Var Zahl 1

    Abfrage: Var Zahl 3 nicht = Var Zahl 2


    Else bei beiden: Setze Var Zahl 3 = Random 1-5


    Und das dann natürlich in eine Schleife packen (Oder Label, weiß nicht ob es die ab dem VX noch gibt)

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von MrSerji ()

  • MrSerji, an diese Lösung hatte ich auch schon gedacht, habe mich aber bisher nicht getraut die Schleife zu verwenden, weil sie anders funktioniert, als die for- und while- Schleifen die ich kenne. Tatsächlich funktioniert es damit und glücklicherweise hat diese Änderung auch die anderen Bugs im Spiel behoben. Jetzt kann ich das Minigame fertig stellen. Vielen Dank.

    Nur nochmal für mich zum Verständnis, Die Schleifen im RPF Maker laufen einfach weiter bis man 'Schleife unterbrechen' erreicht?

  • Antula,

    Ja ich verstehe schon, wenn es viele Zahlen werden, wird die Schleife unweigerlich sehr sehr lange Laufen, weil ständig Änderungen kommen. Ans selber Plugins schreiben traue ich mich noch nicht heran, dafür fehlt mir dann doch die Erfahrung, aber vielen Dank für das Angebot.

  • Ich finde ein Plugin wäre dafür ein bisschen overkill und die Methode über Event Commands ist einfach zu fummelig finde ich.


    Benutze einfach ein Scriptcall und ein bisschen JavaScript.



    Im oberen Beispiel wird die Zufallsliste einfach auf der Console (F8) ausgegeben, stattdessen könnten wir sie in einer Game Variable speichern, dann kannst du später noch damit arbeiten.

    JavaScript
    1. // Speichere unsere Zufallszahlenliste in Game Variable mit der ID 1
    2. $gameVariables.setValue(1, result);


    Danach kannst du zum Beispiel in einem Event über eine If-Abfrage testen, ob der Spieler eine der Zahlen richtig hat. Einfach den folgenden Scriptcall einfügen.

    JavaScript
    1. // Würde testen, ob 5 drin ist
    2. $gameVariables.value(1).contains(5)
    3. // Würde testen, ob Wert von einer anderen Variable mit ID 10 drin ist
    4. $gameVariables.value(1).contains($gameVariables.value(10))
  • hope kann dir das selber plugin schreiben nur empfehlen ^^ es gibt recht gute tutorials auf youtube(zumindest war es bei vx ace so). und es reicht wenn man ein paar basics kann um recht viel abwandeln zu können. Ich habe z.B. auch nicht so viel Ahnung von Javascript aber mit dem wissen das ich von anderen programmiersprachen habe kann ich bei den meisten plugins ein paar Änderungen vornehmen auch wenn ich momentan noch nicht so gut bin dass ich ein volles plugin wie die von yanfly schreiben könnte. Aber für solche Sachen wie dein Problem ist es echt vorteilhaft wenn man ein bischen scripten kann.

  • waynee ich meinte ja auch dass man eine function erstellt der du als argument eine zahl gibst die sagt wie viele variablen du nehmen möchtest und in was für einer range deine zufallszahlen liegen sollen. dann kann er so oft er will für verschiedene schwierigkeitsstufen und verschiedene zahlenranges einfach nur den scriptbefehl ausführen. das wäre die faulenvariante wenn man nicht für jeden fall dein script abändern möchte

  • Klasse, Danke für die Tips. Wenn es so weiter geht, schaue ich mir das Plugin Programieren sicher mal an, aber da ich erst bei meinem ersten Projekt bin und noch genuuuug andere Sachen am RPG Maker zu entdecken habe, schien es bisher noch nicht so wichtig.

    Übrigens MrSerji, Label gibt es in MV noch immer.