JavaRush /Java Blog /Random-ID /Bagian "Permainan" di JavaRush: Penanganan Acara

Bagian "Permainan" di JavaRush: Penanganan Acara

Dipublikasikan di grup Random-ID
“Game” dari JavaRush adalah bagian baru dengan tugas menarik dan berskala besar untuk membuat versi game populer Anda sendiri. Sederhana saja: setiap proyek game dibagi menjadi beberapa subtugas. Selesaikan satu per satu dan permainan siap. Anda dapat membagikannya di jejaring sosial dan mengundang teman untuk bermain. BabPada materi ini kita akan membahas secara detail tentang metode pemrosesan event saat menulis game.

1. Bekerja dengan mouse

Mesin permainan memiliki dua metode untuk bekerja dengan mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Anda cukup mendeklarasikan metode ini di kelas permainan yang diwarisi dari Game, dan menulis kode apa pun di dalamnya. Dan mesin game itu sendiri akan memanggil mereka ketika pengguna menekan tombol mouse.
  1. onMouseLeftClick(int x, int y)— dipanggil oleh mesin ketika Anda mengklik tombol kiri mouse. Sebagai argumen, ia menerima koordinat sel lapangan tempat klik terjadi. Sel kiri atas memiliki koordinat (0,0). Untuk menggunakan metode ini, itu harus ditimpa.

  2. onMouseRightClick(int x, int y)— dipanggil saat Anda mengklik kanan. Cara kerjanya mirip dengan metode ini onMouseLeftClick(int x, int y).
Contoh penggunaan metode:
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. Bekerja dengan keyboard

Mesin permainan memiliki dua metode untuk bekerja dengan keyboard:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Jika Anda ingin tindakan terjadi saat pengguna menekan tombol pada keyboard, deklarasikan metode ini di kelas game Anda yang diwarisi dari Game dan tulis kode Anda di dalamnya. Mesin permainan itu sendiri akan memanggil mereka ketika pengguna menekan atau melepaskan tombol keyboard.
  1. onKeyPress (Key key)— dipanggil ketika tombol keyboard apa pun ditekan. Nilai dari tombol yang ditekan (atau Key.UNKNOWN) diteruskan ke metode sebagai argumen kunci.

  2. onKeyReleased (Key key)— dipanggil ketika tombol keyboard apa pun dilepaskan. Argumen key mengambil nilai dari kunci yang sesuai (atau Key.UNKNOWN).
Contoh penggunaan metode:
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);
        }
    }
}
Penting! Pada versi mesin saat ini, tipe Kunci hanya dapat menerima serangkaian nilai terbatas (9 buah):
Arti Apa yang diklik pengguna
Kunci.ENTER Pengguna menekan tombol Enter
Kunci.ESCAPE Pengguna menekan tombol Esc
Kunci.JEDA Pengguna mengklik tombol Jeda
Kunci.SPASI Pengguna menekan Spasi
Kunci.KIRI Pengguna menekan Panah Kiri
Kunci.KANAN Pengguna menekan Panah Kanan
Kunci.UP Pengguna menekan Panah Atas
Kunci. BAWAH Pengguna menekan Panah Bawah
Kunci.TIDAK DIKETAHUI Kunci apa pun kecuali yang tercantum di atas

3. Bekerja dengan pengatur waktu

Banyak game berlangsung secara real-time, artinya meskipun pengguna tidak melakukan apa pun, peristiwa dalam game tetap dijalankan. Agar Anda dapat mengimplementasikan permainan seperti itu, kami telah menambahkan fungsi pengatur waktu ke mesin permainan. Cara kerjanya seperti ini: Anda menyalakan pengatur waktu dan mengatur jangka waktu setelahnya akan berbunyi. Misalnya, 500 milidetik. Setelah itu, setiap setengah detik Game Engine memanggil file onTurnTimer(). Berkali-kali tak terhingga hingga pengatur waktu dimatikan. Bagaimana cara menggunakan pengatur waktu?
  1. Nyalakan pengatur waktunya.

    Ada metode khusus untuk ini void setTurnTimer(int timeMs). Sebagai argumen, metode ini mengambil durasi interval antar panggilan dalam milidetik (1/1000 detik). Cukup dengan memanggilnya sekali, dan mesin game akan mulai memanggil metode tersebut onTurn()setiap kali Ms milidetik.

  2. Ganti metode onTurn(int).

    Untuk melakukan ini, Anda perlu mendeklarasikan metode void onTurn(int step)di kelas yang diwarisi dari kelas tersebut Game. Metode ini akan dipanggil oleh mesin game. Dalam hal ini, mesin setiap kali akan mentransfer nomor seri panggilan tersebut (1,2,3, ...) ke metode.

  3. Matikan pengatur waktunya.

    Jika pengatur waktu tidak lagi diperlukan, misalnya ketika pengguna telah menyelesaikan permainan, maka pengatur waktu dapat dimatikan. Untuk melakukan ini, Anda hanya perlu menelepon stopTurnTimer().

  4. Mempercepat atau mengubah pengatur waktu.

    Di beberapa game, acara terus dipercepat, jadi akan lebih mudah jika kita mempercepat timer kita (mengurangi waktu antar panggilan). Tidak ada yang lebih sederhana: telepon setTurnTimer(int timeMs)lagi, dengan nilai baru, dan waktu antar panggilan onTurn()akan berubah.

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

        }
    }}
Dalam contoh sederhana ini kami membuat bidang sel 3x3. Kemudian kami menyalakan pengatur waktu yang akan memanggil metode tersebut setiap setengah detik onTurn(). Setiap setengah detik warna sel akan berubah, namun isinya tidak berubah. Setelah 50 detik warnanya akan berhenti berubah. Itu saja! Jika Anda ingin mempelajari lebih lanjut tentang bagian Permainan, berikut beberapa dokumentasi berguna yang dapat membantu:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION