Ich möchte ein einfaches Spiel erstellen, das den Büchern zur Auswahl Ihrer eigenen Abenteuer ähnelt. Der Spieler erhält einen narrativen Text und kann seine Aktion aus einer Liste von Möglichkeiten auswählen. Dies führt wiederum zu einem neuen narrativen Text, ad infinitum. Der einzige Haken ist, dass die Liste der Möglichkeiten je nach vorherigen Entscheidungen unterschiedlich sein kann.
Auf den ersten Blick klingt dies wie eine Fülle von if-else-Anweisungen, was bedeutet, dass eine Regel-Engine vorhanden ist. Aber es klingt für mich auch wie eine endliche Zustandsmaschine.
Ich bin dabei, dies in Java oder vielleicht Groovy zu schreiben. Ich interessiere mich derzeit mehr für konzeptionelle Fragen, dh wie sollte dies auf einer breiten Ebene geschehen (wie implementieren die Leute überhaupt Schach oder Kartenspiele?), Aber einige Ratschläge zu einer bestimmten Bibliothek sind auch willkommen.
Offensichtlich bezieht sich die "Spiel-Engine" aus dem Titel nicht auf die Kollisionserkennung oder andere physikalische / grafische Mechanismen, sondern auf die Logik, die darüber entscheidet, welche Optionen ein Spieler der Situation und seinem aktuellen Zustand gegeben hat.
Antworten:
Basierend auf dem, was Sie in den Kommentaren gesagt haben, würde ich so damit umgehen:
Implementieren Sie die Geschichte als Finite-State-Maschine mit einem Twist. Jeder Zustand ist eine Seite der Geschichte, und jeder Übergang ist eine Verknüpfung von einer Seite zur anderen. Aber jeder Übergang hat auch Bedingungen . Die Bedingungen können null sein. In diesem Fall wird der Übergang immer als verfügbare Option angezeigt. Wenn dies jedoch nicht der Fall ist, müssen sie ausgewertet werden, wenn die Seite angezeigt wird. Wenn die Auswertung zurückgegeben wird
False
, wird der Übergang nicht angezeigt .Es gibt zwei grundlegende Möglichkeiten, wie Sie die Bedingungen implementieren können. Die erste besteht darin, eine vollständige Skript-Engine im Spiel einzurichten, und dann sieht die Bedingung so aus
return player.inventory.contains(GUN)
. Dies ist anfangs komplizierter einzurichten, ermöglicht jedoch eine erweiterte Skripterstellung.Die zweite besteht darin, die möglichen Bedingungen in eine Art Objekt fest zu codieren. Es könnte ein
RequiredItem
Feld haben, und wenn dieses Feld einen Wert hat, prüfen Sie, ob die Bedingung erfüllt ist. Dieses System ist einfacher einzurichten. Es schränkt die Möglichkeiten, die Sie haben, erheblich ein, als dies bei Skripten der Fall wäre. Wenn Sie jedoch nicht die Flexibilität benötigen, die eine Skript-Engine bieten würde, ist die Verwendung wahrscheinlich wesentlich einfacher.quelle
Ich denke, die Antwort ist im Titel: Sie brauchen eine Regel-Engine. Wenn Sie vorhaben, Ihre Anwendung mit Java zu schreiben, können Sie natürlich Ihre eigene schreiben, wie von Gilbert Le Blanc vorgeschlagen, ODER Sie möchten sich Drools , eine Regel-Engine, ansehen .
Mit Drools oder einer anderen Regelengine können Sie eine parametrisierte Situation definieren, die eine Liste möglicher Aktionen ausgibt. Sie können einfache Regeln codieren, die suc hat:
Spieler ist bei pageX:
Das Interessante an Drools ist, dass Sie alle Ihre Regeln in eine Excel-Datei kodieren können und dann Drools zu Beginn des Spiels veranlassen, diese Datei zu lesen. Danach ist alles im Speicher, Sie müssen sich nur noch um Ihre Benutzeroberfläche kümmern.
Hier sind einige Ressourcen, die Ihnen den Einstieg in Drools erleichtern sollen:
quelle
Die Zustandsmaschine klingt nach einem sicheren Ansatz, um Ihr Spiel zu modellieren. Es gibt viele Bibliotheken für interaktive Fiktionen:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
nicht in wikipedia erwähnt, ist twine momentan sehr beliebt.
quelle
Konzeptionell ist Ihr Spiel unkompliziert. In psudeocode würde es ungefähr so aussehen:
Nun ist es schwierig, den gesamten Text so zu verketten, dass er von einer Aktion zur nächsten fließt. Sie könnten eine relationale Datenbank verwenden. Du könntest einen Baum gebrauchen.
Es ist etwas schwierig, genauer zu sein, ohne zu wissen, welche Computersprache Sie verwenden möchten. Da Sie Java erwähnt haben, würde ich mich eher zu einer Baumstruktur neigen.
Erstellen Sie eine Antwortklasse, die eine Antwort und einen Link zu einer Textklasse enthält.
Erstellen Sie eine Textklasse, die den Abenteuertext und eine Liste der Antworten als Instanzen der Antwortklasse enthält.
Bearbeitet, um den Kommentar zu beantworten:
Sie berechnen nichts basierend auf diesem Modell. In Ihrem Beispiel würde der Baum ungefähr so aussehen, wobei T der Text und A eine Aktionsauswahl ist:
Ja, es gibt einige Textduplikationen, aber wenn Sie der Kette folgen, können zukünftige Aktionen frühere Entscheidungen berücksichtigen. Es ist ein riesiger Entscheidungsbaum.
quelle