KI in einem 1: 1-Kampf ähnlich wie Pokemon entwerfen

7

Ich entwerfe ein Spiel, bei dem das Kampfsystem Pokemon ähnelt. Das heißt, ein 1: 1-Kampf mit nur wenigen (4-6) Zügen zur Auswahl. Während das Spiel Gestalt annimmt, beginne ich über einige der schwierigeren Codierungsbereiche wie die feindliche KI nachzudenken und habe einige Fragen. Ich habe bereits über einige Möglichkeiten zum Entwerfen der KI nachgedacht und wollte auch Ihr Feedback hören.

Ich denke darüber nach, eine universelle KI für mein Spiel zu versuchen, bei der alle Monster dieselbe Logik verwenden, um zu bestimmen, welchen Zug sie verwenden werden. Es basiert auf Gleichungen / Werten, die jeder Bewegung zugewiesen sind, und bestimmt, welche am besten zu machen ist. Wenn der Gegner beispielsweise dem Zug der Monster Widerstand leistet (1/2 Schaden), erhält er einen niedrigeren effektiven Wert als die anderen und Bewegungen, die aufgrund der Verwundbarkeit zusätzlichen Schaden verursachen, erhalten einen höheren effektiven Wert. Außerdem habe ich darüber nachgedacht, eine Variable hinzuzufügen, die den Wert verringert, wenn die Verschiebung wiederholt verwendet wurde, um zu vermeiden, dass der Computer immer dieselbe Verschiebung verwendet. Ich bin der Meinung, dass dies derzeit nur darauf beschränkt ist, den Computer dazu zu bringen, den Zug mit dem höchsten Schaden auszuführen. Irgendwelche Vorschläge?

SO für meine Fragen.

  1. Wie wirkt sich das Entwerfen einer KI-Logik für jedes Monster / Pokémon im Vergleich zu einem allgemeinen Regelwerk für alle auf die Größe meines Spiels in Bezug auf Code und Effektivität der KI aus?

  2. Gibt es Ressourcen, die das Entwerfen von KI auf diese Weise diskutieren? Ich habe in Pokemon-Spielen sehr wenig über die KI gefunden und bin mir nicht sicher, welche anderen Spiele in der Mechanik ähnlich sein könnten.

Vielen Dank für Ihre Zeit!

Willmer
quelle

Antworten:

12

Verallgemeinerte KI mit modularen Komponenten führt wahrscheinlich zu kleinerem Code und ist für eine größere Anzahl von Zeichen einfacher zu erweitern. Hier einige beispielhafte Überlegungen, vorausgesetzt, Sie erstellen ein generisches Gewichtungssystem für alle Zeichen.

-Sie können jedem Charakter eine 'Persönlichkeit' oder 'Haltung' aus einer festgelegten Liste zuweisen (z. B. 'Aggressiv', 'Defensiv', 'Zufällig'). Lassen Sie dann Ihre Gewichtungsformel dies berücksichtigen. So würde beispielsweise ein aggressiver Charakter schädlichen Bewegungen mehr Gewicht beimessen, während ein defensiver Charakter der Selbstheilung mehr Gewicht beimessen würde. Dann müssen Sie nur jedem Charakter die Persönlichkeit zuweisen, anstatt für jeden Charakter ein eigenes Skript zu schreiben.

- Anstatt immer die beste Option zu wählen, kann Ihre KI jede Option gewichten und sich dann zufällig zwischen ihnen entscheiden. Wenn also bei 4 Zügen die berechneten Werte in diesem Zug 60, 35, 25 und 20 betragen, ergibt dies 140. Wählen Sie eine Zufallszahl im Bereich von 1 bis 140 und prüfen Sie anhand der Gewichte, welche move wird verwendet. Dadurch verwendet die KI normalerweise den besten Zug, überrascht Sie jedoch häufig mit einer alternativen Wahl.

- Sie können jedem KI-Charakter eine numerische "Fähigkeits" -Bewertung geben, mit der die Chancen skaliert werden, dass er den besten Zug auswählt.

- Denken Sie daran, dass Pokemon eine Menge Moves hat, die nicht direkt Schaden anrichten, sondern stattdessen Statuseffekte, Buffs oder Debuffs anwenden. Sie können jedem Charakter eine numerische Präferenz für schädliche und nicht schädliche Bewegungen geben. Sie können ihnen auch eine festgelegte Anzahl oder einen möglichen Bereich nicht schädlicher Bewegungen geben, die sie verwenden, bevor sie direkt angreifen. Aktuelle Selbst- und Gegner-HP-Werte könnten auch ein Faktor in der Formel sein, um Angriffe im Vergleich zu strategischen Bewegungen zu gewichten. Wenn Sie beide bei voller Gesundheit sind, haben Sie Zeit zum Einrichten, aber wenn es nur um ein Stück HP geht Es ist Zeit für einen Angriff (hoffentlich einen, der zuerst trifft!).

-Auch hat Pokemon Angriffe mit Sekundäreffekten. Überlegen Sie, wie Sie einen Angriff gewichten möchten, der mehr Schaden verursacht als ein schwächerer Angriff mit einer Chance zu betäuben, oder der immer an erster Stelle steht.

DGH
quelle
Vielen Dank für diese Vorschläge. Ich denke, das wäre eine großartige Idee, ein paar verschiedene Stile (aggressiv, defensiv) zu entwickeln, um Abwechslung zu schaffen und dann verschiedenen Dingen wie Statuseffekten oder schädlichen Bewegungen Gewicht zu verleihen.
Willmer
5

Ihre größten Bedenken sind also die Code- und KI-Effektivität. Da Ihre Frage 44 Aufrufe und keine Vorschläge enthält, dachte ich, dass Ihnen Ideen eines einfachen Spielers nichts ausmachen würden - insbesondere eines, der Pokemon-Spiele gespielt hat. Ich habe keinen KI-Hintergrund und nur einen kleinen Programmierhintergrund, aber ich denke:

Wenn Sie eine eindeutige KI pro Poke (Pokemon) haben, kann Ihr Code sehr groß sein. Daher benötigen Sie Poke-Klassen und AI (ein Strategiesatz) pro Klasse. Das Problem ist, dass Sie für Klassen = n "Die Summe von i = n bis i = 0 von i" Strategiesätze (SS) erstellen müssen.

Example: 
Classes A, B, C have match-ups AA, AB, AC, BB, BC, CC. n=3 SS=6=3+2+1
Classes ABCD; match-ups AA AB AC AD BB BC BD CC CD DD. n=4 SS=10=4+3+2+1

Wenn Sie Ihre Klassen auf typische Weise gestalten, gibt es für alles einen Stein-Papier-Scheren-Weg. Wie Feuer schlägt Wasser schlägt Erde trägt Feuer (dreht sich um). Somit kann jeder Poke eine Kennung für die Poke-Klasse haben. Sie haben auch maximal 5 Züge gesagt.

Example:
Pikachu's "growl" has the same effect as Raticates "squeal" to "Lower defense"

Ihr Poke-Objekt würde Folgendes enthalten

  1. Es ist Klasse (A, B, C usw.)
  2. Klasse Anzahl der geordneten Listen, die priorisieren, welche Bewegung gegen andere Klassen verwendet werden soll

    Beispiel: Pikachu: Klasse A. StrategySet A; 12345, B; 34512 C; 51234 Chrmndr: Klasse B. StrategySet A; 21543, B; 12345 C; 34512 Squirtl: Klasse C. StrategySet A; 43215, B; 21543 C; 12345

Wenn sie kämpfen (sagen wir Pikachu gegen Charmander), wenn die CPU Pikachu ist, übergibt das Charmander-Objekt Klasse B an Pikachu, und die CPU-Pikachu wählt Strategiesatz B; 34512 aus, der die vorrangige Methode ist, um einen Gegner der Klasse B zu bekämpfen . Diese fünf Züge fallen in allgemeine Kategorien (Angriff, Verteidigung, Selbstbeschleunigung, Feindgeschwindigkeit, Feindangriff) oder was Sie haben, und daher weiß der Computer, was zuerst zu verwenden ist. Die Verwendung anderer Elemente in der Liste kann bis zu Parametern wie der Gesundheitshäufigkeit des Gegners oder sogar etwas Verrücktem wie der Simulation von Prioritätswerten, die ein Maximum überschreiten, entsprechen.

VISQL
quelle
0

Ich habe einige Arbeiten am Pixelmon-Kampfcode durchgeführt, wie bereits erwähnt, bei gewichteten Optionen für die Züge, aber es gibt auch Status, über die man sich Sorgen machen muss. Dann wird das Geschwindigkeitsattribut + Buffs / Debuffs / Items verwendet, um den Zug zu bestimmen Bestellen Sie für diese Runde und berechnen Sie die nächste Runde neu.

Aber denken Sie daran, dass es nur begrenzte Züge und Gegenstände gibt, die jeder in einem Spiel im Pokemon-Stil verwenden kann, da alle zu Beginn des Kampfes festgelegt sind.

Da ist ein
quelle