Messung des "Erfolgs" des Feindes gegen den Spieler


7

Ich habe mit einer Idee für einen Spielprototyp gespielt, bei dem der Spieler sich gegen Wellen von Feinden verteidigen muss, aber zwischen jeder Welle "entwickeln" sich die Feinde, um die vom Spieler verwendeten Taktiken besser zu bekämpfen. Im Wesentlichen verfügt jeder Feindtyp über genetische Informationen, die zur Erzeugung von Gesundheit, Geschwindigkeit, Angriffstyp usw. verwendet werden können. Die "erfolgreicheren" Feindtypen werden zu neuen Untertypen mutiert, während ineffektive Feindtypen auslaufen.

Was ich herauszufinden versuche, ist eine gute Methode, um den "Erfolg" gegen den Spieler zu messen?

EDIT: Obwohl ich nicht wirklich auf die Spielmechanik eingehen möchte, nehmen wir an, dass die Spielwelt so komplex ist, dass Sie nicht herausfinden können, ob ein feindlicher Typ gegen den Spieler wirksam ist, ohne ihn zu testen.

Bisher habe ich mir zwei grundlegende Lösungen überlegt:

  • Verwenden Sie Heuristiken, um festzustellen, ob ein bestimmter Feind dem Spieler Schaden zufügt oder lange überlebt, ohne getötet zu werden.

    Das Problem, das ich bei diesem Ansatz habe, ist, dass er ausgenutzt werden kann, wenn (wann) der Spieler herausfindet, wie der Algorithmus funktioniert. Zum Beispiel könnten Sie die schwächsten Feinde absichtlich ein paar freie Treffer landen lassen, um das Spiel dazu zu bringen, mehr davon zu erschaffen. Es kann jedoch möglich sein, dies mit besseren Heuristiken zu verbessern.

  • Verwenden Sie nur etwa die Hälfte des Pools feindlicher Typen gleichzeitig und tauschen Sie die Typen zufällig zwischen den Wellen ein und aus. Anschließend könnte die Leistung des Spielers während der gesamten Welle analysiert werden, und jeder teilnehmende Feindtyp würde als gleichermaßen erfolgreich / erfolglos angesehen. Nach einer Reihe von Wellen würde der Erfolg feindlicher Typen so unterschiedlich sein, dass eine Mutation / Deletion durchgeführt werden kann.

    Diese Lösung scheint intuitiv schwerer auszunutzen zu sein und würde auch erfolgreiche Kombinationen von Feindtypen aufgreifen, die bei Betrachtung von Personen möglicherweise nicht erkannt werden können. Sie könnte jedoch auch zu Anomalien führen, bei denen nutzlose Feindtypen als erfolgreich angesehen werden, weil sie zufällig auftreten Wellen mit stärkeren Feindtypen zugeordnet, die sie unterstützen.

Zur Verdeutlichung frage ich nicht nach dem tatsächlichen Prozess der Entwicklung von Feinden, sondern nur danach, wie gemessen werden kann, welche Feinde gegen den Spieler erfolgreich sind.


1
Hier ist ein guter Artikel: ai-depot.com/GameAI/Learning.html
Congusbongus

Wenn der Spieler Probleme hat, einen bestimmten Feind zu schlagen, bestraft das Spiel den Spieler, indem er diesen einen Feind zahlreicher macht. Diese Idee ist verschlagen, grausam und frustrierend ... Ich mag es!
Philipp

Vor ein paar Jahren hatte ich eine ähnliche Idee, konzentrierte mich aber in einem RPG-Spiel auf Feinde und ließ jeden Feindtyp unabhängig voneinander entwickeln. Mein Fazit ist, mach dir keine Sorgen, dass Spieler das Spiel betrügen, indem sie schwächeren Monstern bessere Ergebnisse bringen. Wenn der genetische Algorithmus richtig implementiert ist, sind diese Taktiken nur für kurze Zeit nützlich. Und wenn es Sie immer noch sehr beunruhigt, können Sie eine hohe Mutationsrate einführen oder die Evolutionsgeschwindigkeit verringern, um das Problem zu lindern.
Angarg12

Antworten:


1

Ich frage mich, ob Sie die Sache vereinfachen könnten, indem Sie sich darauf konzentrieren, wie der Spieler kämpft:

Wenn Sie über eine Reihe von Waffen verfügen, die effektiv verschiedene Kampfmethoden bieten, können Sie Klassifizierungsvariablen festlegen, die bei Verwendung wiederholt werden. Betrachten Sie es als Elemente und dann als Elementwiderstände für die Kreaturen.

Als Beispiel:

Sie haben eine Reihe von Waffen und wenn der Spieler eine Waffe benutzt, wird die Variable für diese Waffe wiederholt.

Immer wenn das Spiel eine neue Welle erzeugt, sucht es nach den Top- X- Variablen und sendet Kreaturen mit Attributen, die sie gegen die Lieblingswaffen des Spielers gut machen.

-Der Spieler verwendet häufig Flammenwaffen. Wenn das Spiel die nächste Welle erzeugt, sendet er einen Schwarm von Kreaturen mit flammgeschützter Haut .-


Das würde in einer diskreteren Spielwelt funktionieren, in der es einfach ist festzustellen, dass Waffe X gut gegen Feind Y ist, ohne sie tatsächlich im Spiel zu testen. Ich hatte auf etwas gehofft, das in einer komplexeren Umgebung funktionieren würde, ohne Dinge wie Widerstände und Arten von Elementarschäden zu verwenden.
Lewis Wakeford

1

Ich würde den Erfolg eines Feindes gegen den Spieler an einem Verhältnis von Kosten zu Schaden messen.

Sie haben einige Kosten für die "Herstellung" der feindlichen Einheit (z. B. Geld, Zeit, andere Ressourcen). Ihre Einheit fügt dem Spieler Schaden in Form von Ressourcen zu (z. B. muss er Medikit zum Heilen verwenden, tötet einige seiner Einheiten [Kosten für das Ersetzen], ..). Die gleiche Berechnung kann beispielsweise für zerstörte Erntemaschinen durchgeführt werden, da der Spieler für einen bestimmten Zeitraum weniger Ressourcen irgendeiner Art erhält.

Verfolgen Sie also, welche Kosten Sie für die Herstellung des Geräts hatten und um schließlich den Schaden (= Zeit) zu verursachen, und verfolgen Sie, welche Art von Schaden Sie angerichtet haben und welche 1: 1-Ersatzkosten anfallen. Dann können Sie die Effizienz für jede Ressource berechnen:

efficiency(resource) = damage_costs(resource) / own_costs(resource) 

Die Wiederbeschaffungskosten können mit der Zeit variieren, da Ihr Spieler möglicherweise einige Gebäude verbessert und Einheiten schneller für weniger Geld produzieren kann. Daher sollten Sie die Effizienz während des Spiels regelmäßig anhand der aktuellen Kurse neu berechnen.

Das Besiegen des Spielers bedeutet, einige oder alle Ressourcen des Spielers auf Null zu bringen. Was letztendlich bedeutet, dass er einige oder keine neuen Einheiten produzieren kann.

Selbst ein Mähdrescher, der in der Nähe des Spielers arbeitet, kann ihm Schaden zufügen, da er seine Ressourcen erntet, die dem Spieler am Ende nicht mehr zur Verfügung stehen. Der Spieler muss also zB mehr Zeit investieren, um solche Ressourcen zu erhalten.


PS: Diese Berechnung kann auch für eine Reihe verschiedener Einheiten durchgeführt werden, die den Spieler angreifen. Es ist möglich, dass eine Kombination von Einheiten zusammen effektiver ist als mehrere der besten Einheiten zum gleichen "Preis".
SDwarfs

0

Dies ist ein gutes Konzept, das nicht in genügend Spielen enthalten ist. Der beste Weg, dies umzusetzen, wäre, beide Strategien zu verwenden. In Bezug auf Ihre erste Strategie würde ich mir keine Sorgen machen, dass ein Spieler sie ausnutzt, denn wenn er sich von einem Feind beschädigen lässt, erleidet er trotzdem Schaden, sodass er diesen Exploit nicht für immer ausführen kann. Ich denke immer noch, dass Ihre zweite Strategie in Bezug auf mehrere Feinde in Verbindung wichtig ist. Ich werde das folgende Beispiel geben. Wenn Sie einen großen "Panzer" -Feind mit niedrigem Schaden pro Sekunde und einen Scharfschützenfeind haben, der sich mit hohem Schaden pro Sekunde versteckt, könnten die beiden ein großes Problem sein, wenn sie getrennt schwach sind.

Vorgeschlagene Verbesserungen für Strat 1 Möglichkeiten, dies zu verbessern, könnten darin bestehen, die verschiedenen Heuristiken, die der Schaden eines Feindes verursacht, höher einzustufen als die Lebensdauer des Feindes.

Weitere heuristische Ideen für Sie, wenn Sie eine Art Schützen der ersten Person, der dritten Person oder von oben nach unten annehmen. Andere Heuristiken könnten Munitionsfeuer auf den Feind sein (schwer zu verfolgen). Benutzerbewegung während des Kampfes gegen einen Feind (messen Sie, ob er härter arbeitet / mehr gegen diesen feindlichen Typ ausweicht).

Vorgeschlagene Verbesserungen für Strat 2 Ich würde vorschlagen, einen Feind pro Level auszutauschen (Evolutionszyklus) und ihn in Reserve zu halten, diese Welle zu messen und festzustellen, ob es ohne diesen Feind besser oder schlechter geht. In der nächsten Runde andere Feindtypen ausschalten und erneut messen.


Eine weitere zu berücksichtigende Heuristik ist, wie schnell der Benutzer Schaden verursacht und welche Feinde / Elemente dies verlangsamen.
OrwellHindenberg

0

Bevor ich versuchen würde, das Problem zu lösen, würde ich zuerst ein Schein-Setup (mit zufälligen Feinden) erstellen und die Daten (Gesundheit des Feindes im Laufe der Zeit, andere Statistiken usw.) protokollieren. Dann würde ich sehen, ob es ein passendes Muster gibt Mit Feinden wird der Spieler als "hart" empfunden und versucht dies zu wiederholen.

Ich würde mir vorstellen, dass ein erfolgreicher Feind einer ist, auf den der Spieler mehr reagieren würde. Wie in einer, von der der Spieler versucht, sich fernzuhalten, zu einem schnellen Kill zu eilen, um sie aus dem Weg zu räumen, konzentriert sich das Feuer auf eine, die die meiste Reaktion des Spielers hervorruft. Vielleicht ist das aber zu schwer umzusetzen.

Ich hoffe das hilft etwas!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.