Mühle im Weltraum
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Mühle im Weltraum
Ich weiß wieder einmal nicht weiter:
Ich versuche gerade ein Mini-Game in mein Adventure einzubauen.
Es geht darum das man auf einem fremden Planeten landen muss. Der ist aber von feindlichen Raumschiffen bewacht.
Das Spielprinzip ist Mühle-mäßig :
Der Spieler kann sein Schiff auf ein jeweils angrenzendes Feld bewegen, dann ist die feindliche Flotte dran und kann ebenfalls ein Schiff (von dreien) bewegen.
Zieht der Spieler auf ein von Feinden besetztes Feld, wird das feindliche Schiff zerstört. Gelingt es dem Feind auf das vom Spieler besetzte Feld zu ziehen ist halt der Spieler tot.
Das Spielfeld sieht so aus (ohne Schiffe und Objekte):
Der Ausgangspunkt für den Spieler ist ganz links...
Mein Problem ist nun das ich es nicht hinkriege die feindlichen Schiffe wirklich sinnvoll zu bewegen. Ich habe das bisher mit Global Ints versucht. Das ist aber so schnell SO unübersichtlich geworden das ich langsam die Nerven verliere.
Jedes Schiff hat einen eigenen Int der angibt an welchem Punkt es sich gerade befindet. Theoretisch, hatte ich mir gedacht, ergibt sich daraus ein Mühle-ähnliches Spiel. Die Gegner agieren halbwegs intelligent und machen es dem Spieler schwer sein Ziel zu erreichen.
Aber schon nach dem 3. oder 4. Spielzug hab ich dermaßen die Übersicht verloren das ich einfach nicht mehr weiter weiß.
Ich hab mich so sehr in den verschiedenen "if´s" verheddert das ich im Moment gar nicht mehr durchblicke.
Gibt es nicht eine elegante Möglichkeit das zu lösen?
Wenn sich jemand mit den nötigen Script-Kenntnissen bereit findet mir da raus zu helfen, kann ich gerne auch den entsprechenden Raum mal zur besseren Ansicht rüberschicken.
Im Moment kann man allerdings nur die jeweils angrenzenden Punkte ansteuern, sonst tut sich da nicht viel...
Ich versuche gerade ein Mini-Game in mein Adventure einzubauen.
Es geht darum das man auf einem fremden Planeten landen muss. Der ist aber von feindlichen Raumschiffen bewacht.
Das Spielprinzip ist Mühle-mäßig :
Der Spieler kann sein Schiff auf ein jeweils angrenzendes Feld bewegen, dann ist die feindliche Flotte dran und kann ebenfalls ein Schiff (von dreien) bewegen.
Zieht der Spieler auf ein von Feinden besetztes Feld, wird das feindliche Schiff zerstört. Gelingt es dem Feind auf das vom Spieler besetzte Feld zu ziehen ist halt der Spieler tot.
Das Spielfeld sieht so aus (ohne Schiffe und Objekte):
Der Ausgangspunkt für den Spieler ist ganz links...
Mein Problem ist nun das ich es nicht hinkriege die feindlichen Schiffe wirklich sinnvoll zu bewegen. Ich habe das bisher mit Global Ints versucht. Das ist aber so schnell SO unübersichtlich geworden das ich langsam die Nerven verliere.
Jedes Schiff hat einen eigenen Int der angibt an welchem Punkt es sich gerade befindet. Theoretisch, hatte ich mir gedacht, ergibt sich daraus ein Mühle-ähnliches Spiel. Die Gegner agieren halbwegs intelligent und machen es dem Spieler schwer sein Ziel zu erreichen.
Aber schon nach dem 3. oder 4. Spielzug hab ich dermaßen die Übersicht verloren das ich einfach nicht mehr weiter weiß.
Ich hab mich so sehr in den verschiedenen "if´s" verheddert das ich im Moment gar nicht mehr durchblicke.
Gibt es nicht eine elegante Möglichkeit das zu lösen?
Wenn sich jemand mit den nötigen Script-Kenntnissen bereit findet mir da raus zu helfen, kann ich gerne auch den entsprechenden Raum mal zur besseren Ansicht rüberschicken.
Im Moment kann man allerdings nur die jeweils angrenzenden Punkte ansteuern, sonst tut sich da nicht viel...
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du musst erst mal Struktur reinbringen.
Dann musst Du Dir Funktionen schreiben, die die für die KI notwendigen Werte zurückliefern.
Nur eine kleine Warnung: es wird schwer =)
Code: Alles auswählen
// header
struct data {
int wp[6];
int s; // -1: spieler, 0: leer: 1-3: feindliches Schiff
}
// raumskript
data wp[30];
function wegPunkte(w, w1, w2, w3, w4, w5) {
wp[w].wp[1]=w1;
wp[w].wp[2]=w2;
wp[w].wp[3]=w3;
wp[w].wp[4]=w4;
wp[w].wp[5]=w5;
}
function initWegPunkte() { // angrenzende Punkte setzen
wegPunkte(1, 2, 3, 0, 0, 0);
wegPunkte(2, 1, 7, 8, 9, 0);
// usw...
}
Nur eine kleine Warnung: es wird schwer =)
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Ich habe mich jetzt vorerst doch gegen die KI entschieden und habe das ganze etwas umgestrickt.
Hat mit Mühle eigentlich nüscht mehr zu tun...
Dadurch verhalten sich die Gegner jetzt zwar manchmal doof wie Brot, sind aber nicht minder gefährlich
Ich hab jetzt nur folgendes Problem:
Ich möchte eine Art Kollisionsabfrage einbauen.
Wenn Global Int X und Global INT Y gleich sind, soll was schlimmes passieren. Im Tutorial hab ich nichts gefunden, habe da nach "equal" und ähnlichem gesucht.
Meine Funktion im Room Repeatedly Execute sieht so aus :
if (GetGlobalInt(15) == (GetGlobalInt(16)) {
character[STOL].LockView(35);
character[STOL].Animate(0, 3, 0, eBlock, eForwards);
character[STOL].UnlockView();
character[STOL].ChangeRoom(8);
}
Fehlermeldung dazu ist:
end of input reached in middle of expression
Ich hatte schon fast damit gerechnet das es so nicht geht.
Weiß jemand wie ich zwei Ints mit einander vergleichen kann?
P.S.
Die IsCharCollidingwith...Geschichte hab ich auch angetestet, aber die scheint mir zu ungenau für diesen Zweck zu sein. Man kann ja zwar einstellen wie sensibel das reagiert, aber irgendwie gibbet sehr merkwürdige Effekte wenn ich das auf diesem Weg versuche...z.B. passiert eigentlich gar nichts wenn zwei Charaktere sich treffen, obwohl sie die selben Koordinaten einnehmen ?! ...
Manchmal klappt es dann aber auch...ziemlich unberechenbar...
Hat mit Mühle eigentlich nüscht mehr zu tun...
Dadurch verhalten sich die Gegner jetzt zwar manchmal doof wie Brot, sind aber nicht minder gefährlich
Ich hab jetzt nur folgendes Problem:
Ich möchte eine Art Kollisionsabfrage einbauen.
Wenn Global Int X und Global INT Y gleich sind, soll was schlimmes passieren. Im Tutorial hab ich nichts gefunden, habe da nach "equal" und ähnlichem gesucht.
Meine Funktion im Room Repeatedly Execute sieht so aus :
if (GetGlobalInt(15) == (GetGlobalInt(16)) {
character[STOL].LockView(35);
character[STOL].Animate(0, 3, 0, eBlock, eForwards);
character[STOL].UnlockView();
character[STOL].ChangeRoom(8);
}
Fehlermeldung dazu ist:
end of input reached in middle of expression
Ich hatte schon fast damit gerechnet das es so nicht geht.
Weiß jemand wie ich zwei Ints mit einander vergleichen kann?
P.S.
Die IsCharCollidingwith...Geschichte hab ich auch angetestet, aber die scheint mir zu ungenau für diesen Zweck zu sein. Man kann ja zwar einstellen wie sensibel das reagiert, aber irgendwie gibbet sehr merkwürdige Effekte wenn ich das auf diesem Weg versuche...z.B. passiert eigentlich gar nichts wenn zwei Charaktere sich treffen, obwohl sie die selben Koordinaten einnehmen ?! ...
Manchmal klappt es dann aber auch...ziemlich unberechenbar...
- Rocco
- Adventure-Treff
- Beiträge: 1019
- Registriert: 25.11.2003, 16:20
- Wohnort: Ronville
- Kontaktdaten:
also diese meldung rührt eindeutig von einem klammerfehler.falko-diekmann hat geschrieben:
if (GetGlobalInt(15) == (GetGlobalInt(16))
Fehlermeldung dazu ist:
end of input reached in middle of expression
ich denke schon das es prinzipiell so funktioniert, aber mit einer klammer weniger:
if (GetGlobalInt(15) == GetGlobalInt(16))
versuchs mal so
- Floyd
- Logik-Lord
- Beiträge: 1088
- Registriert: 14.03.2004, 19:59
Noch zu deinem Minispiel:
Mit AGS habe ich zwar noch keine KI geschrieben, die generelle Realisierung des Spiels inklusive KI stelle ich mir in diesem Fall aber nicht soo schwer vor, da die Möglichkeiten zum einen doch relativ begrenzt sind und das Programm ja auch nicht perfekt agieren muss.
Eine andere Frage ist, ob dein Spiel überhaupt funktionieren würde, für mich sieht es nämlich eher so aus, als würde bereits nach relativ kurzer Zeit eine Pattsituation entstehen bzw. als könnte der Spieler gar nicht gewinnen.
Mit AGS habe ich zwar noch keine KI geschrieben, die generelle Realisierung des Spiels inklusive KI stelle ich mir in diesem Fall aber nicht soo schwer vor, da die Möglichkeiten zum einen doch relativ begrenzt sind und das Programm ja auch nicht perfekt agieren muss.
Eine andere Frage ist, ob dein Spiel überhaupt funktionieren würde, für mich sieht es nämlich eher so aus, als würde bereits nach relativ kurzer Zeit eine Pattsituation entstehen bzw. als könnte der Spieler gar nicht gewinnen.
Der verschwundene Husky - ein 2D Point&Click Adventure
Einen schönen Orbit, Bürger!
Einen schönen Orbit, Bürger!
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Hm?Rocco hat geschrieben:ich denke schon das es prinzipiell so funktioniert, aber mit einer klammer weniger:falko-diekmann hat geschrieben:
if (GetGlobalInt(15) == (GetGlobalInt(16))
if (GetGlobalInt(15) == GetGlobalInt(16))
versuchs mal so
Da sind doch genau so viele Klammern drin wie bei mir?
Oder bekomme ich Augenkrebs?!
Ne, ich habe schon versucht...moment...jetzt seh ich grad...das ist ja doch eine Klammer weniger...Naja...ist halt schon spät geworden (oder ich hab wirklich Augenkrebs)
Das werde ich gleich mal ausprobieren, danke für den Hinweis.
@Floyd
Sowas ähnliches habe ich zuerst auch befürchtet, weil die Spielfeleder recht willkürlich angeordnet sind.
Ich hab´s aber inzwischen "am laufen" bekommen (bis auf die Kollisionsabfrage halt), ich hab das jetzt ein paar Mal getestet und es gibt aber eine Möglichkeit da durch zu kommen. Allerdings wohl wirklich nur EINE
Ich hab sogar noch einen 4. Gegner reingebastelt weil es sonst zu leicht gewesen wäre, zu viele Lücken zum durchschlüpfen
Die Gegner bewegen sich jetzt anhand einer festgelegten Route, können also nicht drauf reagieren wenn der Spieler auf dem angrenzenden Feld ist. Es ist also auch ein bißchen Glück dabei, ob der entsprechende Punkt nun in der Route als nächstes dran ist oder nicht.
Was die Sache etwas leichter macht ist aber, das die Gegner nicht auf das Feld zurück können, was sie einen Zug vorher besetzt hatten. Das lässt den Spieler besser planen.
So wie es jetzt läuft finde ich es wirklich schwer genug, da brauche ich wahrscheinlich keine KI. Davon abgesehen das ich die wahrscheinlich eh nicht hinbekommen hätte
Dafür reicht´s Wissen noch nicht aus.
Bevor dieses Mini-Spiel kommt, hat der Spieler aber die Wahl ob er sich damit befassen will; es gibt auch noch 2 etwas einfachere Wege den Planeten zu erreichen. (Ein einziger Lösungsweg ist ja doch schon etwas hart ).
Danke für die Hinweise aber nochmal allgemein...
Ohne das Forum wär man ja doch schon ziemlich aufgeschmissen
EDIT:
Das mit der Klammer stimmt! Jetzt läuft es! Hurra Hirro!
Ich hab zwar selber schon versucht nen paar Klammern weg zu lassen, aber natürlich immer nur die falschen...
Wunderbar
Jetzt kann ich mich endlich wieder anderen Dingen widmen
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten:
Maximale Anzahl von Ints?
Mal was anderes:
Weiß jemand ob es eine maximale Anzahl von Global Ints gibt die man verwenden kann?
Macht das Programm ab einer bestimmten Anzahl Mucken, oder ist das nach oben unbegrenzt?
Weiß jemand ob es eine maximale Anzahl von Global Ints gibt die man verwenden kann?
Macht das Programm ab einer bestimmten Anzahl Mucken, oder ist das nach oben unbegrenzt?
- Sinitrena
- Tastatursteuerer
- Beiträge: 678
- Registriert: 08.05.2004, 01:01
- Wohnort: Frankfurt
- Kontaktdaten:
Code: Alles auswählen
500 script GlobalInts
50 script GlobalStrings
100 interaction editor global variables
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
- falko-diekmann
- Verpackungs-Wegwerfer
- Beiträge: 91
- Registriert: 01.11.2005, 15:31
- Wohnort: Dortmund
- Kontaktdaten: