Skript-Engine programmieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

Betreff: Skript-Engine programmieren

BeitragFr, Jan 02, 2009 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mich in letzter zeit immer wieder daran geärgert, das ich kein flexibles system einbeauen konnte(client side und server side befehle, console, etc).
Nun meine frage:
Wie soll ich so ein Skript system aufbauen, bzw wie funktioniert so eins?
Hat wer einen funktionierenden Beispiel code?(bitte _keine_ Pseudo codes)
Warbseite

the FR3AK

BeitragFr, Jan 02, 2009 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du wirst kaum einen finden der dir hier jetzt seine gesamte ScriptEngine Postet Wink Das ist viel arbeit wenn man es von grundauf neu schreibt.

Also am Anfang sollte man die Datei Zeilenweise einlesen und Auswerten. Beim auswerten sollte man den Code irgendwie in den Speicher laden das man nicht immer aus der Datei lesen muss. Dann kannst du den Code Parsen, also zerlegen und auf seine einzelheitem Prüfen. Dazu kommen dann noch if Abfragen und Variablen festlegen und verändern.
  • Zuletzt bearbeitet von the FR3AK am Fr, Jan 02, 2009 17:52, insgesamt einmal bearbeitet

Xaymar

ehemals "Cgamer"

BeitragFr, Jan 02, 2009 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
so meinte ich das nu nich...
ich meinte einen beispiel code der zb nur einfach mal guckt ob eine funktion in einer zeile steht, mehr nicht.
oder zb variablen speichern kann
Warbseite

the FR3AK

BeitragFr, Jan 02, 2009 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich grade in BB nicht zur hand aber mit ReadLine, Instr und Mid sollte das alles Funktionieren. Ok für Variablen Speichern brauchst du schon ein Paar weitere befehle Wink

coolo

BeitragFr, Jan 02, 2009 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Für den ungefähren aufbau, kannst du ja hier nachschauen: https://www.blitzforum.de/foru...hp?t=30150
Ansonsten kann ich dir empfehelen, das du mit einem eigenen String Rechner arbeitest. Du solltest ausßerdem immer vor Augen halten, wozu die Scriptengine dienen soll. Wenns eine einfache Ablauf Script engine ist, brauchst du meistens keine Schleife und If Abfragen...

Bei weiteren Pobelemen, kannst du mich per PN kontaktieren.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

ozzi789

BeitragFr, Jan 02, 2009 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.east-power-soft.de/...uts_script
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Xaymar

ehemals "Cgamer"

BeitragSo, Jan 04, 2009 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die antworten. Ich habe inzwischen das zusammen gebastelt, was ich durch die beiden codes rausgefunden habe:

[Edit]
Update 04.01.09
-Fehler bei leerer Zeile behoben

Code: [AUSKLAPPEN]
;ScriptEngine
Graphics 800,100,0,2
Global CommandL$ = CommandLine()

Type Script
   Field LText$
   Field LN
End Type

Type Functions
   Field Name$
   Field ID
End Type

;Funktionen hinzufügen
F.Functions = New Functions
F\Name$ = "//"
F\ID = 0

F.Functions = New Functions
F\Name$ = "INITGAME"
F\ID = 1

F.Functions = New Functions
F\Name$ = "ECHO"
F\ID = 97

F.Functions = New Functions
F\Name$ = "WAITKEY"
F\ID = 98

F.Functions = New Functions
F\Name$ = "END"
F\ID = 99

;Dateien laden
If CommandL$ <> ""
   If LoadScript(CommandL$) = 1
      ParseScript()
   Else
      End
   EndIf
Else
   File$ = Input("File: ")
   Print "Loading " + File$ + "..."
   If LoadScript(File$) = 1
      Print "Loading succesfull. Parsing and Executing..."
      ParseScript()
      Print "Script ended."
   Else
      Print "Loading failed. Press any key."
      WaitKey()
      End
   EndIf
EndIf

Function LoadScript(File$)
   Delete Each Script
   If FileType(File$) = 1
      Stream = OpenFile(File$)
      While Not Eof(Stream)
         LN = LN + 1
         S.Script = New Script
         S\LN = LN
         S\LText$ = Replace(ReadLine(Stream), "   ", "")
      Wend
      CloseFile Stream
      Return 1
   Else
      Return 0
   EndIf
End Function

Function ParseScript()
   For S.Script = Each Script
      FNum = 100
      For F.Functions = Each Functions
         If Upper(Left(S\LText$, Len(F\Name$))) = F\Name$
            FNum = F\ID
            Exit
         EndIf
      Next
      Select FNum
         Case 0   ;Kommentar
            DebugLog Mid(S\LText$, 3, -1)
         Case 1   ;InitGame
            If Instr(S\LText$, ",") <> 0
               W = Mid(S\LText$, 9, Instr(S\LText$, ","))
               H = Mid(S\LText$, Instr(S\LText$, ",")+1, Instr(S\LText$, ",", Instr(S\LText$, ",")))
               D = Mid(S\LText$, Instr(S\LText$, ",",Instr(S\LText$, ",")+1)+1, -1)
               Graphics W,H,D,0
            Else
               Print "Error at Line " + S\LN + ": Missing ',' at " + S\LText$
               WaitKey()
               End
            EndIf
         Case 97   ;Echo
            If Instr(S\LText$, Chr(34)) <> 0
               Txt$ = Mid(S\LText$, Instr(S\LText$, Chr(34))+1, Len(S\LText$)-Instr(S\LText$, Chr(34))-1)
            Else
               Txt$ = Right(S\LText$, Len(S\LText$)-5)
            EndIf
            Print Txt$
         Case 98   ;WaitKey
            WaitKey()
         Case 99   ;End
            End
         Case 100
            If S\LText$ <> ""
               Print "Error at Line " + S\LN + ": "+S\LText$ + " is not a valid command"
               WaitKey()
               End
            EndIf
      End Select
   Next
End Function


Eine Beispiel Datei:
Code: [AUSKLAPPEN]
InitGame 800,600,16
echo "Nun mit besserer Syntax"
echo Aber auch ohne anführungszeichen möglich

//Script anhalten da ein Fehler vorhanden ist
unknown

WaitKey
End
Warbseite
 

Düsi

BeitragSo, Jan 04, 2009 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:
danke für die antworten. Ich habe inzwischen das zusammen gebastelt, was ich durch die beiden codes rausgefunden habe:

[Edit]
Update 04.01.09
-Fehler bei leerer Zeile behoben

Eine Beispiel Datei:
Code: [AUSKLAPPEN]
InitGame 800,600,16
echo "Nun mit besserer Syntax"
echo Aber auch ohne anführungszeichen möglich

//Script anhalten da ein Fehler vorhanden ist
unknown

WaitKey
End

String ohne Anführungszeichen?
Wie willst du später zwischen Variable und String unterscheiden?

Xaymar

ehemals "Cgamer"

BeitragSo, Jan 04, 2009 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
lies dir die engine bei echo durch

echo soll immoment nur text zurückgeben
Warbseite

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group