Hallo Community,
wie einige von euch möglicherweise bereits über den Chat oder mein anderes Thema mitbekommen haben, arbeite ich derzeit an einem Spiel, in dem sich zwei Laserstationen bekämpfen sollen, indem sie in einem rundenbasierendem Kampf Spiegel platzieren oder einen Laser feuern.
Damit ihr euch ein genaueres Bild vom Spiel machen könnt ist hier ein Screenshot:
(Rechts oben wird angezeigt, welche Station gerade am Zug ist, auf der linken Seite das Quadrat ist die Auswahlbox, mit der man Spiegel platziert)
Das Spiel als Multiplayer (zwei Spieler an einer Tastatur) funktioniert super, allerdings benötige ich einen Computer-gesteuerten Gegner für den Einzelspielermodus.
Damit dieser COM-Gegner auch sinnvoll handelt habe ich einen Plan der verschiedenen Phasen erstellt:
************************************************************************
Phase1: Angriff (diese Phase funktioniert bereits tadellos)
Wenn die Variable global.Runde, die festlegt welcher Spieler dran ist, auf 2 (blauer COM-gegner) gewechselt wird, spawnt dieser einen unsichtbaren Laser, der an den Spiegeln apprallt wie ein normaler, und somit prüft, ob der COM den menschlichen Spieler mit einem richtigen Laser treffen würde.
Sollte dies der Fall sein, wird ein richtiger Laser gespawnt und die menschliche Laserstation zerstört. Sollte dies allerdings nicht möglich sein, wird die Rundenvariable umgesetzt, sodass Phase2 eingeleitet wird.
************************************************************************
Phase2: Verteidigung (hier kommt das erste Problem)
Durch die Änderung der Rundenvariable wird an der roten, menschlichen Laserstation ein unsichtbarer Laser gespawnt, der somit prüft, ob der menschliche Spieler den COM-Gegner in der nächsten Runde treffen könnte.
Sollte dies nicht der Fall sein, wird Phase 3 eingeleitet, sollte es allerdings der Fall sein, so soll der Weg des Lasers als Pfad gespeichert werden und auf einem zufälligen, freien Platz auf dem Pfad ein Spiegelobjekt erstellt werden, welches den menschlichen Laser davon abhält, den COM zu treffen. Nach platzieren des Spiegels müsste der gespeicherte Pfad natürlich für die nächste Runde gelöscht werden.
Das Problem hierbei ist, dass ich keine Ahnung habe, wie ich den Pfad des unsichtbaren Lasers als solchen abspeichere ( habe bereits path_add() probiert, aber keine möglichkeit festzustellen, ob es diesen auch gespeichert hat, da noch keine interaktion mit dem Pfad erfolgte).
Um jedoch einen zufälligen, freien Punkt auf dem Pfad mit einem Spiegel zu versehen, sollte dieser Code gehn, oder?
Alles anzeigen
************************************************************************
Phase3: Spiegelplatzierung (das letzte Problem)
Sollten die oberen 2 Phasen nicht dazu führen, dass der COM angreift oder einen Spiegel zur Verteidigung setzt, soll in der dritten Runde erneut mit einem unsichtbaren Laser geprüft werden, welchen Pfad der richtige COM-laser einschlagen würde. Dieser Pfad und dessen Endpunkt sollen ebenfalls kurzzeitig gespeichert werden und ein unsichtbarer, zufälliger Spiegel auf dem Pfad an einer freien Stelle platziert werden. Sollte der unsichtbare Spiegel dazu führen, dass der unsichtbare Laser (bei erneutem spawnen) seinen Pfad-endpunkt weniger weit von der gegnerischen Basis entfernt findet, als der Spawn ohne Spiegel, so soll an der Stelle des unsichtbaren Spiegels ein richtiger gespawnt werden. Andernfalls muss ein neuer unsichtbarer Spiegel platziert und ebenfalls geprüft werden.
Ich weiß, dass es sehr viel ist, aber hoffe trotzdem das ihr mir bei diesem Problem helfen könnt
PS: Falls es hilft könnte ich auch den Code posten, den ich bereits geschrieben habe, oder falls das Problem unklar ist, kann ich es noch genauer erklären.
wie einige von euch möglicherweise bereits über den Chat oder mein anderes Thema mitbekommen haben, arbeite ich derzeit an einem Spiel, in dem sich zwei Laserstationen bekämpfen sollen, indem sie in einem rundenbasierendem Kampf Spiegel platzieren oder einen Laser feuern.
Damit ihr euch ein genaueres Bild vom Spiel machen könnt ist hier ein Screenshot:
(Rechts oben wird angezeigt, welche Station gerade am Zug ist, auf der linken Seite das Quadrat ist die Auswahlbox, mit der man Spiegel platziert)
Das Spiel als Multiplayer (zwei Spieler an einer Tastatur) funktioniert super, allerdings benötige ich einen Computer-gesteuerten Gegner für den Einzelspielermodus.
Damit dieser COM-Gegner auch sinnvoll handelt habe ich einen Plan der verschiedenen Phasen erstellt:
************************************************************************
Phase1: Angriff (diese Phase funktioniert bereits tadellos)
Wenn die Variable global.Runde, die festlegt welcher Spieler dran ist, auf 2 (blauer COM-gegner) gewechselt wird, spawnt dieser einen unsichtbaren Laser, der an den Spiegeln apprallt wie ein normaler, und somit prüft, ob der COM den menschlichen Spieler mit einem richtigen Laser treffen würde.
Sollte dies der Fall sein, wird ein richtiger Laser gespawnt und die menschliche Laserstation zerstört. Sollte dies allerdings nicht möglich sein, wird die Rundenvariable umgesetzt, sodass Phase2 eingeleitet wird.
************************************************************************
Phase2: Verteidigung (hier kommt das erste Problem)
Durch die Änderung der Rundenvariable wird an der roten, menschlichen Laserstation ein unsichtbarer Laser gespawnt, der somit prüft, ob der menschliche Spieler den COM-Gegner in der nächsten Runde treffen könnte.
Sollte dies nicht der Fall sein, wird Phase 3 eingeleitet, sollte es allerdings der Fall sein, so soll der Weg des Lasers als Pfad gespeichert werden und auf einem zufälligen, freien Platz auf dem Pfad ein Spiegelobjekt erstellt werden, welches den menschlichen Laser davon abhält, den COM zu treffen. Nach platzieren des Spiegels müsste der gespeicherte Pfad natürlich für die nächste Runde gelöscht werden.
Das Problem hierbei ist, dass ich keine Ahnung habe, wie ich den Pfad des unsichtbaren Lasers als solchen abspeichere ( habe bereits path_add() probiert, aber keine möglichkeit festzustellen, ob es diesen auch gespeichert hat, da noch keine interaktion mit dem Pfad erfolgte).
Um jedoch einen zufälligen, freien Punkt auf dem Pfad mit einem Spiegel zu versehen, sollte dieser Code gehn, oder?
GML-Quellcode
- var gridX, gridY;
- gridX=8+16*irandom(22);
- gridY=8+16*irandom(19);
- while (place_meeting(gridX,gridY,par_gridelement))
- {
- gridX=8+16*irandom(22);
- gridY=8+16*irandom(19);
- }//zufällige Position im Raumgitter, die nicht belegt ist
- if global.Runde=4.31 //4.31 = "wenn der Spieler die COM-Station treffen könnte"
- and place_meeting(gridX,gridY, PFAD1)//hier würde der vom unsichtbaren Laser generierte Pfad benötigt werden
- {
- instance_create(gridX,gridY,SPIEGELOBJEKT)
- }
************************************************************************
Phase3: Spiegelplatzierung (das letzte Problem)
Sollten die oberen 2 Phasen nicht dazu führen, dass der COM angreift oder einen Spiegel zur Verteidigung setzt, soll in der dritten Runde erneut mit einem unsichtbaren Laser geprüft werden, welchen Pfad der richtige COM-laser einschlagen würde. Dieser Pfad und dessen Endpunkt sollen ebenfalls kurzzeitig gespeichert werden und ein unsichtbarer, zufälliger Spiegel auf dem Pfad an einer freien Stelle platziert werden. Sollte der unsichtbare Spiegel dazu führen, dass der unsichtbare Laser (bei erneutem spawnen) seinen Pfad-endpunkt weniger weit von der gegnerischen Basis entfernt findet, als der Spawn ohne Spiegel, so soll an der Stelle des unsichtbaren Spiegels ein richtiger gespawnt werden. Andernfalls muss ein neuer unsichtbarer Spiegel platziert und ebenfalls geprüft werden.
Ich weiß, dass es sehr viel ist, aber hoffe trotzdem das ihr mir bei diesem Problem helfen könnt
PS: Falls es hilft könnte ich auch den Code posten, den ich bereits geschrieben habe, oder falls das Problem unklar ist, kann ich es noch genauer erklären.
Im Internet weiß niemand, dass du ein Truthahn bist.