JavaRush /Java-Blog /Random-DE /Abschnitt „Spiele“ auf JavaRush: Game Engine

Abschnitt „Spiele“ auf JavaRush: Game Engine

Veröffentlicht in der Gruppe Random-DE
„Spiele“ von JavaRush ist ein neuer Abschnitt, der große Aufgabenprojekte zum Schreiben beliebter Computerspiele enthält. Ihre Umsetzung ist einfacher als es scheint: Jedes Projekt ist in zwei Dutzend Teilaufgaben unterteilt. Indem Sie die Aufgaben Schritt für Schritt erledigen, schreiben Sie Ihr Spiel und können ihm dann einzigartige „Features“ hinzufügen und es mit Freunden teilen. KapitelDie Spiele nutzen die einfache JavaRush-Game-Engine . In diesem Artikel werden wir über die wichtigsten Funktionen sprechen und darüber, wie der Prozess des Schreibens eines Spiels aussieht.
  1. Einführung
  2. Spielinitialisierung
  3. Ein Spielfeld schaffen
  4. Primitives Programm
  5. Arbeiten mit den Zellen des Spielfeldes
  6. Arbeiten mit Farbe
  7. Dialogboxen
  8. Utility-Methoden
  9. Einschränkungen der Spiel-Engine

1. Einleitung

Bei der Umsetzung eines Computerspiels durch den Entwickler gibt es drei Phasen:
  1. Bei der Initialisierung des Spiels handelt es sich um vorbereitende Aktionen: Festlegen der Größe und Zeichnung des Spielfelds, Erstellen und Installieren von Spielobjekten in der Ausgangsposition sowie andere Aktionen, die zu Beginn des Spiels ausgeführt werden müssen.

  2. Spielablauf. Dazu gehören die Bewegung von Spielobjekten, Spieleraktionen, die Abrechnung gesammelter Punkte sowie andere Aktionen, die in bestimmten Abständen oder durch Drücken von Tasten ausgeführt werden müssen.

  3. Das Spiel beenden. Dazu gehören das Stoppen von Animationen, das Melden von Sieg oder Niederlage und andere Aktionen, die am Ende des Spiels ausgeführt werden müssen.

2. Spielinitialisierung

Die Initialisierung des Spiels besteht aus nur zwei Schritten:

Schritt 1: Erstellen Sie die Hauptspielklasse.

Um Ihr Spiel auf Basis der JavaRush-Spiel-Engine zu entwickeln, müssen Sie eine Klasse erstellen und diese von der Game- Klasse (com.javarush.engine.cell.Game) erben. Dadurch erhält Ihre Klasse die Möglichkeit, Methoden auf der Spiel-Engine aufzurufen, und die Engine kann Ihre Methoden aufrufen. Beispiel:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Schritt 2: Überschreiben Sie die Methode initialize().

Bei dieser Methode werden alle zum Starten des Spiels erforderlichen Aktionen ausgeführt: Erstellen des Spielfelds, Erstellen von Spielobjekten usw. Sie müssen diese Methode lediglich in einer Klasse deklarieren, die von der Game- Klasse erbt . Beispiel:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее ein Objektов
    }
}
Die initialize()- Methode ist ein Analogon der main()- Methode : Hier beginnt die Ausführung des gesamten für das Spiel geschriebenen Codes.

3. Ein Spielfeld schaffen

Auch das Anlegen eines Spielfeldes besteht aus nur zwei Schritten.

Schritt 1: Teilen Sie das Spielfeld in Zellen auf.

Das gesamte Spielfeld wird von der Spiel-Engine in Zellen unterteilt. Die Mindestgröße beträgt 3x3, die Höchstgröße 100x100. Der Spielbildschirm hat eine konstante Größe. Es kann in unterschiedlich viele Zellen unterteilt werden. Zum Beispiel Breite 7 und Höhe 9:
Kapitel
Bitte beachten Sie, dass die Zellennummerierung in der oberen linken Ecke beginnt. Um die Größe des Spielfelds festzulegen, verwenden Sie die Methode void setScreenSize(int width, int height) . Es legt die Größe des Spielfeldes fest. Als Parameter werden die Anzahl der Zellen horizontal (Breite) und vertikal (Höhe) verwendet. Es wird normalerweise einmal zu Beginn des Spiels aufgerufen. Beispiel:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Wenn Sie ein Spiel schreiben, müssen Sie möglicherweise die aktuelle Breite und Höhe des Spielfelds ermitteln. Hierfür sind die Methoden int getScreenWidth() und int getScreenHeight() nützlich .

Schritt 2: Schalten Sie das Gitter ein oder aus (optional).

Wenn Ihnen das schwarze Gitter, das die Zellen auf dem Spielfeld trennt, nicht gefällt, können Sie es deaktivieren. Die Methode void showGrid(boolean isShow) schaltet das Gitter, das Zellen trennt, ein und aus. Standardmäßig wird das Raster angezeigt. Um es zu deaktivieren, rufen Sie diese Methode mit dem Parameter false auf:
showGrid(false);
Ergebnis:
Kapitel
Um das Netz wieder einzuschalten, rufen Sie an:
showGrid(true);

4. Primitives Programm

Beispielprogramm:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
In diesem Beispiel ist die Größe des Spielfelds auf 3x3 eingestellt, die Rasteranzeige ist ausgeschaltet und ein orangefarbenes, halbzellengroßes „X“-Symbol wird in der Mitte auf einem blauen Hintergrund platziert. Dies ist das Erste, was der Spieler sieht, wenn er das Spiel startet.

5. Arbeiten mit den Zellen des Spielfeldes

Die Tatsache, dass wir das Spielfeld in Zellen unterteilen können, ist großartig, aber was können wir mit den Zellen selbst machen? Jede Zelle des Spielfeldes kann eingestellt werden:
  • Zellenfarbe (Zellenhintergrundfarbe);
  • Text (Text oder Zahl);
  • Textfarbe;
  • Textgröße als Prozentsatz relativ zur Zellengröße.
Betrachten wir Methoden zum Arbeiten mit Zellen des Spielfelds :
  1. void setCellColor(int x, int y, Color color) – legt die Farbe der Zelle mit den Koordinaten (x, y) fest:

    setCellColor(0, 0, Color.RED);
    setCellColor(3, 6, Color.BLACK);
    setCellColor(6, 8, Color.NONE);

  2. Farbe getCellColor(int x, int y) – gibt die Farbe der Zelle mit den Koordinaten (x, y) zurück:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) – platziert den Textwert in der Zelle mit den Koordinaten (x, y):

    setCellValue(3, 3, "text");
    setCellValue(0, 8, "W");
    setCellValue(4, 1, "2222");
    setCellValue(6, 6, "");

  4. String getCellValue(int x, int y) – gibt den in der Zelle enthaltenen Text mit den Koordinaten (x, y) zurück:

    String s = getCellValue(3, 3);
    System.out.println(getCellValue(4, 1));

  5. void setCellTextSize(int x, int y, int size) – legt die Größe des Inhalts in der Zelle mit Koordinaten (x, y) fest. Größe – Texthöhe als Prozentsatz der Zellenhöhe:

    setCellTextSize(2 , 0, 70); //  70% высоты клетки

  6. int getCellTextSize(int x, int y) – gibt die Größe des Inhalts in der Zelle mit Koordinaten (x, y) zurück:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) – platziert den Zahlenwert in der Zelle mit den Koordinaten (x, y):

    setCellNumber(3, 3, 40);
    setCellNumber(0, 8, -8);
    setCellNumber(4, 1, 2222);
    setCellNumber(6, 6, 0);

  8. int getCellNumber(int x, int y) – gibt die in der Zelle enthaltene Zahl mit Koordinaten (x, y) zurück. Wenn die Zelle keine Zahl enthält, wird 0 zurückgegeben:

    int i = getCellNumber(3, 3);
    System.out.println(getCellNumber(4, 1));

  9. void setCellTextColor(int x, int y, Color color) – legt die Farbe des Inhalts (Text) in der Zelle mit den Koordinaten (x, y) fest:

    setCellTextColor(2, 1, Color.GREEN);
    setCellTextColor(0, 1, Color.NONE);

  10. Farbe getCellTextColor(int x, int y) – gibt die Farbe des Inhalts (Text) in einer Zelle mit Koordinaten (x, y) zurück:

    Color textColor = getCellTextColor(1, 3);
Der Einfachheit halber gibt es mehrere setCellValueEx() -Methoden mit unterschiedlichen Parametersätzen:
  1. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value) – legt die Zelle mit den Koordinaten (x, y), der Hintergrundfarbe cellColor und dem Inhaltswert fest:

    setCellValueEx(0, 2, Color.BLUE, "56");

  2. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor) – legt die Zelle mit den Koordinaten (x, y), der Hintergrundfarbe cellColor, dem Inhaltswert und der Inhaltsfarbe textColor fest:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);

  3. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor, int textSize); – legt die Zelle mit den Koordinaten (x, y), der Hintergrundfarbe cellColor, dem Inhaltswert, der Inhaltsfarbe textColor und der Inhaltsgröße textSize fest:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);

6. Mit Farbe arbeiten

Farben in der Spiel-Engine werden durch die Color-Enumeration gesteuert , die eindeutige Werte für 148 Farben enthält. Und auch der besondere Wert NONE – das Fehlen von Farbe. Beispiel für die Arbeit mit Farbe:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Manchmal möchten Sie vielleicht ein Array aller vorhandenen Farben erhalten. Verwenden Sie dazu die Methode „values()“ . Zum Beispiel:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Die Farbnummer in der Palette zu erhalten ist sehr einfach:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Sie können eine Farbe auch anhand ihrer Nummer ermitteln:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Dialogfelder

Am Ende des Spiels muss der Spieler über Sieg oder Niederlage informiert werden. Hierfür gibt es eine spezielle Methode, die ein Dialogfeld auf dem Spielbildschirm anzeigt:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Hier:
  • cellColor — Hintergrundfarbe des Dialogfelds;
  • Nachricht – Nachrichtentext;
  • textColor — Textfarbe der Nachricht;
  • textSize – Textgröße der Nachricht.
Der Dialog schließt sich von selbst, wenn der Benutzer die Leertaste drückt.

8. Utility-Methoden

Beim Schreiben von Spielen werden häufig Zufallszahlen verwendet. Um das Erhalten von Zufallszahlen zu erleichtern, können Sie Scrap-Engine-Methoden verwenden:
  1. int getRandomNumber(int max) – gibt eine zufällige Ganzzahl von 0 bis einschließlich (max–1) zurück.

  2. int getRandomNumber(int min, int max) – gibt eine zufällige Ganzzahl von min bis einschließlich (max–1) zurück.

9. Einschränkungen der Spiel-Engine

Um Spiele auf der Website auszuführen, werden sie auf dem Server in JavaScript übersetzt. Diesbezüglich ergeben sich einige Einschränkungen. Insbesondere beim Schreiben von Spielen mit der JavaRush-Engine können Sie weder mit Dateien arbeiten noch alle Methoden der Systemklasse verwenden , außer currentTimeMillis() , setOut() , setErr() , arrayscopy() . Sie können auch die Felder err und out verwenden . Bei einem Verstoß gegen diese Einschränkungen kann das Spiel zwar kompiliert und ausgeführt werden, eine Veröffentlichung ist jedoch nicht möglich. Sie können auch kein Spiel mit Endlosschleifen veröffentlichen. Das ist alles! Wenn Sie mehr über den Abschnitt „Spiele“ erfahren möchten, finden Sie hier einige nützliche Dokumentationen, die Ihnen helfen können:
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION