JavaRush /Blog Java /Random-FR /Section "Jeux" sur JavaRush : Gestion des événements

Section "Jeux" sur JavaRush : Gestion des événements

Publié dans le groupe Random-FR
« Jeux » de JavaRush est une nouvelle section proposant des tâches intéressantes et à grande échelle pour créer vos propres versions de jeux populaires. C'est simple : chaque projet de jeu est divisé en sous-tâches. Complétez-les un par un et le jeu est prêt. Vous pouvez le partager sur les réseaux sociaux et inviter des amis à jouer. ChapitreDans ce document, nous parlerons en détail des méthodes de traitement des événements lors de l'écriture de jeux.

1. Travailler avec la souris

Le moteur de jeu dispose de deux méthodes pour travailler avec la souris :
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Vous déclarez simplement ces méthodes dans la classe de jeu héritée de Gameet y écrivez n'importe quel code. Et le moteur de jeu lui-même les appellera lorsque l'utilisateur appuie sur les boutons de la souris.
  1. onMouseLeftClick(int x, int y)— appelé par le moteur lorsque vous cliquez sur le bouton gauche de la souris. Comme arguments, il reçoit les coordonnées de la cellule du terrain de jeu où le clic a eu lieu. La cellule en haut à gauche a les coordonnées (0,0). Pour utiliser cette méthode, elle doit être remplacée.

  2. onMouseRightClick(int x, int y)- appelé lorsque vous faites un clic droit. Fonctionne de manière similaire à la méthode onMouseLeftClick(int x, int y).
Exemple d'utilisation de méthodes :
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. Travailler avec le clavier

Le moteur de jeu propose deux méthodes pour travailler avec le clavier :
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Si vous souhaitez que des actions se produisent lorsque l'utilisateur appuie sur un bouton du clavier, déclarez ces méthodes dans votre classe de jeu qui hérite de Game et écrivez-y votre code. Le moteur de jeu lui-même les appellera lorsque l'utilisateur appuie ou relâche une touche du clavier.
  1. onKeyPress (Key key)- appelé lorsqu'une touche du clavier est enfoncée. La valeur de la touche enfoncée (ou Key.UNKNOWN) est transmise à la méthode comme argument clé.

  2. onKeyReleased (Key key)- appelé lorsqu'une touche du clavier est relâchée. L'argument key prend la valeur de la clé correspondante (ou Key.UNKNOWN).
Exemple d'utilisation de méthodes :
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);
        }
    }
}
Important! Dans la version actuelle du moteur, le type Key ne peut accepter qu'un ensemble limité de valeurs (9 pièces) :
Signification Ce sur quoi l'utilisateur a cliqué
Clé.ENTER L'utilisateur a appuyé sur le bouton Entrée
Clé.ESCAPE L'utilisateur a appuyé sur le bouton Échap
Touche.PAUSE L'utilisateur a cliqué sur le bouton Pause
Clé.ESPACE L'utilisateur a appuyé sur Espace
Clé.GAUCHE L'utilisateur a appuyé sur la flèche gauche
Clé.DROITE L'utilisateur a appuyé sur la flèche droite
Clé.UP L'utilisateur a appuyé sur la flèche vers le haut
Touche Bas L'utilisateur a appuyé sur la flèche vers le bas
Clé.INCONNUE N'importe quelle clé sauf celles listées ci-dessus

3. Travailler avec la minuterie

De nombreux jeux se déroulent en temps réel, ce qui signifie que même si l'utilisateur ne fait rien, les événements du jeu sont toujours exécutés. Afin que vous puissiez implémenter de tels jeux, nous avons ajouté une fonctionnalité de minuterie au moteur de jeu. Cela fonctionne à peu près comme ceci : vous allumez la minuterie et définissez la période après laquelle elle doit s'éteindre. Par exemple, 500 millisecondes. Après cela, toutes les demi-secondes, le moteur de jeu appelle le fichier onTurnTimer(). Un nombre infini de fois jusqu'à ce que la minuterie soit éteinte. Comment utiliser le minuteur ?
  1. Allumez la minuterie.

    Il existe une méthode spéciale pour cela void setTurnTimer(int timeMs). Comme argument, la méthode prend la durée de l'intervalle entre les appels en millisecondes (1/1000 de seconde). Il suffit de l'appeler une fois et le moteur de jeu commencera à appeler la méthode onTurn()à chaque fois en millisecondes.

  2. Nous remplaçons la méthode onTurn(int).

    Pour ce faire, vous devez déclarer une méthode void onTurn(int step)dans une classe héritée de la classe Game. Cette méthode sera appelée par le moteur de jeu. Dans ce cas, le moteur transférera à chaque fois le numéro de série d'un tel appel (1,2,3, ...) à la méthode.

  3. Éteignez la minuterie.

    Si le chronomètre n'est plus nécessaire, lorsque, par exemple, l'utilisateur a terminé le jeu, il peut être désactivé. Pour ce faire, il vous suffit d'appeler le stopTurnTimer().

  4. Accélérez ou modifiez la minuterie.

    Dans certains jeux, les événements s'accélèrent constamment, il serait donc pratique d'accélérer notre chronomètre (réduire le temps entre les appels). Il n'y a rien de plus simple : rappelez setTurnTimer(int timeMs), avec une nouvelle valeur, et le temps entre les appels onTurn()changera.

Exemple:
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);

        }
    }}
Dans cet exemple simple, nous avons créé un champ de 3x3 cellules. Ensuite, nous avons activé une minuterie qui appellera la méthode toutes les demi-secondes onTurn(). Toutes les demi-secondes, la couleur de la cellule changera, mais son contenu ne changera pas. Après 50 secondes, la couleur cessera de changer. C'est tout! Si vous souhaitez en savoir plus sur la section Jeux, voici une documentation utile qui peut vous aider :
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION