Ansonsten wäre es mal interessant zu sehen, ob man deine Skriptsprache schon in einem Spiel einbinden könnte und das ohne großen Aufwand
Ein echtes Spiel, in das ich die Skriptsprache integrieren kann hab ich leiter gerade nich parat.
Ich poste hier aber mal ein minimalistisches Programm, das eine Beliebige Scriptdatei in der Konsole ausführt, um zu demonstrieren, wie einfach die Benutzung ist.
Ich werde auch demnächst mal eine dll draus machen damit ihr euch das ganze mal näher angucken könnt.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include "PHS.h" //Includedatei für PHScript
#include <iostream>
//Das Script soll über die Konsole Zahlen Ein- und Ausgeben können.
//Dafür werden zwei Funktionen bereitgestellt.
//Die Funktionen erhalten jeweils als ersten Parameter eine Struktur
//namens PHSParameter. In ihr liegen als double-Werte die eigentlichen
//Parameter der Funktion.
//Der zweite Parameter ist ein Pointer, der auf Daten des Hauptprogramms zeigt,
//die dadurch durch das Script manipuliert werden können.
//Der dritte Parameter ist der "Arbeitsspeicher" des Programms
void Eingabe(PHSParameter *Params, char *Pointer, double *Memory)
{
std::cin>>Memory[(int)Params->Param[0]]; //Der erste Parameter ist die Adresse
//der Variablen, die eingelesen werden soll.
//Weil alle Parameter als double vorliegen
//casten wir zu int und lesen mit std::cin
//eine Zahl in Memory an die entsprechende Adresse.
}
void Ausgabe(PHSParameter *Params, char *Pointer, double *Memory)
{
std::cout<<Params->Param[0]<<std::endl; //Der Parameter wird ausgegeben.
}
int main()
{
PHSFunctions Functions; //Befehle, über die das Script verfügt
PHSGetFunctions(&Functions); //Standartbefehle einlesen(z.B. Addition,
//Subtraktion, Kosinus, Sinus, new, free)
PHSAddFunction(&Functions, "get", Eingabe); //Eingabe und Ausgabe unter den Namen
//"get" und "print" eintragen
PHSAddFunction(&Functions, "print", Ausgabe);
char filename[100];
std::cout<<"Bitte geben sie die Scriptdatei an"<<std::endl;
std::cin>>filename;
PHSProgram Program; //Das Script
PHSCompile(filename, &Program); //Laden des Scripts
char *Bytecode; //Repräsentiert das Fertige Scriptprogramm
PHSAssemble(&Program, &Bytecode, &Functions);
PHSExecute(Bytecode, &Functions, PHSPARSE_ALL, NULL);
system("PAUSE");
return 0;
}
|
Ein Script könnte dabei z.B. so aussehen(berechnet die Fakultät der eingegebenen Zahl):
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
function main(void)
get(.a)
b=1;
i=1; while((i<a)|(i~a))
b=b*i
i=i+1
end
print(b)
return(0)
|