Ergebnis 1 bis 6 von 6

Thema: Frage zum Ansatz eines eigenen Intrepreters

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Frage zum Ansatz eines eigenen Intrepreters

    Guten Tag.
    In meinem derzeitigen Hauptprojekt will ich ein eigenes NPC-System aufbauen und diesen einen eigenen Interpreter schreiben, ähnlichem dem des RPG-Makers.
    Ich würde gerne wissen wie ihr diese Überlegungen findet und ob ihr mir einen Verbesserungsvorschlag geben könntet, besonders was die Performance angeht will ich bestmögliche Ergebnisse erzielen.

    Dies ist der erste Teil des Interpreters, er wird ausgeführt wenn ich die Karte erstelle, also nicht zur Laufzeit des Spieles!

    Im ersten Schritt soll eine Zeile Code analisiert werden, zum Beispiel:
    Code:
    self.set_hp(50)
    würde eingelesen werden als "self"+Trennungszeichen+"set_hp"+Parameterzeichen+"parameter"+Zeilenendungszeichen.

    Dann würden die Schlüsselelemente "self" und "set_hp" in ihre entsprechende ID umgewandelt werden. In einem Hash würde geguckt werden welcher ID jeweils "self" und "set_hp" entsprächen, zum Beispiel 0 und 13.

    Anschließend würde ein Array erstellt werden welches die Elemente [0, 13, "parameter"] enthält.
    Dieses Array wird für den NPC in seinem <Action_Array> an der entsprechenden Stelle gespeichert werden.
    Also ungefähr so:
    Code:
    # slice_next_word(String WelcherString, String Trennungszeichen)
    # Gibt das nächste Wort aus dem String WelcherString bis zu dem ersten Zeichen Trennungszeichen wieder.
    # Entfernt das wiedergegebene Wort und das Trennungszeichen anschließend vom String
    key_target = self.slice_next_word(action_string, ".")
    key_order = self.slice_next_word(action_string, "(")
    key_parameter = self.slice_next_word(action_string, ")")
    key_target_id = CODE_ID_HASH[key_target]
    key_order_id = CODE_ID_HASH[key_order]
    key = [key_target_id, key_order_id, key_parameter]
    @action_array[@current_action_id] = key
    Nun kommt der zweite Teil des Interpreters, dieser wird ausgeführt sobald der Spieler versucht mit dem NPC zu interagieren.

    Das <Action_Array> wird Schritt für Schritt abgegangen und die entsprechenden Array-Objekte werden ausgeführt.

    Zuerst das erste Element unseres Arrays [0, 13, "parameter"], um den NPC zu finden mit welchem agiert werden soll wird in der Game_Map Klasse der NPC mit der ID 0 gewählt.
    Anschließend wird die Funktion gesucht welche dieser NPC ausführen soll, nämlich die 13 Funktion in einem konstanten Array welches alle Funktionen der NPC-Klasse beinhaltet.
    Danach wird dem gewählten NPC befohlen die gewählte Funktion auszuführen und der "parameter" wird der Funktion als Parameter übergeben.
    Also ungefähr so:
    Code:
    action_key = @action_array[@current_action_id]
    $map.npc_objects[ key[ 0 ] ].action_functions[ key[ 1 ] ].call( key[ 2 ] )
    Ist dies eine gute Idee oder sollte ich es doch anders angehen?

    Geändert von Cornix (24.08.2011 um 14:20 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •