Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.05.2003, 17:08

R3D Script Sprache

Ich bin grad dabei mir eine kleine Scriptsprache zu basteln. Bis jetzt klappt das auch ganz gut. Bis jetzt nutze ich sie nur für die Konfiguration und für das erzeugen von Objekten.

Ich möchte später aber noch die möglichkeit haben, mit Funktionen zu Arbeiten und z.B. if Anweisungen bearbeiten. Soll alles nicht so komplex sein. Ich stelle mir halt nur grad die Frage wie ich die Verarbeitung einer funktion bewerkstelligen soll ???

Also wenn ich z.B. so was habe

Quellcode

1
2
3
4
5
6
7
8
9
function int Tuwas(float fValue1, float fValue2)
{
  if(fValue1 == fValue2)
  {
     machewas(); // Aufruf einer C++ Funktion
     return 1;
  }
  return 0;
}

Also so was soll möglich sein. Die Variablen in der Parameterliste zu speichern ist nicht schwer. Auch Variablen zu speichern die inerhalb einer Funktion erzeugt werden, ist nicht schwer.
Die Frage die sich mir stellt ist, wie stelle ich es am besten an, eine gescriptete Funktion aufzurufen, oder eine Funktion aufzurufen die inerhalb meines C++ Codes Implementiert wurde?

Ergänzung:
Bis jetzt ist kein eigener Script Editor geplannt, sondern nur ein einfacher Command Line Compiler. Bei VC++ ist es ja kein Problem einen externen Compiler zu benutzen. Gibt es da bei der Fehlerausgabe irgendwelche Formatierungen die zu beachten sind?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

19.05.2003, 18:17

Ich verstehe das Problem nicht so ganz. Beschreibe erst mal den grundlegenden Aufbau der Scriptsprache. Ich habe mir auch mal Gedanken über solch eine Sprache gemacht und hatte mir gedacht, es wäre am besten, ein Script zuerst in eine Art Assembler-Sprache zu übersetzen (ähnlich wie die Intermediate Language bei .NET).

3

19.05.2003, 18:26

Mir geht es erst einmal um das Sammeln von Ideen.

Aber hier mal die Grundlage der Sprache:
Der geschriebene Code wird von einem Compiler in einen Bytecode übersetzt. Alle Schlüsselwörter, Informationen und Operationen bekommen einen 4 Byte großen Code (unsigned long).
Namen werden nicht als 4Byte Code gespeichert sondern als ganz normaler String (char). Zeichenketten werden mit '\0' abgeschlossen.

Schlüsselwörter sind z.B. int, setting, float, string
Namen können z.B. Namen von Variablen oder eines Settingblocks sein.

Einige Beispiele für die Syntax

Quellcode

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
// Definition einer Konfiguration
setting Ravange3DManager
{
  // Definition einer normalen Variable
  int DefaultPoolSize=20000; // Interger
  string Name="Manager"; // String
  float fValue=100.045; // Float

  // Variablen Wert in INI-Datei "r3d.ini"
  int <r3d> PoolSize;

  // Variablen Wert in INI-Datei mit Defaultwert
  int <r3d> Count=10;
}

// Definition einer Konfiguration für ein Interface in einem PlugIn
setting IRavange3DGraphic=r3dgraphic
{
}

// Definition eines Objektes das Automatisch geladen werden soll,
//wenn das jeweiliege Objekt erzeugt wird
setting Ravange3DManager
{
  load Ravange3DGraphic=r3dgraphic;
}

// Definition eines Child Objektes
setting <IRavange3DGraphic> IRavange3DModell
{
}

// Definition einer Konfiguration mit Importierten & Externen Interfaces
setting IRavange3DGraphic=r3dgraphic
{
  // Objekt wird hinzugefügt
  import IMyModell=myplugin;

  // Std Objekt wird durch dieses überschrieben
  extern IMyVertexBuffer=myplugin;
}


So das ist mal ein kleiner Auszug meines Entwicklertagebuchs :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

19.05.2003, 19:32

Sorry, aber da blicke ich irgendwie nicht durch! Unter einer Scriptsprache stelle ich mir was anderes vor...

5

19.05.2003, 20:24

Es ist ja auch nur ein kleiner Ausschnitt. Zumal verwende ich die Sprach erst einmal für die Konfiguration der Engine.
Das soll aber nicht so bleiben. Das erzeugen von Instanzen und die verarbeitung von Funktionen und bedingungen sollen auf jedenfall folgen.

Genau für letzteres hab ich noch keinen Plan wie ich das am geschicktesten anstelle.


Aber was genau verstehst du denn nicht?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

6

19.05.2003, 20:34

du willst dir also allen ernstes einen eigenen compiler schreiben ?

wenn du das schaffst, dann respect, aber mal gucken..

vor allem die nötigkeit is wahrscheinlich die frage, ich kenn nämlich nen compiler der is auch nich schlecht, irgendwie von microsoft oder so ähnlich, liegt bei Visual Studio dabei, nimm den doch ;)

ne jetzt mal ehrlich, wofür brauchst du ein so komplexes system?
da kann man gleich c++ mit dlls benutzen, wäre um einiges einfacher..
stay tight, project universe comes back!
### project earth <> 2004 ###

7

19.05.2003, 21:02

Ich will meinen Code ja nicht in Assembler übersetzen :)
Das währe noch eine gelungene Ergänzung und das schnellste Script das man erzeugen kann.

1: Den Bytecode mach ich weil er kleiner ist als der normale Quellcode
2: Den Bytecode kann man nicht so einfach verändern, weil man dafür erst einmal die Code Tabelle haben muss.
3: Es kann nie schaden zu wissen wie man im Prinzip nach einen Compiler aufbaut.
4: Die Konfiguration über eine INI Datei hat sich als Problematisch herausgestellt.

Der Interpret für den Compilierten Code ist bereits fertig. Ist gar nicht so schwer, wenn man sich ein gescheites System überlegt hat.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

8

20.05.2003, 21:01

Hi,

eine exe funktion aus einem script aufzurufen ist
nur über eine registration der funktion möglich.
Andersherum genauso.

In der Unreal engine wurden soweit ich weiß fast alle klassendeklarationen
in der scriptsprache geschrieben und ihre methoden als native implementiert.
d.h man kann auf einen großteil des programms zugreifen.
IMHO eine ganz schöne Lösung.

ich habe mir auch mal gedanken über eine script sprache gemacht.
Ich wollte auch einen eigenen byte code befehlssatz erstellen.
die scripts selber sollten in einer assembler ähnlichen sprache geschrieben
werden und dann von einem sehr simplen compiler in meinen bytecode compiliert werden.

9

20.05.2003, 23:22

Über die Registration der Funktionen hab ich auch schon nachgedacht. Für meine erste Plannung der KI auch eine sehr gute Lösung.

Da hab ich mir gedacht verhaltensweisen in C++ zu Implementieren, und über das Script wird dann entschieden welche verhaltensweise angebracht ist.
Die KI ruft dann bestimmte Funktionen im Script auf, und von da aus geht es dann weiter.

Ich glaub das schwierigste ist, eine gute Kommunikationsschnittstelle zwischen festen Code und Script zu schaffen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

10

07.06.2003, 19:48

Mein Compiler ist schon sehr weit, und ich kann meine Konfigurationen mit Strukturen,Array's und normalen Variablen (int,float,string) kompilieren. Ich stehe also jetzt vor den Funktionen.

Der Aufruf eine C Funktion vom Script aus ist auch kein Probleme. Eine passende Methode ist in Game Programming Gems 1 beschrieben :)

Das einzige was mir noch Kopfzerbrechen macht, ist die Speicherung des Kompilierten Script Codes, damit ich ihn möglichst schnell Abarbeiten kann.

Jumping Jack wie hast Du das denn gemacht?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige