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

Abschnitt „Spiele“ auf JavaRush: Ereignisbehandlung

Veröffentlicht in der Gruppe Random-DE
„Spiele“ von JavaRush ist ein neuer Abschnitt mit interessanten und umfangreichen Aufgaben zum Erstellen eigener Versionen beliebter Spiele. Es ist ganz einfach: Jedes Spielprojekt ist in Teilaufgaben unterteilt. Schließe sie einzeln ab und das Spiel ist fertig. Sie können es in sozialen Netzwerken teilen und Freunde zum Spielen einladen. KapitelIn diesem Material werden wir ausführlich über Methoden der Ereignisverarbeitung beim Schreiben von Spielen sprechen.

1. Arbeiten mit der Maus

Die Spiel-Engine verfügt über zwei Methoden zum Arbeiten mit der Maus:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Sie deklarieren diese Methoden einfach in der von geerbten Spielklasse Gameund schreiben beliebigen Code darin. Und die Spiel-Engine selbst ruft sie auf, wenn der Benutzer die Maustasten drückt.
  1. onMouseLeftClick(int x, int y)– Wird von der Engine aufgerufen, wenn Sie mit der linken Maustaste klicken. Als Argumente erhält es die Koordinaten der Zelle des Spielfeldes, in der der Klick erfolgt ist. Die Zelle oben links hat die Koordinaten (0,0). Um diese Methode verwenden zu können, muss sie überschrieben werden.

  2. onMouseRightClick(int x, int y)– wird aufgerufen, wenn Sie mit der rechten Maustaste klicken. Funktioniert ähnlich wie die Methode onMouseLeftClick(int x, int y).
Beispiel für die Verwendung von Methoden:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Устанавливаем размер игрового поля 3x3
        setScreenSize(3, 3);

        // Закрашиваем игровое поле белым цветом
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        // Ставим символ "X" в клетку по которой кликнули левой кнопкой мыши
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Очищаем клетку по которой кликнули правой кнопкой мыши
        setCellValue(x, y, "");
    }
}

2. Arbeiten mit der Tastatur

Die Spiel-Engine verfügt über zwei Methoden zum Arbeiten mit der Tastatur:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Wenn Sie möchten, dass Aktionen ausgeführt werden, wenn der Benutzer eine Taste auf der Tastatur drückt, deklarieren Sie diese Methoden in Ihrer Game-Klasse, die von Game erbt, und schreiben Sie Ihren Code darin. Die Spiel-Engine selbst ruft sie auf, wenn der Benutzer eine Tastaturtaste drückt oder loslässt.
  1. onKeyPress (Key key)– wird aufgerufen, wenn eine beliebige Tastaturtaste gedrückt wird. Der Wert der gedrückten Taste (oder Key.UNKNOWN) wird als Schlüsselargument an die Methode übergeben.

  2. onKeyReleased (Key key)– wird aufgerufen, wenn eine beliebige Tastaturtaste losgelassen wird. Das Schlüsselargument nimmt den Wert des entsprechenden Schlüssels (oder Key.UNKNOWN) an.
Beispiel für die Verwendung von Methoden:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Устанавливаем размер игрового поля 3x3
        setScreenSize(3, 3);

        // Закрашиваем игровое поле белым цветом
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onKeyPress(Key key) {
        // При нажатии пробела, центральная клетка становится желтой
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // При отпускании пробела, центральной клетке возвращается белый цвет
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
Wichtig! In der aktuellen Version der Engine kann der Schlüsseltyp nur einen begrenzten Wertesatz (9 Stück) akzeptieren:
Bedeutung Was der Benutzer angeklickt hat
Taste.ENTER Der Benutzer drückte die Eingabetaste
Schlüssel.ESCAPE Der Benutzer hat die Esc-Taste gedrückt
Taste.PAUSE Der Benutzer hat auf die Schaltfläche „Pause“ geklickt
Schlüssel.SPACE Der Benutzer drückte die Leertaste
Taste.LINKS Der Benutzer hat den Linkspfeil gedrückt
Taste.RECHTS Der Benutzer hat den Rechtspfeil gedrückt
Taste.UP Der Benutzer hat den Aufwärtspfeil gedrückt
Taste nach unten Der Benutzer hat den Abwärtspfeil gedrückt
Schlüssel. UNBEKANNT Jeder Schlüssel außer den oben aufgeführten

3. Arbeiten mit dem Timer

Viele Spiele finden in Echtzeit statt, was bedeutet, dass die Ereignisse im Spiel auch dann ausgeführt werden, wenn der Benutzer nichts tut. Damit Sie solche Spiele umsetzen können, haben wir die Game-Engine um eine Timer-Funktionalität erweitert. Das funktioniert etwa so: Man schaltet den Timer ein und stellt die Zeitspanne ein, nach der er erlöschen soll. Beispiel: 500 Millisekunden. Danach ruft die Game Engine jede halbe Sekunde die onTurnTimer(). Unendlich oft, bis der Timer ausgeschaltet wird. Wie verwende ich den Timer?
  1. Schalten Sie den Timer ein.

    Hierfür gibt es eine spezielle Methode void setTurnTimer(int timeMs). Als Argument nimmt die Methode die Dauer des Intervalls zwischen Aufrufen in Millisekunden (1/1000 Sekunde). Es reicht aus, es einmal aufzurufen, und die Spiel-Engine beginnt onTurn()alle Millisekunden, die Methode aufzurufen.

  2. Wir überschreiben die onTurn(int)-Methode.

    Dazu müssen Sie eine void onTurn(int step)von der Klasse geerbte Methode in einer Klasse deklarieren Game. Diese Methode wird von der Spiel-Engine aufgerufen. In diesem Fall übergibt die Engine jedes Mal die Seriennummer eines solchen Aufrufs (1,2,3, ...) an die Methode.

  3. Schalten Sie den Timer aus.

    Wenn der Timer nicht mehr benötigt wird, beispielsweise wenn der Benutzer das Spiel beendet hat, kann er ausgeschaltet werden. Dazu müssen Sie lediglich die anrufen stopTurnTimer().

  4. Beschleunigen oder ändern Sie den Timer.

    In einigen Spielen beschleunigen sich die Ereignisse ständig, daher wäre es praktisch, unseren Timer zu beschleunigen (die Zeit zwischen den Aufrufen zu reduzieren). Es gibt nichts Einfacheres: Rufen Sie setTurnTimer(int timeMs)erneut mit einem neuen Wert auf, und die Zeit zwischen den Aufrufen onTurn()ändert sich.

Beispiel:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {@Override
    public void initialize() {
    	// Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   //Включаем таймер, интервал между вызовами – 500мс.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // если прошло 100 тактов, выключаем таймер
        }

        if (step % 2 == 1) {
            // Если данный такт нечётный, установить клетке красный фон
            setCellColor(1, 1, Color.RED);
        } else {
            //если данный такт чётный, установить клетке синий фон
            setCellColor(1, 1, Color.BLUE);

        }
    }}
In diesem einfachen Beispiel haben wir ein Feld mit 3x3 Zellen erstellt. Dann haben wir einen Timer eingeschaltet, der die Methode jede halbe Sekunde aufruft onTurn(). Jede halbe Sekunde ändert sich die Farbe der Zelle, ihr Inhalt ändert sich jedoch nicht. Nach 50 Sekunden hört die Farbänderung auf. 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