Ich habe einige Zeit an einem Spiel herumgebastelt und ich habe eine Menge Ärger mit etwas:
Ich habe zwei Charaktere, von denen jeder Attribute (ungefähr zehn) in einem Bereich (zwischen 1 und 20) hat. Ich möchte diese Attribute verwenden, um einen "Wurf" zu generieren, so dass der höhere Wurf diese bestimmte Begegnung gewinnt. Es ist erwähnenswert, dass die beiden Zeichen nicht sind gegenseitig beschädigen / verteidigen. Sie rollen beide, um zu sehen, ob sie das bestehen, was wir wohl als Fähigkeitsüberprüfung bezeichnen könnten. Sie würfeln beide, um gegen einen gemeinsamen Wert zu bestehen oder zu scheitern. Sie interagieren nicht miteinander.
Wenn jedoch eine der Figuren auch nur einen kleinen numerischen Vorteil hat, hat jede Formel, die ich mir ausgedacht habe, dazu geführt, dass die etwas überlegene die meiste Zeit gewonnen hat. Das ist unerwünscht.
Ich habe versucht, das "relevanteste" Attribut für den Test mit 80% und die Summe der anderen Attribute mit 20% zu gewichten. Ich habe auch versucht, Durchschnittswerte zu vergleichen, um einen relativen Unterschied zu erzielen, und diesen zu verwenden, um den schwächeren Charakter zu verstärken. Beide Ansätze führten zu den signifikanten Vorteilen, die ich zu beseitigen versuche (wenn ich die Begegnung beispielsweise 5.000 Mal ausführe, gibt es ziemlich regelmäßig eine Seite, die alle 5.000 gewinnt).
Das Hinzufügen einer "Glück" -Komponente scheint nur von Bedeutung zu sein, wenn sie zugunsten des geringeren Charakters gewichtet ist und ich dort keine gute Balance gefunden habe.
Mit welchen Ansätzen kann ich die Auswirkung eines kleinen numerischen Vorteils abschwächen und dennoch diesen Vorteil beibehalten und vergrößern, wenn die relative Lücke in den Attributen größer wird?
Gemäß der Anfrage sind hier die Einzelheiten, die ich bisher habe. Einige Dinge, die ich noch nicht herausgefunden habe, bleiben also Allgemeingültigkeiten:
Im Moment wird die Rolle als generiert
0.8 * (mainAttribute) + 0.2 (1/3 * subAttA + 1/3 * subAttB * 1/3 subAttC)
Gegenwärtig werden Zahlen in der Größenordnung von 4,0 erzeugt. Attribute werden zufällig zwischen angegebenen Bereichen generiert. Der aktuelle Test verwendet ein Zeichen mit Attributen von 2 bis 4 und den Gegner zwischen 3 und 5. Vorhersehbar ergibt dies Durchschnittswerte nahe 3 bzw. 4.
Mit diesem Ein-Punkt-Vorteil würde ich gerne den stärkeren der beiden Siege im Bereich von 55% bis 60% der Zeit sehen, wobei sich dieser Vorteil auf etwa 80% der Zeit mit einem durchschnittlichen Attributvorteil von erhöht 5 oder 6, 90% bei den Vorteilen 7 oder 8, so dass ein wenig Raum für einen unwahrscheinlichen Sieg bleibt, wenn die Lücke größer wird. Ich würde es vorziehen, niemals garantierte Siege zu haben, aber vielleicht werden die Dinge sehr unwahrscheinlich - je nachdem, ob 99,5% oder 99,6% der Zeit gewonnen werden, in der die Lücke sehr groß wird.
Die aktuelle Formel erzeugt eine nicht zufällige Zahl. Die Zufälligkeit ergibt sich aus der Auswahl der relevanten Attribute. Nicht alles Attribute werden für jede Rolle verwendet. Es ist möglich, dass derjenige mit den insgesamt schwächeren Attributen in den für diesen Wurf relevanten Bereichen stärker ist und einen Gewinn stiehlt. Aber vorhersehbar kommt es selten vor.
Mein nächster Versuch war es, ihre relativen Stärken abzuwägen, indem ich den Durchschnitt aller Werte eines jeden Einzelnen ermittelte, sie gegeneinander aufteilte und diesen Wert verwendete, um dem kleineren Charakter einen kleinen Schub zu verleihen. Dies hat die Situation ein wenig geglättet, hatte aber immer noch eine ausgeprägte Tendenz, aus 5.000 Versuchen 5.000 Siege für einen Mann zu erzielen.
quelle
Antworten:
Das Problem bei Ihrer Herangehensweise ist, dass Sie das Ergebnis des Kampfes in dem Moment bestimmen, in dem Sie sich für den Hauptstatus entscheiden. Wenn Sie 4 Hauptstatistiken haben und der Kämpfer nur in einer von ihnen besser ist, beträgt die Gewinnchance immer 1 zu 4, unabhängig davon, wie groß die Unterschiede tatsächlich sind. Wenn Sie feinkörnigere Ergebnisse erzielen möchten, benötigen Sie feinkörnigere Zufälligkeiten.
Zuallererst denke ich, dass Sie Ihre zufällige Auswahl für das Hauptattribut behalten können, und Sie können auch Ihre Formel behalten, wenn Sie möchten. Es ist die Zahl, die angibt, wie viel Vorsprung dieser Kämpfer in dieser spezifischen Begegnung hat. Für den Rest dieses Beitrags werde ich dies als gerecht bezeichnen
power
.Eine Methode, die ich in vielen Spielen angewandt habe und die mir beim Zweikampf sehr geholfen hat Dingen mit einem bestimmten geht
power
, ist es, eine zufällige Gleitkommazahl zwischen0
undpower
für beide zu würfeln und zu sehen, wer höher würfelt. Hier ist eine Liste der erwarteten Ergebnisse dieser Methode. Die Prozentsätze werden nicht berechnet, sondern experimentell generiert, indem 100000 Kämpfe pro Kombination und Iterationszahl ausgeführt werden und gezählt wird, wer wie oft gewonnen hat:Das Schöne an diesem Algorithmus ist, dass er skaliert, egal wie groß die Zahlen sind, mit denen Sie es zu tun haben. Die Chance von 0,3 gegen 0,7 ist die gleiche wie die von 3 gegen 7, 300 gegen 700 oder 3.000.000.000 gegen 7.000.000.000.
Wenn dies für Ihren Geschmack immer noch zu unvorhersehbar ist, können Sie den Kampf vorhersehbarer machen, indem Sie für jeden Kämpfer mehrere Zufallszahlen würfeln und diese addieren. Aufgrund des Gesetzes über große Zahlen gleichen sich viele zufällige Ereignisse aus und führen zu besser vorhersehbaren Ergebnissen. Hier ist eine Tabelle mit unterschiedlicher Anzahl von Iterationen.
Die Ergebnisse von 100% und 0% in der obigen Tabelle sind eine Illusion aufgrund von Rundungsdifferenzen. Sofern der
power
eines Kämpfers nicht genau 0 ist, besteht immer die Möglichkeit, dass er gewinnt. Im obigen Test ist es einfach nicht vorgekommen, daher können Sie damit rechnen, dass es unter 1: 100000 liegt.Möglicherweise stellen Sie auch leichte Unregelmäßigkeiten fest, die auf Stimmungsschwankungen von java.lang.Random zurückzuführen sind und möglicherweise nicht angezeigt werden, wenn Sie den Code erneut mit einem anderen Startwert ausführen.
Das Programm, mit dem ich diese Tabelle erstellt habe (Java).
Wenn Sie diesen Code in Ihrem Spiel verwenden möchten, ist er unter der von Sam Hocevar veröffentlichten WTF Public License Version 2 lizenziert .
quelle
1 - powerA / ( 2 * powerB )
.powerA < powerB
. Sobald powerA größer ist, müssen Sie zu wechselnpowerB / (2 * powerA)
.Dein Fehler ist ein "würfelbasierter" Ansatz. Sie haben einen Computer, auf dem Sie ein beliebiges System verwenden können. Stellen Sie eine Tabelle auf, die einen Unterschied in den Werten in eine Gewinnchance für das prozentuale Alter umwandelt, und setzen Sie die Werte dann auf absolut alles, was Sie möchten, z
(Sie brauchen nur die Hälfte der Tabelle zu tun, wählen Sie einfach immer A als diejenige mit der höheren Statistik)
Offensichtlich sind diese Zahlen nur ein Beispiel. Sie können festlegen, welche Verteilung Ihnen gefällt.
quelle
Dies ist eine ziemlich tiefe Frage, ehrlich gesagt, vom Standpunkt der Spielmechanik. Aber es gibt ein paar Dinge, die helfen könnten.
Aus diesem Grund haben die meisten Spiele eine separate Komponente für Treffer und Schaden, in der ein "Wurf" ausgeführt wird, um festzustellen, ob Sie einen Treffer erzielen, und dann ein "Wurf" gegen eine Schadenstabelle oder -reichweite für den angegebenen Charakter. Dies führt auch zu einigen genreübergreifenden Standardarchetypen, bei denen Sie möglicherweise kleinere, schnellere Charaktere mit weniger Trefferpunkten, aber mehr Schaden verursachen (Glaskanonenmagier, bestimmte Arten von Schurken) und größere, gepanzerte Charaktere, die weniger Schaden verursachen (Panzer, Krieger) ).
Dies führt zu einem natürlichen Gleichgewicht, in dem der kleinere Charakter möglicherweise zerbrechlich ist, jedoch nicht so oft getroffen wird, weil er agil ist. Außerdem wird das Spielfeld dadurch ausgeglichen, dass mehr Schaden verursacht wird (ein Zauberspruch oder ein Gifteffekt, der Schaden verursacht) Zeit). Der Panzer ist möglicherweise langsamer und wird häufiger getroffen, verfügt jedoch häufig über eine große Menge an Lebenspunkten oder Trefferpunkten, verursacht jedoch tendenziell weniger Schaden pro Treffer (oder Schaden pro Sekunde).
Der Hintergrund für diese ist, warum viele Spiele fortwährend das Ausbalancieren von Waffen und Klassen und Statistiken durchlaufen. World oder Warcraft, Destiny, Diablo, Battlefield: Jede Art von Spiel in jedem Genre durchläuft im Laufe der Zeit oft das Balancieren und Optimieren.
Dies ist möglicherweise keine direkte Antwort, aber Sie haben nach allgemeinen Ideen gefragt. Bewerten wir also auch das Spielsystem.
Wie funktionieren diese Attribute? Wenn alles andere gleich ist (kein Archetyp, keine Rüstung oder bessere Waffen oder was auch immer), dann ist es absolut wahrscheinlich, dass ein geringer Gewinn die Dinge schwer zugunsten einer Seite wirft. Das Hinzufügen von Facetten im Kampf erschwert jedes System, ermöglicht aber auch mehr Flexibilität.
quelle
Es gibt zwei große Dinge.
Denken Sie zunächst daran, dass Sie sich an einem Computer befinden. Sie können jedes gewünschte System erstellen. Sie müssen sich nicht auf einen W20-Wurf beschränken, obwohl dies für Spieler leicht zu verstehen ist. Dinge wie das Würfeln von 6 Würfeln mit 6 Würfeln sind für einen Computer sehr einfach und führen zu weitaus weniger zufälligen Ergebnissen.
Zweitens ist es bei der Betrachtung anderer Systeme wie D & D offensichtlich, dass sie die Wirkung von Attributen nur stark drosseln. Anstatt Ihre Basisstatistik zu veranlassen, der Regel 80% ihres Wertes hinzuzufügen, verkleinern Sie sie und machen Sie die Addition subtiler. In D & D zum Beispiel, wenn Sie 18 Geschicklichkeit haben, erhalten Sie nur 4 als Bonus für Ihre Rüstungsklasse.
Kurz gesagt: Alles, was Sie tun müssen, ist, Ihre Domain zu verkleinern, um sie besser auf Ihre Reichweite abzustimmen. Aber qualitativ würde ich denken, ein Blick auf andere Systeme und Dinge, die weniger mathematisch erscheinen, würden zu einem zufriedenstellenderen System für den Spieler führen.
quelle
Wie wäre es damit: Fügen Sie allen betroffenen Attributen eine Konstante hinzu, z. B. 1000. Dann wird die relative Differenz sehr klein.
quelle
Kenne deine Zahlen
Ein wenig zu Philipps Antwort hinzugefügt, nämlich dass rand [x] im Vergleich zu rand [y] nicht immer das produziert, was man erwartet. Unterhalb einer Tabelle, in der wir A mit B vergleichen. Sowohl A als auch B haben die Werte 1 ... 10. Wir vergleichen auf zwei Arten (Anmerkung: rand () erzeugt in diesem Fall ganze Zahlen, dh Rolls):
Zusätzlich vergleichen wir
(in diesem Fall ist es unerheblich, ob es> oder ≥ ist, da sie so nahe sind). Diese großen Zahlen stehen in Klammern.
Zellen halten%. Jedes Ergebnis enthält 1 Million Iterationen (mit Dyalog APL erstellt ).
Bei A = 2 und B = 3 (und 1 Million Tests):
Überraschungen könnten sein, dass:
Tatsächlich könnte ich dieses Q anders lösen, indem ich einfach eine 10x10-Tabelle mit schönen, gewünschten Prozentsätzen von Hand eingebe (vielleicht will man auch Unregelmäßigkeiten?). Interpolieren Sie dann, falls erforderlich, zwischen zwei Werten, um einen genauen Prozentsatz zu erhalten, sagen Sie, dass dies aus irgendeinem Grund 53 ist. Dann ist es einfach, einen Treffer mit einer 53% -Probierbarkeit, eine 0 oder 1, zu generieren, indem Sie einfach einen Rand (100) ausführen und testen wenn es kleiner oder gleich 53 ist :-).
Das ist in etwa so, wie Jack Aidley es erwähnt.
quelle
0.0
und erzeugt1.0
. In diesem Fall ist der Unterschied zwischen>
und>=
vernachlässigbar. Vielleicht möchten Sie darauf hinweisen.Der traditionelle Ansatz, auf den sich mehrere Antworten implizit bezogen haben, auf den jedoch niemand hingewiesen hat, besteht darin, dass für die Aufgabe ein fester Würfelwurf erforderlich ist und ein von Ihren Statistiken abgeleiteter Fähigkeitsmodifikator hinzugefügt wird.
Zum Beispiel, wenn zwei Spieler das Verfahren befolgen:
und wiederhole, bis eine Seite die andere schlägt, dann bekommst du Zahlen in deiner Reichweite: Hier sind die Gewinnchancen mit einem bestimmten numerischen Vorteil für ihren Modifikator:
quelle
Die Charaktere fordern sich nicht gegenseitig um die Vorherrschaft heraus. Sie fordern eine Anforderung heraus. Was ist, wenn beide die Anforderung erfüllen? Wer gewinnt? Ich bin überrascht, dass Sie die Logik nicht genug in Frage gestellt haben, dass Sie sogar damit gerechnet haben.
Hier sind zwei Dinge, die dir vielleicht etwas Gutes tun.
Gewinnen Sie einen Zufallsfall mit Vorteil:
WENN der Pass-Bar / Skill-Check ein Wurf von 10 ist. A Würfel 40. B Würfel 42. WENN nur einer gewinnen muss. Ausgehend von einem Gewinn von A 50% / B 50%. Sie können% hinzufügen, um die Chance basierend auf der Menge des Vorteils zu gewinnen. Rolle B hat einen Vorteil von (42-40) / 40 = 5% in Bezug auf die Rolle. Durch direktes Hinzufügen erhält B eine Gewinnchance von 55%. Oder Sie können eine benutzerdefinierte Gewinnchance pro Prozent Vorteil bestimmen. Nehmen wir an, Sie addieren für jeden 100% igen Vorteil 10% Gewinnchance. Also, wenn A 10 würfelt und B 20 würfelt, dann gewinnt A 40% und B 60% der Fälle.
Faires Zufallskonzept:
Wenn Sie eine Standard-Gewinnchance von 30% haben, können Sie am Ende 38 von 100 Schecks gewinnen.
Einige Leute wollen einen zusätzlichen Schritt in der Fairness und stellen sicher, dass eine 30% ige Chance immer genau 30 von 100 Begegnungen gewinnt und genügen mit der Zufälligkeit, nicht zu wissen, welche Begegnungen in der Sequenz ein Gewinn und welche ein Verlust sind.
Dies ist besonders nützlich für gut kalkulierte Spielökonomien. Weil eine zufällige 70% ige Gewinnchance besteht. Sprich 70% Chance für einen Mob, 5 Gold zu verlieren. Die Mobs könnten das Gold 81-mal von 100 fallen lassen. Das führt dazu, dass die Einnahmen / Ausgaben aus dem Gleichgewicht geraten. Und je nachdem, wie viele Einheiten / Instanzen solche Rollen verwenden, kommt es zwangsläufig zu Inflation und / oder Engpässen. Natürlich haben viele Leute nicht einmal eine grobe Schätzung der vollständigen Ausgaben- / Kosteneinsparungen ihrer Wirtschaft. Viele Leute reichen aus, um "die meisten" Wirtschaftspunkte zu erzielen. Und lassen Sie einige Generierungsvariablen, die nicht berechnet werden, und stapeln Sie Diskrepanzen über die Zeit hinaus, selbst bei fairer Zufälligkeit.
Inflation und Engpässe sind für sich genommen kein Problem. Sie können nicht faire Zufälligkeiten und sogar unvorhergesehene Variablen verwalten, wenn Ihre Wirtschaft so eingerichtet ist, dass sie angemessen auf Inflation und Engpässe reagiert.
Warum sollte man sich damit als Gesetz der großen Zahlen beschäftigen? kümmern, die Dinge auf lange Sicht ausgleicht?
Nicht jede Umgebung kann ihr Designverhalten beibehalten, während sie sich darauf verlässt, dass die Dinge später ausgeglichen werden ...
quelle