Eigene Skriptsprache
Übersicht

![]() |
M2MBetreff: Eigene Skriptsprache |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute,
also erstmal ich habe bereits die Suche benutzt, aber hab nicht genau das gefunden was ich wollte, oder es war zu umständlich oder nicht kommentiert. ![]() Das soll wiefolgt aufgebaut sein: Man erstellt eine Textdatei, zB "game.txt" und schreibt darin Befehle wie: Code: [AUSKLAPPEN] bildladen("hallo.bmp"); bildzeichnen(hallo,12,21); Und diese Datei soll mit BlitzBasic geladen werden und er soll dann das Bild laden und das "bildzeichnen" mit drawimage ersetzten. Also er soll eben das Bild dann malen. So dann hab ich mir aber Gedanken gemacht und bin dazu gekommen, das man ja auch Abfragen braucht, wie zB Code: [AUSKLAPPEN] If tastaturgedrückt then oder If x = 30 then ...
Das erscheint mir aber als ultrakompliziert, oder wie soll man denn einen Parser für IF Abfragen und so schreiben. Keine Ahnung. Und ohne Abfragen ist es ja keine Sprache... Wie ich die Exe mache, denk ich es sehr einfach, da ich einfach eine Exe mit Blitz erstelle, und dann die Textdatei parse. So braucht man nur die erstelle Exe kopieren und mit seinem Spiel mitliefern. Meine Fragen also: ![]() Wie kann man Textdateien nach dem oben genannten Muster parsen? (sollte möglich einfach und kommentiert sein ![]() Und wie kann man sowas wie diese Abfragen machen? Vielen vielen Dank |
||
BlackTermi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
? öhh du schreibst dir einfach deine eigenen Funktionen z.B. für das mit bildzeichnen:
bildzeichnen(hallo,12,21); text = readline(stream) ,oder wie auch immer dann wertest du das aus, nehmen wir an hallo steht in der variable text2, 12 heisst x2 und 21 heisst y2 wenn der befehl bildzeichnen heisst startest du so eine funktion if Text = "bildzeichnen" ;in nem langen programm empfiehlt sich hier wohl eher select case Bildzeichnen(text2,x2,y2) endif Function Bildzeichnen(Bild$,x,y) bildgeladen = loadimage("GFX\bild.bmp") Drawimage Bildgeladen,x,y,0 end function ach hab ich ganz vergessen, auf der robsite gibts ein kleines tut dazu: http://www.robsite.de/download...blitzbasic und ansonsten empfiehlt sich nur nachdenken, dann kommst du auch selbst darauf, obwohl ich sowas wie das bildermalen sehr überflüssig finde, bb bietet da schon sehr gute funktionen für an. |
||
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das versteh ich nicht sorry. Was meinst du mit text2, x2 und y2? Damit kann ich aber nur einmal den Text anzeichnen oder? Ich versteh das grad nicht? Also man soll beliebig oft in die Textdatei einen Befehl schreiben können und er soll ihn jedesmal mit den angegeben Parametern umwandeln. 1 | ||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
dieses tutorial enthällt fehler bei kommentaren gibt aber den richtigen ansatz: Deine Befehle sehen alle so aus:
Code: [AUSKLAPPEN] befehl(var1,var2,var3,"string",123)
also kannst du mit Code: [AUSKLAPPEN] Select Mid(zeile$,1,Instr(zeile$,"(")-1)
Zur erklärung mit mid nimmst du strings auseinander die 1 gibt die anfangsposition an, Instr ist eine suchen-Funktion es gibt die stelle an ander eine zeichenfolge zuerst gefunden wurde, mid will aber nicht die end-position sondern den abstand deshalb -1 (abstand=endposition-anfangspositon).
Case "befehl1" [bla] End Select So schon kann man einen syntaxfehler in der scripsprache machen: man vergisst die klammern: Instr gibt 0 zurück -> Mid bekommt als länge -1 -> "Parameter must be grater than 0"... so die parameter funktionieren ähnlich empfehlen kann ich meinen stringzerstörer Between(https://www.blitzforum.de/foru...hp?t=22536). mit ihm kannst du aus der zeile erst mal die parameter herausfiltern:Code: [AUSKLAPPEN] alleparas$=Between(zeile,"(",")")
so die Parameter bekommst du wie oben mit der taktik mid Code: [AUSKLAPPEN] var1=Mid(alleparas$,1,Instr(alleparas$,",")-1)
du siehst pro parameter musst du ein Instr(alleparas$,",") als neuen parameter von instr dazugeben sieht kompliziert aus aber wenn man mal dahinter gekommen ist... Falls jemand nabessere lösung hat...^^
var2=Mid(alleparas$,1+Instr(alleparas$,","),Instr(alleparas$,",",Instr(alleparas$,","))-1-Instr(alleparas$,",")) var3=Mid(alleparas$,1+Instr(alleparas$,",")+Instr(alleparas$,",",Instr(alleparas$,",")),Instr(alleparas$,",",Instr(alleparas$,",",Instr(alleparas$,",")))-1-Instr(alleparas$,",")-Instr(alleparas$,",",Instr(alleparas$,","))-Instr(alleparas$,",",Instr(alleparas$,",",Instr(alleparas$,",")))) usw... |
||
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh vielen Dank, versteh ich jetzt nicht so auf die Schnelle um Fragen dazuzustellen, deswegen werd ich mir das erstmal genauer ansehen. | ||
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du alllerdings jedesmal die Textdatei ausliesst (und compilierst), werden die Programme sehr, sehr langsam.
Du kannst versuchen dich auf eigene Events zu beschränken und diese binär zu speichern. Beispiel: Du schreibst eine eigene Engine für Maps und Physik. Nun weist du jeder Funktion, die du geschrieben hast eine ID zu. Dann schreibst du einen Compiler, der eine Textdatei mit "menschlichen" Befehlen ausliest und diese in einen Binärcode umwandelst (sowie es Blitz eben auch macht). Läuft das alles später einmal relativ sicher, kannst du eben Welten in deinem eigenen Compiler schreiben und den Blitzcode schön sauber halten. Ob sich das ganze jedoch lohnt, lass ich jetzt mal im Raum stehen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group