Erstellen von Puzzlespielen mit Puzzleskript

Puzzle Script ist eine minimalistische Spiel-Engine zum Erstellen von Puzzles für HTML5. Sie verfügt über Open Source. Beispiele für vorgefertigte Spiele finden Sie hier .

Teil 1. Wir erstellen das erste Spiel auf Puzzle Script.


Puzzle Script ist ein kostenloses Online-Programm, mit dem Puzzlespiele erstellt werden. Sie ist am besten dafür bekannt, Block-Puzzles wie mein The Nodus zu erstellen. In diesem Teil werden wir ein Spiel erstellen, nachdem wir die Grundfunktionen von Puzzle Script studiert haben, und im nächsten werden wir mit der Programmierung beginnen.


Gehen Sie zur Engine- Website . Klicken Sie auf Spiel erstellen , um den Puzzleskript-Editor zu öffnen.

Beispiele herunterladen


Schauen wir uns zunächst einige Beispiele an. Öffnen Sie oben auf dem Bildschirm die Liste „Ladebeispiel“ und wählen Sie das erste Beispiel mit dem Namen „Basic“ aus. Klicken Sie nun auf "Ausführen".



Der Spielbildschirm wird angezeigt. Klicken Sie in das Fenster und drücken Sie die Eingabetaste auf der Tastatur.


Versuche das Spiel zu spielen. Ihr Ziel ist es, die orangefarbenen Kästchen auf die schwarzen Zielfelder zu schieben. Wenn sich auf jedem Ziel ein Kästchen befindet, wird das Level bestanden. Sie können Z drücken, um die Bewegung abzubrechen, oder R, um das Level neu zu starten.

Mach das erste Spiel


Jetzt werden wir mehrere Ebenen erstellen. Ich werde zusammen mit Ihnen eine erstellen, und ich rate anderen, meine eigenen zu entwickeln. Klicken Sie im oberen Menü auf "Level Editor".


Wenn Sie den Level-Editor-Bildschirm nicht sehen, klicken Sie auf "Ausführen" und starten Sie das Spiel. Sobald Sie sich auf der Ebene befinden, klicken Sie erneut auf die Schaltfläche „Ebeneneditor“. Auf diese Weise können Sie die Ebene bearbeiten, auf der Sie gerade waren.

Erstelle ein neues Level


Oben sind die Spielobjekte. Wenn Sie mit der linken Maustaste klicken, wird das ausgewählte Objekt gezeichnet. Rechtsklick zeichnet ein "Hintergrund" -Objekt. Wenn Sie mit der linken Maustaste auf den Rand der Karte klicken, wird die Karte vergrößert, durch Klicken mit der rechten Maustaste wird sie verkleinert.


Um ein Level zu bestehen, müssen Sie jedem der Ziele ein Kästchen hinzufügen. Auf jedem Level sollte es also ein Minimum geben:

  • 1 Box
  • 1 Tor
  • 1 Spieler

Klicken Sie mit der rechten Maustaste, um alles in Gras zu verwandeln. Klicken Sie dann mit der linken Maustaste auf den Rand des Levels, um ihn zu vergrößern, und zeichnen Sie schließlich einen Level, der dem unten gezeigten ähnelt.


Fügen Sie es der Liste der Ebenen hinzu.


Nachdem Sie die Ebene erstellt haben, fügen wir sie der Liste der Ebenen hinzu. Klicken Sie im Level-Editor auf den weißen Buchstaben S neben der Liste der Spielobjekte, um das erstellte Level zu speichern.


Unter dem Ebeneneditor sollte eine Meldung über eine erfolgreiche Kompilierung und ein Raster mit lustigen Zeichen angezeigt werden (siehe Abbildung unten).


Diese lustigen Charaktere zeigen das Level an, das wir gerade erstellt haben. Jedes Zeichen repräsentiert ein separates Objekt. Gehe auf der linken Seite des Bildschirms nach unten und finde LEGENDE. Die Legende enthält eine Erklärung der einzelnen Charaktere:

. = Hintergrund
# = Wand
P = Spieler
* = Kiste
@ = Kiste und Ziel
O = Ziel

Alles, was sich auf der linken Seite des Bildschirms befindet, ist der Spielcode, der in verschiedene Teile wie OBJEKTE oder LEGENDE unterteilt ist. Gehe runter zu LEVELS. Hier sehen wir die Ebenen, die im Beispiel verwendet werden.


Um eine neue Ebene hinzuzufügen, erstellen Sie eine neue leere Zeile am unteren Rand des Ebenenabschnitts. Kopieren Sie dann die für unser Level generierten Zeichen und fügen Sie sie dort ein. Alle Level hinzugefügt.


Wir werden es testen. Nachdem Sie ein neues Level erstellt haben, müssen Sie erneut auf die Schaltfläche "Ausführen" oben auf dem Bildschirm klicken, um das Spiel mit einem neuen Level neu zu starten. Manchmal funktioniert dies nicht, und dann müssen Sie auf die Schaltfläche "Neu erstellen" und dann erneut auf "Ausführen" klicken.

Spiel speichern und laden


Versuchen Sie, weitere neue Ebenen zu erstellen. Wenn Sie bereit sind, das Spiel zu speichern, gehen Sie zum Anfang des Codes und geben Sie Ihren eigenen Namen, den Namen des Autors und die Startseite ein. Klicken Sie dann auf die Schaltfläche "Speichern".



Eine begrenzte Anzahl von Speicherungen wird im Menü „Laden“ auf Ihrem Computer gespeichert. Am oberen Bildschirmrand befindet sich jedoch die Schaltfläche „Teilen“. Wenn Sie darauf klicken, wird eine Nachricht mit zwei Weblinks generiert.


Einer der Links ist der Quellcode Ihres Projekts. Der zweite ist ein Link zu einer spielbaren Version des Spiels, die Sie mit Freunden teilen können. Ich empfehle, regelmäßig einen neuen Link zum Quellcode zu erstellen und in einem Textdokument zu speichern, damit Sie eine dauerhaft gespeicherte Version des Projekts haben.

Spielexport


Sie können das Spiel auch als HTML5-Datei exportieren, die Sie dann in Spielportale wie itch.io , Kongregate oder Newgrounds hochladen können. Klicken Sie einfach auf "Exportieren" und laden Sie die heruntergeladene HTML-Datei in das Spielportal hoch.

Unser Beispielprojekt finden Sie hier .

Teil 2. Erste Schritte in Puzzle Script


In diesem Teil erfahren Sie, wie Sie mit dem Programmieren in Puzzle Script beginnen .


Code


Öffnen Sie ein Beispielprojekt . Der Programmcode befindet sich auf der linken Seite des Bildschirms und ist in Teile unterteilt: Objekte, Legende, Sounds usw. Im Abschnitt Regeln werden die Regeln für die Interaktion zwischen Objekten festgelegt. Geh hinein. Es sollte nur eine Codezeile geben:

[ > Player | Crate ] -> [ > Player | > Crate ]

Diese Linie bedeutet, dass wenn sich der Spieler in der Nähe der Box befindet und sich in seine Richtung bewegt, das Spiel den Spieler bewegt und die Box drückt. Um zu erklären, wie dies funktioniert, müssen Sie verstehen, dass der Puzzle-Skript-Code dieser Struktur folgt:

[ ] -> [ ]

Dies bedeutet Folgendes:

[ ] -> [ ]

Das Puzzleskript überprüft die Bedingungen links vom Pfeil, z. B. ob sich das Objekt des Spielers neben dem Boxobjekt befindet. Wenn die Bedingung erfüllt ist, tun wir etwas, zum Beispiel drücken wir die Box.

Beispiele für Bedingungen


Hier ist ein Beispiel für eine Bedingung:

[ object1 | object2 ]

Dieses Ereignis prüft, ob sich Objekt1 neben Objekt2 befindet. Sie können überprüfen, ob zwei Objekte nebeneinander liegen, indem Sie eine | | durch Drücken von Umschalt + \ eingegeben. Die Bedingungen sind immer in [ ] .

[ crate | crate ]

Der obige Code prüft, ob zwei Kästchen nebeneinander liegen.

[ crate | crate | crate ]

Diese Bedingung prüft, ob drei Kästchen in der Nähe sind.

[ crate target ]

Diese Bedingung prüft, ob sich das Feld über dem Ziel befindet, da die | | zwischen zwei Objekten. Objekte können übereinander liegen, wenn sie sich in verschiedenen Kollisionsebenen befinden. Dies wird in den folgenden Abschnitten des Lernprogramms behandelt.

Wir halten Gleichheit


Die Regeln müssen ausgewogen sein. Sowohl die Zustandsprüfung als auch das darauf folgende Ereignis sollten auf dieselbe Weise beschrieben werden. Ich werde zeigen, was das bedeutet.

[ player | crate ] -> [ player | ]

Diese Codezeile zerstört die Box, wenn sich der Spieler daneben befindet. Sie können nicht schreiben:

[ player | crate ] -> [ player ]

weil die Bedingung auf der linken Seite das Vorhandensein benachbarter Objekte in zwei separaten Rasterbereichen überprüft, das Ereignis jedoch nur einen Rasterbereich beschreibt, den der Spieler belegt. Puzzle Script muss wissen, was mit den überprüften Leerzeichen zu tun ist. Der richtige Code zum Zerstören der Box sollte Folgendes melden:

[ | ] -> [ | ]

[ player | crate ] -> [ player | ]

Das heißt, auch leere Stellen im Code sind wichtig. Der folgende Eintrag ist jedoch gültig:

[ player target ] -> [ player ]

Da es sich bei der Bedingung nur um einen Rasterraum handelt, beschreibt das Ereignis denselben Rasterraum.

Wie man Kisten bewegt


Kehren wir zur ursprünglichen Codezeile zurück.

[ > Player | Crate ] -> [ > Player | > Crate ]

Mit anderen Worten:

[ | ] -> [ | ]

Pfeil> betont die Bewegung.

Manchmal müssen wir Kommentare schreiben, um uns daran zu erinnern, was der Code tut. Puzzle Script ignoriert Kommentare - sie sind nur für den Benutzer. Um einen Kommentar zu schreiben, müssen Sie den Text in Klammern setzen. Wir schreiben einen Kommentar zu unserer Regel, der beschreibt, was sie tut:

( )
[ > Player | Crate ] -> [ > Player | > Crate ]

Schreiben Sie nun unter dem Box-Push-Code Folgendes:

( )
[ < Player | Crate ] -> [ < Player | < Crate ]

Der umgekehrte Pfeil bedeutet, dass der Spieler die Box zieht, wenn er sich von der Box entfernt. Klicken Sie auf "Ausführen", um diese Aktion zu testen. Sie sollten in der Lage sein, Boxen zu verschieben und zu ziehen. Selbst bei einem Tippfehler in einem Buchstaben kann der Computer beim Programmieren den Code möglicherweise nicht verstehen. Beseitigen Sie daher alle Fehler. Wenn Sie Änderungen am Code vornehmen, klicken Sie erneut auf "Ausführen", um die Änderungen herunterzuladen. Wenn sich das Spiel nicht so verhält, wie es sollte, klicken Sie auf "Neu erstellen", um den Speicher des Programms zu löschen, und klicken Sie dann auf "Ausführen".

Manchmal ist es notwendig, eine Codezeile zu deaktivieren. Verwandeln Sie es einfach in einen Kommentar, um ihn für die Zukunft zu speichern. Lassen Sie uns den Code zum Schieben von Kisten auskommentieren, damit der Spieler nur Kisten tragen kann:

( )
([ > Player | Crate ] -> [ > Player | > Crate ])
( )
[ < Player | Crate ] -> [ < Player | < Crate ]

Wenn dies funktioniert hat, kommentieren Sie den Code zum Ziehen der Kästchen aus und versuchen Sie Folgendes:

[ < Player | Crate ] -> [ < Player | > Crate ]

Wenn sich der Spieler von der Box entfernt, bewegen sich der Spieler und die Box in entgegengesetzte Richtungen. Die Pfeile bestimmen, in welche Richtung sich das Objekt bewegt oder bewegen wird. Kommentieren Sie dies jetzt aus und versuchen Sie Folgendes:

[ > Player | Crate ] -> [ Player | > Crate ]

Die Box bewegt sich, aber der Spieler bleibt an Ort und Stelle. Experimentieren Sie mit ^ und v (Buchstabe v), um zu sehen, wie sich die Objekte bewegen.

Fehler


Lassen Sie uns absichtlich die falsche Regel schreiben und sehen, was passiert. Geben Sie die folgende Zeile ein:

[ < Player | Crate ] -> [ < Player ]

Versuchen Sie, das Programm auszuführen. Sie sollten eine Nachricht wie diese sehen:

Zeile 81: In der Regel muss jedes Muster, das links übereinstimmt, rechts ein entsprechendes Muster gleicher Länge (Anzahl der Zellen) haben.

Normalerweise beschreibt Puzzle Script den Fehler sehr gut. Manchmal irrt sich Puzzle Script jedoch von selbst. In solchen Fällen müssen Sie den Code selbst durchgehen und herausfinden, wo der Fehler liegt.

Noch ein paar Experimente


Versuchen Sie zu experimentieren und schreiben Sie die Regeln selbst. Hier sind einige Beispiele.

[ > Player | … | Crate ] -> [ > Player | … | > Crate ]

Im obigen Beispiel drückt der Spieler die Box, wenn sie sich irgendwo auf derselben Linie des Levels befinden, und der Spieler bewegt sich zur Box.

[ > Player | Crate ] -> [ Crate | Player ]

Dieser Code tauscht den Player und die Box aus.

[ > Player | Crate ] -> [ Player | Target ]

Wenn sich der Spieler in diesem Code in der Nähe der Box befindet und sich darauf zubewegt, hört der Spieler auf, sich zu bewegen, aber die Box wird zu einem Ziel. Das Beste an Puzzle Script ist die einfache Erstellung neuer Dinge und die Möglichkeit zum Experimentieren.

Teil 3. Objekte erstellen


Alle Grafikfragmente in Spielen auf Puzzle Script zeigen Objekte an. Um Spiele mit Puzzle Script zu erstellen, müssen Sie Ihre eigenen Objekte erstellen. In diesem Teil werde ich Ihnen erklären, wie Sie sie erstellen und meinem Code hinzufügen.


Allgemeine Informationen


Öffnen Sie ein Beispielprojekt . Das Erstellen eines Objekts besteht aus den folgenden Schritten:

  • Erstellen Sie es in der Liste der Objekte
  • Hinzufügen eines Elements zu einer Legende
  • Hinzufügen von Kollisionen zu einer Ebene

Nachdem Sie alle diese Schritte ausgeführt haben, können Sie das Objekt verwenden.

Objekterstellung


Es sind bereits mehrere Objekte vorhanden. Jedes Spiel muss ein Hintergrundobjekt haben. Alle Objekte werden aus einem 5 x 5 Pixel großen Raster erstellt und haben mindestens eine Farbe. Das Hintergrundobjekt ist unten dargestellt.

Background
LIGHTGREEN GREEN
11111
01111
11101
11111
10111

Zahlen geben Pixel im Bild an. Jede Zahl entspricht ihrer Farbe. Die erste Farbe hat die Nummer 0, die zweite - 1 usw. bis zu 9. Es können bis zu zehn Farben vorhanden sein. In unserem Fall färbt jede 1 das Pixel hellgrün (hellgrün) und 0 - grün (grün). Das Ergebnis sieht folgendermaßen aus:


Objekte werden immer wie folgt erstellt:

  • Titel
  • Farben
  • Bild

Der Name steht immer in der obersten Zeile. Die Farben befinden sich immer in der zweiten Zeile, und das Bild besteht aus den nächsten 5 Zeilen, 5 Zeichen pro Zeile, die ein 5 x 5-Raster bilden. Oder Sie können Folgendes tun:

Background
LIGHTGREEN

Dieser Code erstellt ein Objekt namens "Hintergrund", bei dem es sich um ein hellgrünes 5 x 5-Pixel-Raster handelt. Wenn Sie das Bildraster nicht beschreiben, erhalten wir einen einfarbigen Block, der manchmal nützlich sein kann.

Geben Sie Objekten Namen


Objekte können beliebig aufgerufen werden, der Name darf jedoch nicht mit einem Symbol beginnen und muss ein einzelnes Wort ohne Leerzeichen sein. Geben Sie den Objekten klare Namen, aber gehen Sie nicht zu weit. PlayerStill ist ein guter Name, PlayerThatIsStandingStill ist zu lang und ausführlich.

Farben


Sie müssen die Farben deklarieren, die Sie für das Objekt verwenden möchten, und sie durch ein Leerzeichen trennen. Puzzle Script hat vordefinierte Farben:

  • schwarz
  • weiß
  • grau
  • dunkelgrau
  • hellgrau
  • grau
  • dunkelgrau
  • hellgrau
  • rot
  • dunkelrot
  • leicht gemacht
  • braun
  • dunkelbraun
  • hellbraun
  • orange
  • gelb
  • grün
  • dunkelgrün
  • hellgrün
  • blau
  • hellblau
  • dunkelblau
  • lila
  • rosa
  • transparent

Sie können Farben auch hexadezimal einstellen, wodurch wir eine viel größere Auswahl an Farben erhalten. Sie können Websites wie diese verwenden , um hexadezimale Farben auszuwählen. Wählen Sie die gewünschte Farbe aus und schreiben Sie den Farbcode über dem Bild neu. Hexadezimale Farbcodes werden wie folgt in Puzzle Script geschrieben:


#51A2BD #ff0000 #ffffff

Vor dem Farbcode steht immer das Zeichen #.

Fügen Sie der Legende ein Objekt hinzu


Nachdem Sie das Objekt erstellt haben, müssen Sie es der Legende hinzufügen. Die Legende sieht so aus:

. = Background
# = Wall
P = Player
* = Crate
@ = Crate and Target
O = Target

Jedes Symbol repräsentiert ein Objekt in einer Ebene. Das heißt, wenn wir ein solches Zeichenraster sehen:

#p.*.##
#.**.##
#..#..#
##....#
##...o#
#######

es beschreibt tatsächlich unser Niveau:


Jedem erstellten Objekt muss ein Buchstabe, ein Symbol oder eine Zahl zugewiesen werden, die dieses Objekt auf der Ebene kennzeichnet. So:

P = player

Gruppieren Sie Objekte in der Legende


Wir können auch Gruppen von Objekten in der Legende erstellen. Wenn wir beispielsweise mehrere mehrfarbige Kästchen haben, können wir dies tun:

O = OrangeCrate
B = BlueCrate
G = GreenCrate

Dadurch können wir Felder in der Editor-Ebene verwenden. Um den Code zu erstellen, können Sie sie wie folgt in Legend gruppieren:

Crates = OrangeCrate or GreenCrate or BlueCrate

Und alles in allem wird es so aussehen:

=======
LEGEND
=======
O = OrangeCrate
B = BlueCrate
G = GreenCrate

Crates = OrangeCrate or GreenCrate or BlueCrate

Warum das? Denn dann anstatt solche Regeln zu erstellen:

[ > Player | OrangeCrate ] -> [ > Player | > OrangeCrate ]
[ > Player | BlueCrate] -> [ > Player | > BlueCrate ]
[ > Player | GreenCrate] -> [ > Player | > GreenCrate]

Sie können einfach schreiben:

[ > Player | Crates ] -> [ > Player | > Crates ]

Und dieser Code funktioniert für die gesamte Gruppe von Objekten.

Darüber hinaus können Sie im Abschnitt Kollisionsebenen auf die Ebene verweisen, in der sich die Gruppe befindet, anstatt jedes einzelne Objekt einzugeben.

Kollisionsschichten


Standardmäßig lautet der Abschnitt der Kollisionsschicht wie folgt:

Background
Target
Player, Wall, Crate

Jede Zeile wählt Objekte in einer eigenen Ebene aus. Die Reihenfolge der Objektebenen bestimmt, welche Objekte über anderen liegen. Die Objekte in der oberen Zeile befinden sich in der unteren Ebene, die nächste Zeile in der darüber liegenden Ebene usw. Der Hintergrund sollte sich immer in der obersten Zeile befinden, um sich in der untersten Ebene zu befinden. Objekte in einer Ebene können nicht übereinander liegen. Das heißt, das kann nicht sein:

[ player wall ] -> [ player wall ]

Sie können Objekte in verschiedenen Ebenen miteinander interagieren lassen. Zum Beispiel können Sie schreiben:

[ > Player | Target ] -> [ > Player | > Target ]

Ein Experiment


Erstellen Sie einige neue Objekte. Erstellen Sie eine Art von Feldern, die Sie nur verschieben können. Erstellen Sie ein weiteres Feld, das nur gezogen werden kann. Erstellen Sie ein Feld, das beim Berühren verschwindet. Wenn Sie die Experimente fortsetzen, werden Sie sich besser daran erinnern, wie alles gemacht wird.

Teil 4. Siegbedingungen


Jeder liebt es zu gewinnen. Wir als Spieler wollen gewinnen. In diesem Teil lernen wir, wie man die Bedingungen für den Gewinn eines Spiels programmiert.

Siegbedingungen


Laden Sie das Beispielprojekt herunter und gehen Sie zum Abschnitt Code für die Gewinnbedingungen. Sie sollten Folgendes sehen:

All Target on Crate

Das Spiel ist gewonnen, wenn sich auf jedem Tor ein Kästchen befindet. Wenn Sie 3 Boxen und 2 Tore haben, gewinnen Sie, indem Sie nur 2 Boxen auf die Tore setzen. Beim Tauschen:

All crate on target

dann muss jede Box am Ziel sein.

Es kann eine oder mehrere Bedingungen geben. Bei mehreren Bedingungen müssen alle erfüllt sein. Zum Beispiel können wir Folgendes haben:

All Target on Crate
All Target2 on Crate2

Wenn das Level Ziel und Ziel2 hat, dann Kiste und Kiste2. Wenn auf der Ebene keines der Objekte vorhanden ist, die zur Erfüllung einer bestimmten Siegbedingung erforderlich sind, z. B. kein Ziel2, wird diese Bedingung automatisch erfüllt.

Verschiedene Arten von Siegbedingungen


Es gibt verschiedene Arten von Siegbedingungen.

No Object

In diesem Fall kommt der Sieg, wenn es auf der Ebene kein solches Objekt gibt.

Some Object

Sie gewinnen, wenn sich mindestens ein Objekt des angegebenen Typs auf der Ebene befindet.

Some Object1 on Object2

Mindestens eines der Objekte von Object1 muss sich auf Object2 befinden.

No Object1 On Object2

Diese Bedingung ist das Gegenteil von All Target on Crate . In diesem Fall müssen alle diese Objekte voneinander getrennt und nicht übereinander liegen. Sie können auch verschiedene Siegbedingungen miteinander kombinieren.

Ein Experiment


Wir werden mit verschiedenen Siegbedingungen experimentieren. Versuchen Sie, ein Spiel zu erstellen, in dem der Gewinn erzielt wird, wenn nicht alle Felder im Ziel sind. Oder machen Sie ein Spiel, in dem Sie alle Boxen eines bestimmten Typs zerstören müssen, aber es gibt andere Push-Boxen auf Ihrem Weg.

Mein abgeschlossenes Beispielprojekt kann hier eingesehen werden .

Teil 5. Verspäteter Befehl


PuzzleScript hat einen sehr nützlichen Befehl namens "late". Die Reihenfolge der Herkunft der Ereignisse im Spiel ist wichtig, und manchmal benötigen Sie einen Code, der später ausgeführt wird, um die gewünschten Ergebnisse zu erzielen. In diesem Teil werde ich über die Verwendung des späten Befehls sprechen.

Warum brauchen wir es?


Öffne ein Beispielprojekt , füge den folgenden Code in das Spiel ein und führe es aus:

[ player | target ] -> [ player | ]

Es ist zu erwarten, dass das Tor zerstört wird, sobald der Spieler neben dem Tor steht. Dies geschieht jedoch nicht. Stattdessen verschwindet das Ziel im Kurs, nachdem der Spieler daneben steht. Versuchen Sie es mit einem anderen Code:

late [ player | target ] -> [ player | ]

Sobald Sie neben dem Ziel stehen, verschwindet es. Dies geschah, weil alles, was als spät bezeichnet wurde, passiert, nachdem der gesamte Rest des Codes ausgeführt wurde. Manchmal ist das notwendig.

Reihenfolge der Ereignisse


So wird der Code in Puzzle Script bei jeder Bewegung ausgeführt.

  1. Puzzle Script entdeckt, dass der Spieler sich bewegen möchte
  2. Wann immer möglich, werden Regeln von oben nach unten gelesen und ausgeführt.
  3. Spieler bewegt sich wenn möglich
  4. Es gelten späte Regeln

Der Computer beginnt in der obersten Codezeile und liest zeilenweise nach. Überprüfung jeder Bedingung. Wenn Sie also versuchen, sich zu bewegen, liest Puzzle Script alle Regeln und prüft, ob die Bedingungen erfüllt sind, und wenn ja, tut es etwas. Zum Beispiel könnte die erste Zeile folgendermaßen aussehen:

[ player | spikeTrap ] -> [ | spikeTrap ]

Wenn der Spieler nicht neben der Einsatzfalle steht, setzt der Code die Ausführung fort. Dies bedeutet, dass die Reihenfolge des Schreibens von Codezeilen wichtig ist. In einigen Fällen können Sie den Befehl late verwenden, den Sie im Laufe der Zeit in der Praxis lernen werden.

Möglichkeiten, Late in der Praxis zu verwenden


Nach meiner Erfahrung ist es am besten, den Befehl late zu verwenden, wenn Sie überprüfen, ob sich Objekte übereinander oder nebeneinander befinden. Es gibt jedoch auch andere Fälle. Wenn Sie überprüfen, ob sich ein Objekt auf einem anderen befindet, wird das Ereignis erst in der nächsten Runde registriert, es sei denn, Sie verwenden den Befehl late:

[ player spikeTrap ] -> [ spikeTrap ]

In dem oben genannten Fall wird der Spieler erst in der nächsten Runde nach dem Betreten der Falle von einer Falle mit Einsätzen getötet. Um den Spieler sofort sterben zu lassen, fügen Sie einfach den späten Befehl hinzu.

late [ player spikeTrap ] -> [ spikeTrap ]

Um das gesamte Level neu zu starten, wenn der Charakter stirbt, kannst du Folgendes tun:

late [ player spikeTrap ] -> restart

Und das Level wird neu gestartet, wenn der Spieler mit Einsätzen in die Falle fällt.

Das fertige Projektbeispiel sehen Sie hier .

Teil 6. Arbeiten Sie mit Soundeffekten.


Wir haben ein großartiges Spiel mit Puzzle Script gemacht , aber jetzt müssen wir Sounds hinzufügen. Wie kann man das machen? Jetzt werde ich es dir sagen!

Klangerzeugung


Öffnen Sie ein Beispielprojekt . Fügen Sie Sounds hinzu. Unter dem Spielbildschirm sehen Sie schwarze Quadrate mit weißen Symbolen. Sie werden verwendet, um Schall zu erzeugen. Jeder Charakter erzeugt eine einzigartige Art von Sound, und ein Kreuz löscht die erstellten Sounds. Klicken Sie auf die Quadrate und hören Sie sich die Geräusche an.


Gelbe Zahlen sind eindeutige Codes, die kopiert und an Stellen im Code eingefügt werden müssen, an denen Sounds benötigt werden.

Wie man Sounds benutzt


Sobald Sie den richtigen Sound gefunden haben, müssen Sie ihn in den Abschnitt Sounds des Spielcodes einfügen.


Sounds können auf verschiedene Arten verwendet werden. Am einfachsten ist es, einen neuen Soundeffekt (sfx) zu erstellen. Sie müssen nummeriert sein. Wir erstellen einen neuen sfx und weisen ihm beim Einfügen einer numerischen Sound-ID eine Zahl von 0 bis 10 zu. Erstellen Sie in der Liste Sounds einen neuen sfx mit dem Namen sfx0 und weisen Sie ihm den generierten Sound zu:

sfx0 36301705

Um Sound zu verwenden, müssen Sie ihn nach dem Ereignis in die Regeln einfügen. Hängen wir das neu erstellte sfx0 an das Box-Zerstörungsereignis an (das Ereignis ist bereits im Projektbeispiel vorhanden):

(The player destroys a crate)
[ > Player | CrateVanish ] -> [ Player | ] sfx0

Sounds können auch für die Wiedergabe mit bestimmten Ereignissen deklariert werden, zum Beispiel:

Crate MOVE 36772507

In diesem Fall wird der Ton abgespielt, wenn Sie die Kiste bewegen. Generieren Sie einen neuen Soundeffekt zum Ziehen und Ablegen von CratePull-Objekten und lassen Sie ihn spielen, wenn Sie CratePull verschieben:

CratePull MOVE 12735307

Sounds von Ereignissen sollten nur im Abschnitt Sounds deklariert werden: Sie müssen nicht in den Regeln erwähnt werden.

Liste der Tonwiedergabemethoden


Unten finden Sie eine Liste der verschiedenen Ereignissounds, die Sie verwenden können, aus der Puzzle-Skript- Dokumentation .

Objektaktion 541566 - Wird abgespielt, wenn ein Objekt während einer Bewegung einer Aktion ausgesetzt ist.

Objekt erstellen 641667 - wird beim Erstellen eines bestimmten Objekts abgespielt .

EndGame 5416789 - wird gespielt, wenn das Spiel endet.

EndLevel 6417822 - wird nach Abschluss des Levels abgespielt .

Objekt CantMove 781673 - wird abgespielt, wenn ein Objekt erfolglos versucht hat, sich in eine beliebige Richtung zu bewegen.

Player CantMove Down Left 464674 - Wird abgespielt, wenn ein Objekt erfolglos versucht hat, sich nach unten oder links zu bewegen.

CloseMessage 344456 - wird abgespielt, wenn der Player das Meldungsfeld schließt.

Object Destroy 187975 - wird abgespielt, wenn ein Objekt zerstört wird.

Objekt verschieben 264567 - wird abgespielt, wenn sich ein Objekt erfolgreich in eine beliebige Richtung bewegt.

Objekt nach links nach unten bewegen 765432 - wird abgespielt, wenn das Objekt erfolgreich nach unten oder links verschoben wurde.

Objekt horizontal bewegen 345367 - wird abgespielt, wenn sich das Objekt erfolgreich horizontal bewegt hat. Sie können auch Vertikal verwenden.

Neustart 7865435 - wird abgespielt, wenn ein Spieler die Neustarttaste R drückt.

SFX0 765743 - kann alles von SFX0 bis SFX10 sein. Dies sind spezielle Klangereignisse, die anhand der Regeln ausgeführt werden können.

ShowMessage 478483 - wird abgespielt, wenn eine Nachricht angezeigt wird.

StartGame 234626 - wird zu Beginn eines neuen Spiels gespielt.

Startlevel 765436 - spielt am Anfang jedes Levels.

TitleScreen 876543 - wird nach dem Laden des Bildschirmschoners abgespielt.

Rückgängig machen 436234 - wird abgespielt, wenn ein Spieler die Abbruchtaste (Z) drückt.

Sie können Bewegungsrichtungen und Cantmove festlegen, damit bei Bewegungen in verschiedene Richtungen unterschiedliche Töne wiedergegeben werden.

Ein fertiges Beispiel für das Projekt finden Sie hier .

Teil 7. Musik spielen


Wir haben gelernt, wie man Spiele mit Puzzle Script erstellt, aber wäre es nicht großartig, ihnen Musik hinzuzufügen? Es ist möglich, und jetzt werde ich Ihnen sagen, wie es geht.

Hinweis: Es scheint, dass diese Funktion im Puzzle-Skript derzeit nicht funktioniert. Fahren Sie daher mit dem nächsten Teil fort.

Was tun?


Öffnen Sie das Projekt leer . Musik funktioniert in Puzzle Script wie folgt: Sie können einen Link zu einem einzelnen Video von Youtube in das Spiel einfügen. PuzzleScript spielt automatisch alle Sounds dieses Videos ab. Öffne Youtube und wähle ein Video aus oder verwende Folgendes:

youtube.com/watch?v= CKAc3nYEatw

Um Musik aus einem Video abzuspielen, benötigen wir eine eindeutige Video-ID. Der grüne Teil in der obigen Zeile ist eine eindeutige ID.


Fügen Sie zu Beginn des Projekts auf der Homepage des Autors das YouTube-Label und anschließend eine eindeutige Video-ID hinzu, z. B.:

youtube CKAc3nYEatw

Um sicherzustellen, dass es richtig funktioniert, klicken Sie auf "Teilen" und dann auf den Spielelink (nicht auf den Quellcode-Link). Während des Testens im Editor kann keine Puzzle-Skript-Musik abgespielt werden. Wenn Sie möchten, dass das Spiel Musik enthält, müssen Sie diese als Video auf Youtube hochladen und eine eindeutige ID in Ihr Projekt einfügen. Jedes Projekt kann nur ein Youtube-Video haben.

Projektbeispiel


Ein Beispiel für ein Puzzle-Skript-Projekt finden Sie hier .

Teil 8. Verwendung des Befehls Aktion


Wir wissen bereits, wie man Blöcke bewegt, drückt und zieht, aber was ist, wenn wir etwas tun müssen, indem wir eine bestimmte Taste drücken, z. B. ein Leerzeichen ?

Die Eingabemöglichkeiten in PuzzleScript sind sehr begrenzt, hauptsächlich Pfeiltasten, Z zum Abbrechen, R zum Neustart, und wir können sie nicht ändern. Die Engine gibt uns jedoch eine zusätzliche Aktionstaste - Drücken der Leertaste oder der X- Taste.

Die Arbeit mit dem Aktionsteam erfolgt nach dem oben beschriebenen Format. Wir haben das grundlegende PuzzleScript-Codeformat verwendet:

[ ] -> [ ]

Wenn die Bedingung erfüllt ist, führen wir das Ereignis aus. Der Aktionsbefehl wird auf die gleiche Weise verwendet, hat jedoch eigene Regeln. Es sieht so aus:

[ Action ] -> [ ]

Hier ist ein Beispiel für die Verwendung des Befehls Aktion:

[ Action Player ] -> [ Crate ]

Erstens ist Aktion immer das erste Wort einer Bedingung.

Zweitens, wenn wir ein bestimmtes Objekt im Spiel beeinflussen wollen, müssen wir dieses Objekt sowohl in der Bedingung als auch im Ereignis erwähnen (wenn wir ein anderes Objekt erwähnen, löscht das Programm das ursprüngliche und ersetzt es durch ein neues Objekt, und wenn Sie das Objekt nicht angeben, dann er wird gerade in Rente gehen).

Schließlich sollte das Wort Aktion nur in der Bedingung verwendet werden , aber manchmal lohnt es sich, es sowohl in der Bedingung als auch im Ereignis zu verwenden. Ich werde unten darüber sprechen.

Überprüfen Sie den oben im Spielprojekt gezeigten Code. Sie können mit diesem Beispiel beginnen . Sie werden sehen, dass der Player zu einer Box wird, wenn Sie die Leertaste oder X drücken .

Die Bedingung lautet [ Wenn wir die Aktionstaste drücken und sich ein Player-Objekt auf der Ebene befindet ] -> dann [ das Player-Objekt durch ein Kästchen ersetzen ]

Versuchen wir nun den folgenden Code im Projektbeispiel:

[ Action Player | Crate ] -> [ Player | > Crate ]



Stellen Sie sicher, dass Sie wie im obigen Bild allseitig von Kästchen umgeben sind. Sie werden feststellen, dass eine Aktion jeweils nur eine Box betrifft. Ich weiß nicht genau, was der Grund ist, aber wenn Sie mehrere Objekte mit dem Befehl Aktion beeinflussen möchten , müssen Sie ihn sowohl in der Bedingung als auch im Ereignis angeben.

Ersetzen Sie den Code durch die aktualisierte Version:

[ Action Player | Crate ] -> [ Action Player | > Crate ]


Jetzt können wir alle Kisten auf einmal schieben. Wenn Sie eine Aktion auf mehrere Objekte anwenden müssen, fügen Sie Action sowohl in die Bedingung als auch in das Ereignis ein.

Teil 9. Überprüfen mehrerer Bedingungen


Lassen Sie uns lernen, verschiedene Bedingungen zu überprüfen, zum Beispiel das Vorhandensein einer Bombe UND eines zerstörbaren Blocks.


Öffnen Sie ein Beispielprojekt . Fügen Sie nun den folgenden Code hinzu:

late [Player Switch][DoorClosed] -> [Player Switch][DoorOpen]

Der Code folgt diesem Format:

[ 1 ] [ 2 ] -> [ 1 ] [ 2 ]

Wenn Bedingung 1 wahr ist und Bedingung 2 wahr ist, werden Schritt 1 und Schritt 2 ausgeführt. In unserem Fall wird in Bedingung 1 geprüft, ob der Player eingeschaltet ist. Wenn ja, wird Bedingung 2 geprüft, dh das Vorhandensein auf der Ebene einer geschlossenen Tür? Wenn die Bedingung erfüllt ist, wird das DoorClosed-Objekt zu einem DoorOpen-Objekt und öffnet die Tür.


Angenommen, wir müssen die Tür schließen, wenn der Held den Schalter verlässt, weil wir möchten, dass der Spieler die Box zum Schalter drückt, um die Tür zu öffnen. Sie können so etwas schreiben:

late [Player | Switch][DoorOpen] -> [Player | Switch][DoorClosed]

Wenn der Spieler neben dem Schalter steht und irgendwo auf dem Level eine offene Tür ist, schließen wir die Tür. Schließlich muss die Tür offen bleiben, wenn wir die Box auf den Schalter schieben:

late [Crate Switch][DoorClosed] -> [Crate Switch][DoorOpen]

Jetzt bleibt die Tür offen, während sich die Schublade am Schalter befindet.

Das fertige Projektbeispiel sehen Sie hier .

Teil 10. Haltepunkte erstellen


Vielleicht haben Sie eine gute Idee, um Puzzle Script zu spielen, aber es benötigt Kontrollpunkte (Checkpoints), damit der Spieler sie im Todesfall wiederherstellen kann. Wie kann man das machen? Ziemlich einfach, und jetzt werde ich erklären, wie.


Erstellen Sie Haltepunkte


Öffnen Sie ein Beispielprojekt . Jetzt müssen wir einen Haltepunkt programmieren. Hierfür reicht nur eine Codezeile:

late [ Player FlagRed ] -> CHECKPOINT

FlagRed ist ein Checkpoint. Wenn sich der Spieler oben auf der Flagge befindet, erstellt dieser Code einen Prüfpunkt (CHECKPOINT). Wenn Sie nicht zu spät verwenden, funktioniert die Checkpoint-Funktion nicht.

Testen Sie das Spiel. Gehen Sie über den Kontrollpunkt und dann etwas weiter und drücken Sie R. Sie müssen vom Kontrollpunkt aus starten.

Mehrere Kontrollpunkte


Wenn es mehrere Kontrollpunkte gibt, verwendet das Spiel den zuletzt vom Spieler aktivierten.

Um zu vermeiden, dass ein bereits verwendeter Kontrollpunkt erneut aktiviert wird, müssen Sie ihn in ein anderes Objekt ändern. Erstellen Sie dazu eine weiße Kopie im Abschnitt OBJEKTE des Codes unter der roten Flagge.

FlagWhite
White Orange
.1…
.00..
.000.
.1…
.1…

Schreiben Sie nun diese Zeile in der Legende neu:

Flag = FlagRed or FlagWhite

Wir können eine Gruppe von Objekten erstellen. In diesem Fall ist Flag entweder FlagRed oder FlagWhite. Solange mindestens einem der gruppierten Objekte ein Symbol zugewiesen ist (wir haben das FlagRed-Symbol F zugewiesen), müssen wir anderen Objekten der Gruppe keine Symbole zuweisen, und Sie können nur im Code darauf zugreifen, nicht jedoch im Ebeneneditor. Dann können Sie der Gruppe Kollisionsebenen zuweisen, was wir auch getan haben. Ein Zugriff auf eine Gruppe von Objekten, z. B. Flag, bezieht sich auf die gesamte Gruppe. Deshalb:

[ > Player | Flag ] -> [ > Player | ]

Dieser Code wirkt sich sowohl auf die rote als auch auf die weiße Flagge aus.

Flag-Objekt ändern


So ändern Sie FlagRed in FlagWhite:

late [ Player FlagRed ] -> [ Player FlagWhite ]

Befindet sich der Spieler am Ende des Zuges auf der roten Fahne, verwandeln wir ihn in Weiß. Sie müssen jedoch die Flag-Grafiken ändern, nachdem Sie den Haltepunkt erstellt haben, da der Code von oben nach unten gelesen wird. Testen Sie das Programm.

Ändern Sie die zweite Flagge


Das Projekt enthält zwei Flags. Stellen wir sicher, dass bei Aktivierung des zweiten Flags das alte weiße Flag schwarz wird, damit es nicht mehr verwendet werden kann. Wir schreiben folgendes:

late [ Player FlagRed ][ FlagWhite] -> [ Player FlagRed ][FlagBlack]

Der Code lautet: Wenn sich der Spieler auf der roten Fahne befindet und irgendwo im Spiel weiße Fahnen sind, müssen Sie die weißen Fahnen schwarz machen. Da der Code von oben nach unten gelesen wird, müssen wir dies in der folgenden Reihenfolge tun:

late [ Player FlagRed ] -> CHECKPOINT
late [ Player FlagRed ][ FlagWhite] -> [ Player FlagRed ][FlagBlack]
late [ Player FlagRed ] -> [ Player FlagWhite ]

Wenn Sie nicht verstehen, warum der Code in dieser Reihenfolge sein sollte, versuchen Sie, die Reihenfolge der Zeilen zu ändern, und testen Sie das Programm. Um Ihre eigenen Probleme zu lösen, müssen Sie lernen, einen Schritt zurückzutreten und darüber nachzudenken, was der Code bewirkt. Aber ich werde Ihnen einen Hinweis geben - wenn Sie spielen, wo sind die roten Fahnen während der letzten Codezeile im folgenden falschen Beispiel?

[ > Player | Crate ] -> [ > Player | > Crate ]
[ > Crate | Flag ] -> [ Crate | Flag ]
late [ Player FlagRed ] -> CHECKPOINT
late [ Player FlagRed ] -> [ Player FlagWhite ]
late [ Player FlagRed ][ FlagWhite] -> [ Player FlagRed ][FlagBlack]

Sehen Sie sich hier das fertige Beispielprojekt an . Außerdem habe ich Ihnen nur den einfachsten Weg zum Animieren gezeigt. Im nächsten Teil werde ich über das Erstellen komplexerer Animationen wie Explosionen sprechen.

Teil 11. Animationen


Es gibt zwei Möglichkeiten, Animationen in PuzzleScript zu erstellen. Einer von ihnen verwendet Echtzeit, aber in diesem Teil werde ich nicht darüber sprechen. Eine andere wird für schnelle einmalige Animationen verwendet, z. B. für eine Explosion oder einen Charakter, der eine vertikale Leiter hinuntersteigt.

Öffnen Sie ein Beispielprojekt . Wir werden eine Bombe und eine Reihe von Aufnahmen der Explosion erstellen und sie dann animieren.

Objektanimation


Für 2D-Animationen benötigen Sie mehrere Zeichnungen eines Objekts, das sich von einem Zustand in einen anderen bewegt, z. B. ein Sprite eines laufenden Mario. Es enthält 4 Frames Animation.


Um den Übergang eines Animationsrahmens zu einem anderen zu simulieren, erstellen wir in PuzzleScript mehrere Objekte, die Animationsrahmen sind, und wechseln dann mit dem Code zwischen ihnen.

Bombe


Erstellen Sie ein solches Bombenobjekt.

Bomb
black yellow grey
..1..
..1..
.000.
00020
.000.

Denken Sie daran, es den Ebenen und der Legende hinzuzufügen.

Um die Explosion zu animieren, müssen wir jeden Frame der Animation als separates Objekt erstellen und dann im Code zwischen ihnen wechseln. Lassen Sie uns Explosionsobjekte erstellen.

Explosion1
black yellow grey red
..1..
..1..
.000.
00320
.000.

Explosion2
black yellow grey red
..1..
..1..
.333.
03330
.333.

Explosion3
black yellow grey red
..1..
.333.
33333
33333
.333.

Explosion4
black yellow grey red
.333.
33333
33333
33333
.333.

Explosion5
black yellow grey red
.333.
33333
33.33
33333
.333.

Explosion6
black yellow grey red
.333.
3...3
3...3
3...3
.333.

Explosion7
black yellow grey red
.....
.....
.....
.....
.....

Die Objekte werden korrekt nummeriert, um zu wissen, welchen Frame der Animation wir benötigen. Nachdem wir sie den Ebenen und der Legende hinzugefügt haben, können wir mehrere Codezeilen hinzufügen.

[Explosion7] -> []
[Explosion6] -> [Explosion7]
[Explosion5] -> [Explosion6]
[Explosion4] -> [Explosion5]
[Explosion3] -> [Explosion4]
[Explosion2] -> [Explosion3]
[Explosion1] -> [Explosion2]
[Bomb] -> [Explosion1]

Versuchen Sie, diesen Code hinzuzufügen, platzieren Sie eine Bombe auf dem Level und starten Sie das Spiel. Sie werden feststellen, dass sich die Bombenanimation bei jeder Bewegung um ein Bild ändert. Beim Wechsel zwischen Objekten erstellen wir eine Animation.

Die Reihenfolge des Wechsels zwischen Animationen ist kritisch. Der letzte Frame sollte oben und der erste oben sein. Vergessen Sie nicht, dass der Code von oben nach unten gelesen wird. Wenn sich die Frames der Animation in einer anderen Reihenfolge befinden, werden die Änderungen nie angezeigt. Wir werden nur das letzte Bild sehen, und in unserem Fall wird die Bombe einfach verschwinden. Es ändert sich zum ersten Bild, dann zum zweiten und so weiter in einem Bild, noch bevor Sie die Grafik sehen. Wenn Sie das letzte Bild am Anfang platzieren, sehen wir in jeder Runde die nächste Änderung.

Wieder verwenden


So animieren Sie sie alle zusammen, wir brauchen ein Team wieder . Wieder bedeutet dies, dass PuzzleScript nach dem Lesen des gesamten Codes angehalten wird und dann den Code erneut liest, indem alle Befehle erneut ausgeführt werden . Es kann für die Schwerkraft, das Gleiten auf Eis und in unserem Fall für Animationen verwendet werden. Sie müssen den Code lediglich wie folgt umschreiben:

[Explosion7] -> []
[Explosion6] -> [Explosion7] again
[Explosion5] -> [Explosion6] again
[Explosion4] -> [Explosion5] again
[Explosion3] -> [Explosion4] again
[Explosion2] -> [Explosion3] again
[Explosion1] -> [Explosion2] again
[Bomb] -> [Explosion1] again

Testen Sie das Spiel. Sie werden sehen, dass die gesamte Bombenanimation sofort abgespielt wird. Wenn es Ihrer Meinung nach zu langsam oder zu schnell ist, kann die Geschwindigkeit geändert werden. Schreiben Sie ganz am Anfang des Programmtextes unter der Homepage den folgenden Code:

again_interval 0.1

Dies ist Teil dessen, was PuzzleScript als Vorspiel bezeichnet . Hier können Sie vor dem Rest des Codes zusätzliche Regeln festlegen, die das Verhalten des Spiels bestimmen. Jetzt sollte die Animation schneller abgespielt werden. Versuchen Sie, die Nummer nach again_interval zu ändern, und überprüfen Sie, ob sie sich geändert hat.

Das fertige Projektbeispiel sehen Sie hier .

Teil 12. Schwerkraft


Normalerweise wird PuzzleScript verwendet, um Spiele mit einem Top-Down zu erstellen. Tatsächlich können Sie jedoch einige Elemente von Side-Scrollern simulieren, wenn auch mit eingeschränkten PuzzleScript-Regeln, dh sie werden immer noch Schritt für Schritt ausgeführt. In diesem Teil werde ich Ihnen erklären, wie Sie die Schwerkraft implementieren.

Projektbeispiel


Öffnen Sie ein Beispielprojekt . Ich habe ein einfaches Level erstellt, es hat einen Spieler, eine Kiste auf dem Sims und eine Tür darunter. Wir möchten sicherstellen, dass ein Spieler, der eine Kiste von einem Felsvorsprung drückt, zu Boden fällt. Wir möchten auch, dass der Spieler zu Boden fällt, wenn er die Kante verlässt.

Herbstphase 1


Hier ist der erste Teil des Codes, den wir verwenden werden:

down [ Player | no Object ] -> [ | Player ]
down [ Crate | no Object no Player ] -> [ | Crate ]

Versuchen Sie, die Box von der Kante zu schieben. Sie werden feststellen, dass die Box nach dem Bewegen in der Luft hängt, aber nach einem weiteren Bewegen zu Boden fällt. Hier passieren ein paar Dinge.

Lassen Sie uns zunächst über das Schlüsselwort down sprechen . Hinzufügen nach unten , begrenzen wir die Regel, dass es nur in Richtung „down“ gilt. Deshalb bewegt sich die Box nach unten. Wenn Sie nach unten durch rechts ersetzen , werden Sie sehen, dass die Box in der rechten Wand steckt, wie im Spiel mit Anti-Schwerkraft. Versuchen Sie es.

Als nächstes werden wir etwas Ungewöhnliches tun. Anstatt zu überprüfen, ob sich der Spieler neben einem bestimmten Objekt befindet (z. B. einer Box), prüfen wir, ob er sich neben einem verallgemeinerten Objekt befindet. Wenn man sich die Legende in dem Beispiel - Code anschauen, werden Sie sehen , dass wir das Objekt als eine Gruppe von Objekten identifiziert haben, das heißt, jedes Mal , wenn das Wort Objekt verstehen wir eine Gruppe von Objekten. Das heißt, wir prüfen, ob sich eines dieser Objekte unter dem Player befindet. Wenn nicht, befehlen wir dem Spieler, dieses leere Feld zu besetzen und das vorherige Feld aufgrund des Wortes nach unten zu verlassen und nach unten zu folgen.

Sie können aber auch feststellen, dass die Box nach einer Kollision mit einem Felsvorsprung erst bei der nächsten Bewegung herunterfällt und sofort den Boden erreicht. Um diesen verzögerten Absturz zu vermeiden, können Sie das Schlüsselwort late verwenden:

late down [ Player | no Object ] -> [ | Player ]
late down [ Crate | no Object no Player ] -> [ | Crate ]

Aber wie kann man es Bild für Bild allmählich fallen lassen?

Herbstphase 2


Jetzt verwenden wir das zufällige Schlüsselwort . Wir schreiben den Code wie folgt um:

random down [ Player | no Object ] -> [ | Player ]
random down [ Crate | no Object no Player ] -> [ | Crate ]

Führen Sie den Code aus. Es funktioniert sehr ähnlich wie der vorherige Code, jedoch mit einem wichtigen Unterschied. Die Box gefriert in der Luft, aber jedes Mal, wenn sich der Spieler bewegt, fällt sie um eine Zelle herunter. Dies ist auf das Wort zufällig zurückzuführen . Genau genommen wurde random entwickelt, um Spiele mit zufälligen Elementen zu erstellen, aber es hat sich hier als nützlich erwiesen. Es erzwingt, dass die entsprechende Codezeile einmal pro Runde ausgeführt wird. PuzzleScript führt jede Regel so oft wie möglich in einem Zug aus, und erst dann sieht der Player grafische Änderungen. Deshalb scheint die Kiste sofort zu Boden zu fallen. Wenn wir das Wort zufällig verwenden, lassen wir es jeweils nur eine Zelle fallen.

Herbstphase 3


Jetzt fügen wir das Schlüsselwort erneut hinzu :

random down [ Player | no Object ] -> [ | Player ] again
random down [ Crate | no Object no Player ] -> [ | Crate ] again

Starte das Spiel. Alles ist fast perfekt. Die Box gefriert einige Zeit in der Luft, aber wenn Sie sich wieder bewegen, fällt sie allmählich zu Boden. Wir kennen das Schlüsselwort bereits wieder . Im Wesentlichen bedeutet dies, dass PuzzleScript am Ende des Zuges den Code erneut liest und versucht, alle Befehle erneut als separate Bewegung auszuführen. Danach wird es angehalten und dann so oft wie möglich wiederholt. Das Wichtigste dabei ist, dass er zwischen den Kurven wieder pausiert , wodurch wir sehen können, wie die Kiste fällt.

Letzte Etappe


Und der letzte Schliff. Damit die Box unmittelbar nach dem Schieben vom Rand auf den Boden fällt, müssen wir eine weitere Codezeile über der gerade geschriebenen hinzufügen:

[moving Player] -> [moving Player] again
random down [ Player | no Object ] -> [ | Player ] again
random down [ Crate | no Object no Player ] -> [ | Crate ] again

Das sich bewegende Schlüsselwort in eckigen Klammern [] vor dem Spieler bedeutet, dass wir prüfen, ob sich der Spieler bewegt. Das heißt, wenn sich ein Spieler bewegt, befehlen wir ihm, sich weiter zu bewegen und das Team erneut zu leiten . Dann funktioniert sofort alles, was das Schlüsselwort wieder verwendet . In unserem Fall ist dies die Animation des Falles der Box.

Das fertige Projektbeispiel sehen Sie hier .

Teil 13. Fahrtrichtung prüfen


Richtungsangabe


Manchmal muss man etwas nur in eine Richtung überprüfen. Zum Beispiel müssen Sie Blöcke erstellen, die nur horizontal geschoben werden können, oder eine Ente erstellen, die nur nach links gehen kann.

Wie dem auch sei, wir können darauf hinweisen, dass Ereignisse nur in bestimmten Richtungen auftreten.

Öffnen PuzzleScript, erstellen Sie ein Spiel basierend auf dem Beispiel des Grundes und ersetzen Regeln mit dem folgenden Code:

[ Left Player ] -> [ Crate ]

Starten Sie das Spiel und sehen Sie, was passiert.

Wenn Sie versuchen, nach links zu gehen, verwandelt sich der Spieler in eine Kiste. Dies ist ein gutes Beispiel dafür, wie das Richten funktioniert.

Wir sind bereits an das Format gewöhnt, in dem ich den PuzzleScript-Code erklärt habe:

[ ] -> [ ]

Wenn das Ereignis wahr ist, tritt das Ereignis auf.

Aber jetzt, wenn wir die Anweisungen überprüfen müssen, wird er die neuen Regeln befolgen:

[ Movement Direction Object Affected ] -> [ New State of Object ]

Das ist unser vorheriger Code:

[ Left Player ] -> [ Crate ]

prüft, ob sich der Spieler nach links bewegt ( links ). Wenn ja, dann ersetzen wir den Player durch das Box-Objekt.

Arten von Zielen


Sie können aus folgenden Zieltypen auswählen:

  • Auf
  • Runter
  • Links
  • Richtig
  • Horizontal (prüft, ob eine horizontale Bewegung vorliegt)
  • Vertikal (prüft, ob eine vertikale Bewegung vorliegt)


Teil 14. Benutzerdefinierte Bewegungen erstellen


Aus irgendeinem Grund benötigt das Spiel möglicherweise einen benutzerdefinierten Zug. Enten können nur nach links gehen, Kisten können nur horizontal geschoben werden und so weiter. Das ist sehr einfach. Schauen wir uns noch einmal das grundlegende PuzzleScript-Codeformat an:

[ ] -> [ ]

Wenn die Bedingung erfüllt ist, tritt ein Ereignis auf. Um einen benutzerdefinierten Zug zu erstellen, müssen Sie folgende Schritte ausführen:

[ Condition ] -> [ Movement Direction Object To Move ]

So würde das Beispiel aussehen:

[ Player | Crate ] -> [ Player | Left Crate ]

Laden Sie PuzzleScript , öffnen Sie das Beispiel Grund , fügen Sie den Code und sehen , was passiert. Gehe zu der Kiste, um die es keine Wände gibt.

Sie werden sehen, dass wenn sich ein Spieler in der Nähe der Box befindet, die Box nach links geschoben wird. Da es jedoch kein spätes Schlüsselwort gibt , geschieht dies im Kurs, nachdem Sie den ersten Schritt in diese Richtung getan haben.

Wenn Sie im Ereignis zusätzlich zum Objekt die Bewegungsrichtung angeben , z. B. Links , versucht PuzzleScript, das Objekt in die angegebene Richtung zu bewegen. Deshalb bewegt sich die Box und nicht der Spieler nach links - Links befindet sich neben der Kiste .

Erinnerst du dich an diesen Code aus dem vorherigen Teil?

[ ] -> [ ]

Wenn Sie die Bewegungsrichtung in der Bedingung neben dem Objekt angeben , wird geprüft, ob sich dieses Objekt in diese Richtung bewegt. Dies ist ein wichtiger Unterschied. Sie können es folgendermaßen umschreiben:

[ ] -> [ ]

Zulässige benutzerdefinierte Bewegungen


Benutzerdefinierte Bewegungen können mit einem der folgenden Wörter erstellt werden:

  • Auf
  • Runter
  • Links
  • Richtig

Sie können Horizontal oder Vertikal nicht verwenden , da PuzzleScript nicht versteht, in welche Richtung Sie das Objekt verschieben möchten, oder dazu sind viele Problemumgehungen erforderlich. Es ist notwendig, eine bestimmte Richtung anzugeben.

Teil 15. Zellen neben Objekten überprüfen


Manchmal muss überprüft werden, was sich neben dem Objekt befindet. Das ist ziemlich einfach. Schauen wir uns das PuzzleScript-Codeformat noch einmal an:

[ ] -> [ ]

also

[ ] -> [ ]

Um die Seite des Objekts zu überprüfen, müssen wir ein Element hinzufügen. Das Format ist wie folgt:

[ object1 | object2 ] -> [ object1 | object2 ]

Vor der Bedingung prüfen wir, auf welcher Seite des Objekts wir die Prüfung durchführen möchten.

Innerhalb der Bedingung nehmen wir an, dass mindestens zwei Zellen benötigt werden. Eine Zelle ist in der Tat ein Objekt, das sich im selben Raum und nicht nebeneinander befindet.

[ ]

[ | | ]

Die erste Zelle ist das Objekt, dessen Seiten wir überprüfen. Die zweite Zelle ist das Objekt, dessen Anwesenheit wir überprüfen. Probieren Sie die folgenden Beispiele aus:

Left [ Player | Crate ] -> [ Player | ]

Der oben gezeigte Code löscht Kästchen, wenn sie sich auf dem Feld links vom Spieler befinden.

Left [ Crate | Crate ] -> [ Player | Crate ]

Dieser Code prüft, ob sich das Feld links von einem anderen Feld befindet. Wenn ja, wird das Kontrollkästchen, dessen Seite aktiviert ist, zum neuen Objekt des Spielers.

Left [ Crate | Crate ] -> [ Crate | Player ]

Im obigen Code gibt es das gleiche Häkchen, aber das Feld links wird zum Objekt des Spielers.

Left [ Crate | Crate | Crate ] -> [ Crate | Player | Crate ]

Dieser Code verwendet ebenfalls ein ähnliches Muster. Das Feld unmittelbar links neben dem Häkchen wird zum Spieler, wenn 3 Felder horizontal nebeneinander liegen.

Left [ Crate | Crate | Crate ] -> [ Crate | Crate | Player ]

Wenn 3 Felder horizontal nebeneinander liegen, wird das am weitesten links stehende zum Spieler.

Wenn Sie jedes dieser Beispiele testen, werden Sie beginnen, das Muster zu verstehen. Die erste Zelle ist das Objekt, das wir überprüfen, um zu sehen, was als nächstes kommt. Die folgenden Zellen, von der nächstgelegenen bis zur am weitesten entfernten, sind die Objekte, nach denen wir suchen.

Stichworte


  • Up - prüft ein Objekt
  • Down - prüft unter dem Objekt
  • Links - Überprüft links vom Objekt
  • Rechts - Überprüft rechts vom Objekt
  • Horizontal - Überprüft links und rechts vom Objekt
  • Vertikal - Überprüft über und unter dem Objekt

Bild

Bild

Bild

Bild

Source: https://habr.com/ru/post/de428906/


All Articles