Missionziel
-
Hi, ich habe mir eine kleine Game-Engine programmiert für ein Luftkapmpfsimulator. Das ganze spielt sich im Weltraum ab. Die Game-Engine ist jetzt in der Lage beliebig viele Raumschiffe zu erstellen. Es gibt zwei Teams (einer ist der Spieler, der sitzt im Cockpit) die sich gegenseitig bekämpfen.
Ich habe jetzt lust bekommen das ganze zu einem richtigen Spiel auszubauen. Bis jetzt funktioniert das ganze so:
Es gibt eine Datei. Diese beinhaltet Position, Anzahl der Raumschiffe. Ist das erste Level beendet wird das nächst geladen. Das wird auf die Dauer etwas langweilig. Ich habe mir so etwas mit Missionen vorgestellt. Also z.B. Begleitschutz fliegen, Satellit zerstören, Feindliches Mutterschiff angreifen ect.
Hat einer eine Idee wie ich das in eine Datei packen könnte so das meine GameEngine je nach den Angaben in der Datei das Level erstellt. Und bei erfüllen des Missionziels zum nächsten Level rübergeht.
Ich meine Begleitschutz zu fliegen ist eine andere Aufgabe als einen Satellit zu zerstören. Doch wie könnte ich es der GameEngine sagen.
-
du schreibst dir mit nem INT-flag welcher state erreicht sein muss
z.B.
1 = muss existieren
2 = muss zerstört sein
3 = muss durchflogen seinund mit einem INT-flag, was passiert wenn das nicht erreicht ist
1 = spielabbruch
2 = warten bis erfüllt
3 = falls zerstört/angegriffen, dann gegnerdann schreibst du in etwa sowas
"du mußt begleitschutz fliegen durch die 4 navpunkte, bei Nav3 springt der beschürtzte nachschub raus, fliegen sie zu nav4 und zerstören sie dein feindlichen satteliten"name,position,flag-ziel,flag-reaktion
fregatte,-1|0|1,1,1
sav1,0|0|0,3,2
sav2,10|0|0,3,2
sav3,20|0|0,3,2
sav4,30|0|0,3,2
sat,30|-1|0,2,3so könnte es laufen, obwohl das ne simple statemaschine ist, dauert es bestimmt noch einiges bis das läuft.
ach ja Gast, darfst dich auch reggen hier, dann weiß man wenigstens, wer antwortet.
rapso->greets();
-
Wenn du das richtig ordentlich machen willst, dann bastel dir ne kleine (Pseudo) Scriptsprache.
Ich habe sowas für das Adventure gebastelt, das ich gerade programmier.
Damit ihr euch das vorstellen könnt: Es ist ein 2D Point&Click Adventure ganz im Stil von "Maniac Mansion" & CoHier mal ein kleiner Auszug eines Scripts:
// Wurde das Buch genommen ? Dann zeige es nicht mehr auf dem Bildschirm RegValueIs(3,1), DisableSprite(Buch); // Wenn Spieler das Buch nimmt, setze Register[3] auf Wert 1 OnCommand(Nimm Buch), SetReg(3,1); // Wenn Spieler das Buch nimmt, nimm es ins Inventory auf OnCommand(Nimm Buch), AddInventory(Buch, Buch.bmp); // Wenn Spieler das Buch nimmt, blende es sofort auf dem Bildschirm aus OnCommand(Nimm Buch), DisableSprite(Buch);
Die Syntax ist sehr einfach:
Auslöser(Parameter), Aktion(Parameter);Der 'Register' ist nichts weiter als ein grosses int-Array in dem Zustände hinterlegt werden können. Diese Werte können über die Scripts beliebig manipuliert und abgefragt werden.
Das kann man jetzt nicht unbedingt mit einem Space-Shooter vergleichen
Aber vielleicht hilft es dir ja. Das System wie diese Scripts dann ausgeführt werden ist gar nicht so kompliziert:pseudo
while (bRender) { ScriptsAusfuehren(); ... // Rendern } void ScriptsAusfuehren() { for (int x = 0; x < Befehlssätze; x++) { wenn (Befehl.Ausloeser Bedingung eingetroffen) { Ausführen(Befehl.Aktion); } } }
Die meiste Arbeit mach eigentlich das Implementieren der vielen Script-Aktionen und verschiedenen Auslöser.
Aber wenn du das fertig hast, stehen dir viele schöne Möglichkeiten offen
-
Original erstellt von Cpp_Junky:
**Wenn du das richtig ordentlich machen willst, dann ... Scriptsprache.
..."
**es gibt viele, zur zeit ist LUA der renner, sehr leicht einzubinden!!! die neue version ist draussen, die sprache braucht wenig resourcen, ist superschnell und in der neuen version 5 angäblich auch im OOP-design gut einbindbar.
kannst auch python nehmen, ist sehr verbreitet.
sowas ist auf jedenfall genauso aufwändig (vielleicht weniger) als selber ne scriptsprache zu interpretieren, aber es gibt andere die sich um die pflege der sprache und ihre erweiterung kümmern, was wiederum viel liestung + zeitersparniss bringt.
rapso->greets();
-
Danke für die Antworten. Ich werde mir mal beide Möglichkeiten heute Abend durch den Kopf gehen lassen. Doch eine einfache Skriptsprache hört sich interessant an.