JavaRush /Java Blog /Random-IT /Sezione "Giochi" su JavaRush: gestione degli eventi

Sezione "Giochi" su JavaRush: gestione degli eventi

Pubblicato nel gruppo Random-IT
"Giochi" di JavaRush è una nuova sezione con attività interessanti e su larga scala per creare le proprie versioni di giochi popolari. È semplice: ogni progetto di gioco è diviso in attività secondarie. Completateli uno per uno e il gioco è pronto. Puoi condividerlo sui social network e invitare gli amici a giocare. CapitoloIn questo materiale parleremo in dettaglio dei metodi di elaborazione degli eventi durante la scrittura di giochi.

1. Lavorare con il mouse

Il motore di gioco dispone di due metodi per lavorare con il mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Dichiarate semplicemente questi metodi nella classe di gioco ereditata da Gamee scrivete l'eventuale codice al loro interno. E il motore di gioco stesso li chiamerà quando l'utente preme i pulsanti del mouse.
  1. onMouseLeftClick(int x, int y)- chiamato dal motore quando si fa clic con il pulsante sinistro del mouse. Come argomenti riceve le coordinate della cella del campo di gioco in cui è avvenuto il clic. La cella in alto a sinistra ha le coordinate (0,0). Per utilizzare questo metodo, è necessario sovrascriverlo.

  2. onMouseRightClick(int x, int y)- chiamato quando si fa clic con il pulsante destro del mouse. Funziona in modo simile al metodo onMouseLeftClick(int x, int y).
Esempio di utilizzo dei metodi:
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. Lavorare con la tastiera

Il motore di gioco dispone di due metodi per lavorare con la tastiera:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Se vuoi che le azioni vengano eseguite quando l'utente preme un pulsante sulla tastiera, dichiara questi metodi nella classe del gioco che eredita da Game e scrivi il tuo codice al loro interno. Il motore di gioco stesso li chiamerà quando l'utente preme o rilascia un tasto della tastiera.
  1. onKeyPress (Key key)— chiamato quando viene premuto un tasto qualsiasi della tastiera. Il valore del tasto premuto (o Key.UNKNOWN) viene passato al metodo come argomento chiave.

  2. onKeyReleased (Key key)— chiamato quando viene rilasciato un tasto della tastiera. L'argomento chiave assume il valore della chiave corrispondente (o Key.UNKNOWN).
Esempio di utilizzo dei metodi:
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);
        }
    }
}
Importante! Nella versione attuale del motore, il tipo Chiave può accettare solo un insieme limitato di valori (9 pezzi):
Senso Ciò su cui l'utente ha fatto clic
Tasto.ENTER L'utente ha premuto il pulsante Invio
Tasto.ESCAPE L'utente ha premuto il pulsante Esc
Tasto.PAUSA L'utente ha fatto clic sul pulsante Pausa
Tasto.SPAZIO L'utente ha premuto Spazio
Tasto.SINISTRA L'utente ha premuto la freccia sinistra
Tasto.DESTRA L'utente ha premuto la freccia destra
Tasto.SU L'utente ha premuto la freccia su
Tasto.GIÙ L'utente ha premuto la freccia giù
Chiave.SCONOSCIUTO Qualsiasi chiave tranne quelle elencate sopra

3. Lavorare con il timer

Molti giochi si svolgono in tempo reale, il che significa che anche se l'utente non fa nulla, gli eventi del gioco vengono comunque eseguiti. Per consentirti di implementare tali giochi, abbiamo aggiunto la funzionalità timer al motore di gioco. Funziona più o meno così: accendi il timer e imposti il ​​periodo di tempo dopo il quale dovrebbe spegnersi. Ad esempio, 500 millisecondi. Successivamente, ogni mezzo secondo il motore di gioco chiama il file onTurnTimer(). Un numero infinito di volte fino allo spegnimento del timer. Come utilizzare il timer?
  1. Accendi il timer.

    Esiste un metodo speciale per questo void setTurnTimer(int timeMs). Come argomento, il metodo prende la durata dell'intervallo tra le chiamate in millisecondi (1/1000 di secondo). È sufficiente chiamarlo una volta e il motore di gioco inizierà a chiamare il metodo onTurn()ogni voltaMs millisecondi.

  2. Sovrascriviamo il metodo onTurn(int).

    Per fare ciò, è necessario dichiarare un metodo void onTurn(int step)in una classe ereditata dalla classe Game. Questo metodo verrà chiamato dal motore di gioco. In questo caso, il motore trasferirà ogni volta il numero di serie di tale chiamata (1,2,3, ...) al metodo.

  3. Spegni il timer.

    Se il timer non è più necessario, quando, ad esempio, l'utente ha completato il gioco, è possibile disattivarlo. Per fare questo basta chiamare il stopTurnTimer().

  4. Accelera o cambia il timer.

    In alcuni giochi gli eventi vengono costantemente accelerati, quindi sarebbe conveniente velocizzare il nostro timer (ridurre il tempo tra una chiamata e l'altra). Non c'è niente di più semplice: chiama setTurnTimer(int timeMs)di nuovo, con un nuovo valore, e l'intervallo tra le chiamate onTurn()cambierà.

Esempio:
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 questo semplice esempio abbiamo creato un campo di 3x3 celle. Quindi abbiamo attivato un timer che chiamerà il metodo ogni mezzo secondo onTurn(). Ogni mezzo secondo il colore della cella cambierà, ma il suo contenuto non cambierà. Dopo 50 secondi il colore smetterà di cambiare. È tutto! Se vuoi saperne di più sulla sezione Giochi, ecco qualche documentazione utile che può aiutarti:
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION