JavaRush /Java Blog /Random-ID /Bagian "Game" di JavaRush: Mesin game

Bagian "Game" di JavaRush: Mesin game

Dipublikasikan di grup Random-ID
“Games” dari JavaRush adalah bagian baru yang berisi proyek tugas besar untuk menulis game komputer populer. Membuatnya lebih mudah dari yang terlihat: setiap proyek dibagi menjadi dua lusin subtugas. Dengan menyelesaikan tugas langkah demi langkah, Anda akan menulis game Anda, dan kemudian Anda dapat menambahkan “fitur” unik ke dalamnya dan membaginya dengan teman-teman. BabPermainan menggunakan mesin permainan JavaRush yang sederhana . Pada artikel ini kita akan membahas tentang fitur-fitur utamanya dan seperti apa proses penulisan sebuah game.
  1. Perkenalan
  2. Inisialisasi permainan
  3. Menciptakan lapangan bermain
  4. Program primitif
  5. Bekerja dengan sel-sel lapangan bermain
  6. Bekerja dengan warna
  7. Kotak dialog
  8. Metode Utilitas
  9. Keterbatasan mesin game

1. Perkenalan

Ada tiga tahapan dalam implementasi permainan komputer oleh pengembang:
  1. Inisialisasi permainan merupakan tindakan persiapan: mengatur ukuran dan gambar lapangan permainan, membuat dan memasang objek permainan pada posisi awal, serta tindakan lain yang harus dilakukan di awal permainan.

  2. Proses permainan. Ini termasuk pergerakan objek permainan, tindakan pemain, penghitungan poin yang diperoleh, serta tindakan lain yang harus dilakukan pada interval tertentu atau dengan menekan tombol.

  3. Mengakhiri permainan. Ini termasuk menghentikan animasi, melaporkan kemenangan atau kekalahan, dan tindakan lain yang perlu dilakukan di akhir permainan.

2. Inisialisasi permainan

Menginisialisasi permainan hanya terdiri dari dua langkah:

Langkah 1: buat kelas permainan utama.

Untuk mengembangkan game Anda berdasarkan mesin game JavaRush, Anda perlu membuat kelas dan mewarisinya dari kelas Game (com.javarush.engine.cell.Game). Ini akan memberikan kelas Anda kemampuan untuk memanggil metode pada mesin permainan, dan kemampuan mesin untuk memanggil metode Anda. Contoh:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Langkah 2: ganti metode inisialisasi().

Dalam metode ini, semua tindakan yang diperlukan untuk memulai permainan akan dilakukan: membuat lapangan bermain, membuat objek permainan, dll. Anda hanya perlu mendeklarasikan metode ini di kelas yang mewarisi kelas Game . Contoh:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
Metode inisialisasi() adalah analog dari metode main() : ini adalah tempat semua kode yang ditulis untuk permainan mulai dieksekusi.

3. Menciptakan lapangan bermain

Membuat lapangan bermain juga hanya terdiri dari dua langkah.

Langkah 1: bagilah lapangan permainan menjadi beberapa sel.

Seluruh lapangan permainan dibagi menjadi beberapa sel oleh mesin permainan. Ukuran minimal 3x3, maksimal 100x100. Layar permainan memiliki ukuran yang konstan. Itu dapat dibagi menjadi sejumlah sel yang berbeda. Misalnya, lebar 7 dan tinggi 9:
Bab
Perlu diketahui bahwa penomoran sel dimulai dari pojok kiri atas. Untuk mengatur ukuran lapangan bermain, gunakan metode void setScreenSize(int width, int height) . Ini menentukan ukuran lapangan bermain. Dibutuhkan sebagai parameter jumlah sel secara horizontal (lebar) dan vertikal (tinggi). Biasanya dipanggil satu kali saat permainan dimulai. Contoh:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Saat menulis permainan, Anda mungkin perlu mengetahui lebar dan tinggi lapangan permainan saat ini. Metode int getScreenWidth() dan int getScreenHeight() berguna untuk ini .

Langkah 2: Menghidupkan atau mematikan grid (opsional).

Jika Anda tidak menyukai kotak hitam yang memisahkan sel-sel di lapangan permainan, Anda dapat mematikannya. Metode void showGrid(boolean isShow) menghidupkan dan mematikan grid yang memisahkan sel. Secara default, grid ditampilkan. Untuk mematikannya, panggil metode ini dengan parameter false:
showGrid(false);
Hasil:
Bab
Untuk menghidupkan kembali jaringan, hubungi:
showGrid(true);

4. Program primitif

Contoh program:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Dalam contoh ini, ukuran lapangan permainan diatur ke 3x3, tampilan kisi dimatikan, dan simbol “X” berukuran setengah sel berwarna oranye ditempatkan di tengah dengan latar belakang biru. Ini akan menjadi hal pertama yang dilihat pemain saat memulai permainan.

5. Bekerja dengan sel-sel lapangan permainan

Fakta bahwa kita dapat membagi lapangan permainan menjadi beberapa sel memang bagus, tetapi apa yang dapat kita lakukan dengan sel itu sendiri? Setiap sel lapangan permainan dapat diatur:
  • warna sel (warna latar belakang sel);
  • teks (teks atau angka);
  • warna teks;
  • ukuran teks sebagai persentase relatif terhadap ukuran sel.
Mari kita pertimbangkan metode untuk bekerja dengan sel-sel lapangan permainan :
  1. void setCellColor(int x, int y, Color color) — mengatur warna sel dengan koordinat (x, y):

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

  2. Color getCellColor(int x, int y) - mengembalikan warna sel dengan koordinat (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - menempatkan nilai teks dalam sel dengan koordinat (x, y):

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

  4. String getCellValue(int x, int y) - mengembalikan teks yang terdapat dalam sel dengan koordinat (x, y):

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

  5. void setCellTextSize(int x, int y, int size) - mengatur ukuran konten dalam sel dengan koordinat (x, y). size – tinggi teks sebagai persentase tinggi sel:

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

  6. int getCellTextSize(int x, int y) - mengembalikan ukuran konten dalam sel dengan koordinat (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - menempatkan nilai angka dalam sel dengan koordinat (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) - mengembalikan nomor yang terdapat dalam sel dengan koordinat (x, y). Jika sel tidak berisi angka, kembalikan 0:

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

  9. void setCellTextColor(int x, int y, Color color) — mengatur warna konten (teks) dalam sel dengan koordinat (x, y):

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

  10. Color getCellTextColor(int x, int y) - mengembalikan warna konten (teks) dalam sel dengan koordinat (x, y):

    Color textColor = getCellTextColor(1, 3);
Untuk kenyamanan, ada beberapa metode setCellValueEx() dengan kumpulan parameter berbeda:
  1. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value) — mengatur sel dengan koordinat (x, y) warna latar belakang cellColor dan nilai konten:

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

  2. void setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor) — mengatur sel dengan koordinat (x, y) warna latar belakang cellColor, nilai konten dan warna konten textColor:

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

  3. void setCellValueEx(int ​​x, int y, Warna selWarna, Nilai string, Warna teksWarna, int ukuran teks); — mengatur sel dengan koordinat (x, y) warna latar belakang cellColor, nilai konten, warna konten textColor dan ukuran konten textSize:

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

6. Bekerja dengan warna

Warna di mesin game dikendalikan oleh Color enum , yang berisi nilai unik untuk 148 warna. Dan juga nilai khusus NONE - tidak adanya warna. Contoh bekerja dengan warna:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Terkadang Anda mungkin ingin mendapatkan rangkaian semua warna yang ada. Untuk melakukannya, gunakan metode value() . Misalnya:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Mendapatkan nomor warna di palet sangat sederhana:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Anda juga bisa mendapatkan warna berdasarkan nomornya:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Kotak dialog

Di akhir permainan, pemain harus diberitahu tentang kemenangan atau kekalahan. Ada metode khusus untuk ini yang menampilkan kotak dialog di layar permainan:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Di Sini:
  • cellColor — warna latar belakang kotak dialog;
  • pesan — teks pesan;
  • textColor — warna teks pesan;
  • textSize — ukuran teks pesan.
Dialog akan tertutup dengan sendirinya jika pengguna menekan spasi.

8. Metode utilitas

Angka acak sering digunakan saat menulis permainan. Untuk memudahkan mendapatkan nomor acak, Anda dapat menggunakan metode scrap engine:
  1. int getRandomNumber(int max) - mengembalikan bilangan bulat acak dari 0 hingga (maks–1) inklusif.

  2. int getRandomNumber(int min, int max) - mengembalikan bilangan bulat acak dari min hingga (max–1) inklusif.

9. Keterbatasan mesin game

Untuk menjalankan game di situs, game tersebut diterjemahkan ke dalam JavaScript di server. Dalam hal ini, ada beberapa batasan. Khususnya, saat menulis game menggunakan mesin JavaRush, Anda tidak dapat bekerja dengan file, atau menggunakan semua metode kelas System , kecuali currentTimeMillis() , setOut() , setErr() , arrayscopy() . Anda juga dapat menggunakan kolom err dan out . Dengan melanggar batasan ini, game tentu saja dapat dikompilasi dan dijalankan, tetapi tidak dapat dipublikasikan. Anda juga tidak akan dapat memublikasikan game dengan loop tak terbatas. 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