Wie sollte ich meine rundenbasierte Engine strukturieren, um Flexibilität für Spieler / KI und Beobachtung zu ermöglichen?


7

Ich habe gerade angefangen, eine rundenbasierte Strategie-Engine in der GML-Sprache von GameMaker zu entwickeln ... Und ich war gut unterwegs, bis es an der Zeit war, den Turn-Zyklus zu handhaben und zu bestimmen, wer welchen Spieler steuert und wie man mit der Kamera umgeht und was auf dem Bildschirm angezeigt wird.

Hier ist ein Überblick über den Hauptschalter, der gerade in meiner Hauptspielschleife stattfindet:

switch (GameState)
{
case BEGIN_TURN:
    // Start of turn operations/routines
break;
case MID_TURN:
    switch (PControlledBy[Turn])
    {
    case HUMAN:
        switch (MidTurnState)
        {
        case MT_SELECT:
            // No units selected, 'idle' UI state
        break;
        case MT_MOVE:
            // Unit selected and attempting to move
        break;
        case MT_ATTACK:
        break;
        }
    break;
    case COMPUTER:
        // AI ROUTINES GO HERE
    break;
    case OBSERVER:
        // OBSERVER ROUTINES GO HERE
    break;
    }
break;

case END_TURN:
    // End of turn routines/operations, and move Turn to next player
break;
}

Jetzt sehe ich bereits einige Probleme mit diesem Setup ... Aber ich habe keine Ahnung, wie ich es richtig machen soll. Turn ist eine globale Variable, die speichert, welcher Spieler an der Reihe ist, und die Zustände BEGIN_TURN und END_TURN sind für mich vollkommen sinnvoll ... Aber der Zustand MID_TURN verwirrt mich wegen der Dinge, die ich hier passieren möchte:

  • Wenn es Spieler gibt, die von Menschen kontrolliert werden, möchte ich, dass die KI hier ihrerseits an der Reihe ist, aber ich möchte, dass die Kamera der KI folgt, während sie Bewegungen in der Sicht des menschlichen Spielers ausführt.
  • Wenn es keine von Menschen kontrollierten Spieler gibt, würde ich gerne zwei oder mehr KIs beobachten können, die auf der Karte mit gottähnlicher "Beobachter" -Vision kämpfen.

Im Grunde frage ich mich also, ob es Ressourcen für die Strukturierung einer rundenbasierten Strategie-Engine gibt. Ich habe viel über Pathfinding und KI geschrieben, und diese sind alle großartig ... Aber wenn es um den Umgang mit der Turn-Struktur und den Spielzuständen geht, habe ich Probleme, überhaupt Ressourcen zu finden. Wie sollten die Zustände aufgeteilt werden, um Flexibilität zwischen den Spielern und den Controllern (MENSCH, COMPUTER, BEOBACHTER) zu ermöglichen?

Wenn ich auf dem richtigen Weg bin, brauche ich vielleicht nur eine Bestätigung, bevor ich noch ein paar hundert Codezeilen ablege ...



Ja, ich habe mir diese angesehen. Man ging nicht wirklich irgendwohin. Die andere war eine Lösung mit Ereignissen, ging aber nicht wirklich auf die Probleme ein, die ich hier angesprochen habe.
Reefpirate

2
Sie sagten: "Jetzt sehe ich bereits einige Probleme mit diesem Setup." Also, was ist das Problem, mit dem Sie konfrontiert sind? Können Sie die Kameraansicht nicht einstellen? können keine Animationen ausführen? oder was?
Jake

Handelt es sich um eine Manipulation der Kamera oder um die Implementierung der Blinker?
user64742

Antworten:


2

Sie müssen die "Kamera" von einem Player entkoppeln. Vielleicht hat GML hier Einschränkungen, aber ich habe keine nennenswerte Erfahrung damit. Es gibt keinen Grund, warum die Position und das Setup der Kamera auf einen einzelnen Spieler beschränkt sein müssen. Normalerweise besteht ein Spiel aus einer Welt und manchmal mehreren Kameras, die pro Frame für mehrere Spieler auf demselben Bildschirm gerendert werden sollen, oder aus "Überwachungskamera" -Ansichten oder aus Rendering in Texturansichten usw. Der Vorgang des Renderns eines Frames aus einer einzelnen Kameraansicht an einen einzelnen Bildschirmbereich muss überhaupt nicht an einen Spieler gebunden sein.


1

Während es menschliche Spieler gibt, können Sie die Kamera auf der sich bewegenden KI-Einheit zentrieren, wenn sie sich in Sichtweite befindet. Andernfalls können Sie die Kamera unabhängig von den beweglichen Einheiten mit Maus / Tastatur steuern.

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.