Zufälliger Kampf aus Gegnerpool

  • Hi @all,


    aktuell versuche ich eine Art Kampfturnier in meinem Projekt unterzubringen, dieses soll - je nach Turnier - zwischen 3-5 Kämpfe enthalten.

    Ich weiß, dass ich über Variablen aus dem jeweiligen Pool zufällig ein Gegnerteam auswählen kann, soweit passt das auch.

    Meine Frage ist jetzt, wie stelle ich sicher, dass das selbe Gegnerteam nicht noch einmal in dem Turnier vorkommt?

    Hat da irgendjemand eine Idee? :)

  • Hallo,


    ich habe dir eben mal was erstellt das dein Problem lösen kann.


    5596b4f96d.png


    Hier wird eine Zufallsvariable gestartet (Wichtig ganz Oben das Label) die das Team auswählt. Wird Team 1 gewählt Wird gefragt ob es schonmal gewählt wurde mit der Abfrage des Schalters. Ist dieser noch aus, wird Team 1 gewählt und der Schalter geht an.


    Wird das nächste mal wieder die 1 gewählt, dann ist der Schalter schon an und man wird wieder zum Label "Start" geleitet was und ganz nach oben bringt und die Abfrage der Variable neu startet bis etwas kommt das noch nicht gewählt wurde.

    Die Gegner teams haben in dem beispiel auch die Position 1-5 in der Datenbank weshalb ich sie direkt über Variable aufrufe.


    Also mit dem Beispiel brauchst du 1 Variable und ! Schalter pro Team (in diesem Fall 5)


    So hätte ich das gelöst.


    Hoffe es ist verständlich

    Wenn du mich unterstützen willst, kaufe mir gern einen

    kofi2.png

  • Cosmo Danke dir für die zügige Antwort.

    Ich werde das heute gleich mal versuchen einzubauen, sieht sehr vielversprechend aus :)


    Merci und ein schönes Wochenende

  • Eine Idee wäre, die schon aufgetretenen Gegnerteams aus dem Pool für das aktuelle Turnier rauszunehmen, allerdings weiß ich nicht, wie du das ganze aufgebaut hast, von daher kann ich dir nicht sagen, ob sich das so ohne weiteres umsetzen ließe.

    Meine zweite Idee wäre, die bisherigen Nummern in weiteren Variablen abzuspeichern und diese dann in einem Loop solange mit der random-variable (gehe zumindest davon aus, dass du das über eine Variable steuerst, die auf einen zufälligen Wert gesetzt wird) abzugleichen, bis die random-variable einen unterschiedlichen Wert hat, und dann das entsprechende Team aufzurufen, also so ähnlich wie Cosmo das vorgeschlagen hat; allerdings kann das mitunter schon etwas Rechenzeit verschlingen.

    5596b4f96d.png

    Eventuell könnte man auch anstatt der festen Zahlen, mit denen Gegnerwahl verglichen wird, dort Variablen benutzen, die (in deinem Fall) auf Werte von 1 bis 5 gesetzt sind, die dann alle um 1 verringert werden, wenn sie größer als der Wert der Zufallsvariable sind, und die Zufallsvariable einen Wert zwischen dem kleinsten und dem größten Wert dieser 5 Variablen (also z.B. Gegner1 und Gegner5) erzeugt, allerdings weiß ich nicht, ob die Zufallsvariable auch andere Variablen als Parameter für die Wertegrenzen nehmen können. Würde denke ich etwas Rechenzeit sparen; die Schalter wären aber trotzdem noch vonnöten. Hoffe, das hilft dir ein wenig weiter.

  • Ich habe noch ein paar Ergänzungen hinzugefügt, da ja in dem Beispiel nach vier Kämpfen Schluss sein soll.

    Versucht habe ich es noch nicht, da ich noch nicht alle Teams (20) eingefügt habe. Sollte jedenfalls klappen, theoretisch ;)

  • Naja ich hätte es als Common Event gemacht und immer nur aufgerufen wenn ich es gebraucht hätte. Du willst 4 Runden machen? Also für jede Runde einmal aufrufen das Event der Wahl. So musste nicht rum werkeln im Event das es nur 4 Runden haben soll sondern rufst es nach Bedarf auf

    Wenn du mich unterstützen willst, kaufe mir gern einen

    kofi2.png

  • Als Ergänzung noch: Vielleicht sparst du dir ein paar Zeilen, wenn du für den Sieg auch ein Label machst, wo dann eben die Kampfvariable +1 und das Siegesitem erhalten wird. Dann brauchst du das nicht jedes Mal bei den 20 Teams neu schreiben. Außer es gibt bei den Teams verschiedene Sachen zu gewinnen, dann bräuchtest du ein Label pro verschiedener Siegbelohnung.

  • Hier vielleicht Code, der dir helfen könnte. Einfach Code Snippets ausführen.


    Code
    1. // Liste von Gegner Ids
    2. window.turnierGegnerids = [2,3,4,7,8,9,12,22];

    Der obere Code speichert eine Liste von Gegner Turnier Ids (einfach Komma seperiert rein)


    Folgende funktioniert nimmt eine der Ids aus der Liste raus uns speichert diese in die Maker Variable 10 (Zahl beliebig austauschbar)

    Code
    1. // dieser Code nimmt eine Id aus der Liste und speichert sie in Variable 10 und löscht diese aus der Liste
    2. var choosenIdIndex = Math.floor(Math.random() * window.turnierGegnerids.length);
    3. var gegnerId = window.turnierGegnerids.splice(choosenIdIndex, 1)[0];
    4. $gameVariables.setValue(10, gegnerId); // 10 ist die Variable in der die GegnerId gespeichert wird

    Wenn keine Gegner mehr da sind sollte man im Maker abfragen können, ob die Variable 10 den Wert 0 hat. Dann war kein gegner mehr da :)

    Hoffe das hilft. So muss man nicht mit riesigen Abfragen im Maker arbeiten :)


    Sieht eingebaut so aus:




    Wenn du Fragen hast, schreibe gerne

    gamedev1.jpgBeginner Tutorials
    i_RMMV  
    Advanced Tutorials

         Plugin Tutorials


    Ostern_GameDev.pngCOstern_GameDev.pngGilles.png

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Gamedev-Tutorials ()

  • Ich habe mir schon gedacht, dass es auch eine Script Variante geben müsste. Ich würde diese Methode ebenfalls versuchen, habe ja mehrere Turniere vor und dann mal sehen, was besser passt. ☺️


    Vielen Dank dafür