1. Perkenalan
Mesin game tidak akan banyak berguna jika kita hanya bisa menggunakannya untuk menggambar sesuatu di layar. Untuk menulis game yang lengkap, kami membutuhkannya untuk berinteraksi dengan pengguna! Lebih tepatnya, program kita harus melacak tindakan pengguna dan menanggapinya.
Untuk melakukan ini, mesin game CodeGym memiliki metode khusus yang dipanggil saat pengguna mengklik tombol mouse atau tombol keyboard.
Inti dari kelas ini adalah Anda menulis metode ini sendiri, dan kemudian mesin game CodeGym bertanggung jawab untuk memanggilnya. Yang Anda butuhkan hanyalah mendeklarasikan metode ini dalam kode Anda. Ini lebih mudah dilakukan daripada kedengarannya.
2. Bekerja dengan mouse
Mesin game 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 Anda sendiri yang mewarisi Game
kelas tersebut. Dan kemudian tulis kode apa pun yang Anda inginkan dalam metode ini. Mesin game akan memanggil metode ini saat pengguna mengklik tombol mouse.
onMouseLeftClick(int x, int y)
dipanggil oleh mesin ketika tombol kiri mouse diklik. Parameternya adalah koordinat sel lapangan permainan tempat klik terjadi. Koordinat sel kiri atas adalah (0,0)
. Untuk menggunakan metode ini, Anda perlu menimpanya, menempatkan anotasi @Override
sebelum nama metode.
onMouseRightClick(int x, int y)
dipanggil ketika tombol kanan mouse diklik. Cara kerjanya mirip dengan onMouseLeftClick(int x, int y)
metode.
Contoh penggunaan metode ini:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Set the size of the playing field to 3x3
setScreenSize(3, 3);
// Paint the playing field white
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) {
// Put a "X" in the cell that was clicked with the left mouse button
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell that was clicked with the right mouse button
setCellValue(x, y, "");
}
}
Dalam contoh di atas, kami mendeklarasikan kedua metode: onMouseLeftClick()
dan onMouseRightClick()
. Metode pertama akan dipanggil saat pengguna mengklik tombol kiri mouse pada sel lapangan bermain. Metode kedua akan dipanggil saat tombol kanan mouse diklik.
Sebagai argumen, mesin game CodeGym akan meneruskan (x, y)
koordinat sel lapangan permainan tempat mouse diklik.
3. Bekerja dengan keyboard
Mesin game memiliki dua metode untuk bekerja dengan keyboard:
void onKeyPress(Key key);
void onKeyReleased(Key key);
Jika Anda ingin melakukan sesuatu saat pengguna menekan tombol, Anda hanya perlu mendeklarasikan metode ini di kelas Anda yang mewarisi Game
kelas tersebut.
Anda menulis kode Anda dalam metode ini, dan mesin game akan memanggilnya saat pengguna menekan (atau melepaskan) tombol.
onKeyPress(Key key)
dipanggil saat sembarang tombol ditekan . Nilai dari tombol yang ditekan (atau ) diteruskan ke metode sebagai parameter. Untuk menggunakan metode ini, Anda perlu menimpanya, menempatkan anotasi sebelum nama metode.Key.UNKNOWN
key
@Override
onKeyReleased(Key key)
dipanggil saat tombol apa saja dilepaskan . Nilai kunci yang sesuai (atau ) ditetapkan ke parameter. Untuk menggunakan metode ini, Anda perlu menimpanya, menempatkan anotasi sebelum nama metode.Key.UNKNOWN
key
@Override
Contoh penggunaan metode ini:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Set the size of the playing field to 3x3
setScreenSize(3, 3);
// Paint the playing field white
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) {
// When the spacebar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the spacebar is released, the center cell returns to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
4. Daftar semua kunci yang didukung
Saat mesin CodeGym memanggil metode onKeyPress()
dan onKeyReleased()
, ia memberikan informasi kepada mereka tentang tombol yang ditekan (dilepas). Untuk melakukan ini, mesin CodeGym memiliki tipe khusus yang disebut Key
.
Dalam versi mesin saat ini, Key
tipe ini hanya mendukung 9 nilai terbatas:
Nilai | Apa yang ditekan pengguna |
---|---|
|
Pengguna menekan tombol Enter |
|
Pengguna menekan tombol Esc |
|
Pengguna menekan tombol Jeda |
|
Pengguna menekan tombol Spasi |
|
Pengguna menekan tombol Panah Kiri |
|
Pengguna menekan tombol Panah Kanan |
|
Pengguna menekan tombol Panah Atas |
|
Pengguna menekan tombol Panah Bawah |
|
Kunci apa pun selain yang tercantum di atas |
Jika pemain menekan spasi, maka onKeyPress()
metode akan dipanggil dengan Key.SPACE
parameter. Jika pengguna menekan panah kiri, maka parameternya adalah Key.LEFT
. Jika pengguna menekan sembarang tombol yang tidak ada dalam daftar di atas, maka onKeyPress()
metode tersebut akan dipanggil dengan Key.UNKNOWN
sebagai parameter.
Masalahnya di sini adalah game CodeGym yang ada dirancang untuk dijalankan di ponsel. Alih-alih keyboard standar, kami memiliki 8 tombol virtual:
5. Bekerja dengan pengatur waktu
Banyak game berlangsung dalam waktu nyata, yaitu pengguna mungkin tidak melakukan apa-apa, tetapi peristiwa tertentu masih terjadi di dalam game. Untuk memungkinkan Anda mengimplementasikan game semacam itu, kami menambahkan pengatur waktu ke mesin game.
Begini cara kerjanya: Anda menyalakan pengatur waktu dan menyetel waktu setelah itu harus dipicu. Misalnya, 500 ms. Kemudian, setiap setengah detik, mesin game CodeGym akan memanggil onTurn()
metode tersebut. Jumlah yang tak terbatas — sampai timer dimatikan.
Bagaimana Anda menggunakan pengatur waktu?
1. Nyalakan pengatur waktu
Untuk menyalakan timer, kami punya caranya void setTurnTimer(int timeMs)
. Metode mengambil sebagai argumen durasi (dalam milidetik atau 1/1000 detik) dari interval antara callback. Anda hanya perlu memanggil metode ini satu kali, dan mesin game akan mulai memanggil onTurn()
metode tersebut setiap timeMs
milidetik.
2. Ganti onTurn(int)
metode
Untuk melakukan ini, Anda harus mendeklarasikan void onTurn(int step)
metode di kelas yang mewarisi Game
kelas tersebut. Mesin game akan memanggil metode ini. Dengan setiap panggilan, mesin melewati nomor urut yang mengidentifikasi panggilan metode ( 1
, 2
, 3
, ...).
3. Matikan pengatur waktu
Jika timer sudah tidak diperlukan lagi, misalnya karena pengguna sudah selesai bermain, maka bisa dimatikan. Untuk melakukan ini, cukup panggil metodenya stopTurnTimer()
.
4 Mempercepat/mengubah timer
Di beberapa game, frekuensi kejadian meningkat secara teratur, jadi akan lebih mudah untuk mempercepat pengatur waktu kita, yaitu mengurangi waktu antar panggilan balik. Dan tidak ada yang lebih mudah — cukup panggil setTurnTimer(int timeMs)
lagi dengan nilai baru, dan waktu antara panggilan ke onTurn()
akan berubah.
Contoh:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
...
@Override
public void initialize() {
// Create a 3x3 playing field
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer. The interval between callbacks is 500ms.
}
@Override
public void onTurn(int step) {
if (step == 100) {
stopTurnTimer(); // If this is the 100th callback, then turn off the timer
}
if (step % 2 == 1) {
// If this is an odd calllback, then set the cell background to red
setCellColor(1, 1, Color.RED);
} else {
// If this is an even callback, then set the cell background to blue
setCellColor(1, 1, Color.BLUE);
}
}
...
}
Dalam contoh sederhana ini, kami membuat bidang yang terdiri dari 3 sel kali 3 sel. Kemudian kami menyalakan pengatur waktu yang akan memanggil onTurn()
metode setiap setengah detik.
Di sini, warna sel pusat akan berubah setiap setengah detik. Teks sel tidak akan berubah. Setelah 50 detik (100 panggilan balik), warna akan berhenti berubah dan pengatur waktu akan mati.
GO TO FULL VERSION