Eigene Skriptsprache

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M2M

Betreff: Eigene Skriptsprache

BeitragSa, März 31, 2007 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Confused Also ich hatte schon immer so einen kleinen Traum eine eigene Miniprogrammiersprache zu schreiben, nichts großartiges, nur weil mir das so Spaß macht.
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: Very Happy

Wie kann man Textdateien nach dem oben genannten Muster parsen? (sollte möglich einfach und kommentiert sein Wink

Und wie kann man sowas wie diese Abfragen machen?

Vielen vielen Dank
 

BlackTermi

BeitragSa, März 31, 2007 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
? ö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

BeitragSa, März 31, 2007 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 31, 2007 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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)
Case "befehl1"
[bla]
End Select
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).
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)
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...
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...^^

M2M

BeitragSa, März 31, 2007 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh vielen Dank, versteh ich jetzt nicht so auf die Schnelle um Fragen dazuzustellen, deswegen werd ich mir das erstmal genauer ansehen.
 

sdjh

BeitragDi, Apr 03, 2007 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group