1. Bekerja dengan tetikus
Enjin permainan mempunyai dua kaedah untuk bekerja dengan tetikus:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
, dan tambahkan sebarang kod yang anda mahukan padanya. Enjin permainan akan memanggil mereka apabila pengguna mengklik butang tetikus.
-
onMouseLeftClick(int x, int y)
— dipanggil oleh enjin apabila butang kiri tetikus diklik. Parameternya ialah koordinat sel medan permainan tempat klik berlaku. Sel kiri atas mempunyai koordinat (0, 0). Anda perlu mengatasi kaedah ini untuk menggunakannya. -
onMouseRightClick(int x, int y)
— dipanggil apabila butang kanan tetikus diklik. Kaedah ini berfungsi sepertionMouseLeftClick(int x, int y)
kaedah.
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) {
// Set "X" in the cell where the left mouse click occurred
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell where the right mouse click occurred
setCellValue(x, y, "");
}
}
2. Bekerja dengan papan kekunci
Enjin permainan mempunyai dua kaedah untuk bekerja dengan papan kekunci:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— dipanggil apabila sebarang kekunci ditekan. Parameter kekunci ialah kekunci yang ditekan (atau Kekunci.TIDAK DIKETAHUI). -
onKeyReleased(Key key)
— dipanggil apabila sebarang kunci dilepaskan. Parameter kunci ialah kunci yang sepadan (atau Key.UNKNOWN).
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 space bar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the space bar is released, the center cell changes back to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
Penting! Dalam versi semasa enjin permainan, jenis Kunci mempunyai set terhad sembilan nilai:Nilai | Kekunci ditekan oleh pengguna |
---|---|
Kunci.MASUKKAN | Pengguna menekan Enter |
Kunci.MELARIKAN DIRI | Pengguna menekan Esc |
Kunci.JEDA | Pengguna menekan Jeda |
Kunci.RUANG | Pengguna menekan Space |
Kunci.KIRI | Pengguna menekan kekunci anak panah kiri |
Kunci.KANAN | Pengguna menekan kekunci anak panah kanan |
Key.UP | Pengguna menekan kekunci anak panah ke atas |
Kunci. BAWAH | Pengguna menekan kekunci bawah |
Kunci.TIDAK DIKENALI | Pengguna menekan kekunci selain daripada yang di atas |
3. Bekerja dengan pemasa
Banyak permainan berlaku dalam masa nyata, iaitu walaupun pengguna tidak melakukan apa-apa, peristiwa masih berlaku dalam permainan. Untuk membolehkan anda melaksanakan permainan sedemikian, kami menambah pemasa pada enjin permainan. Ia berfungsi seperti ini: anda menghidupkan pemasa dan menetapkan selang pemasa. Contohnya, 500 milisaat. Kemudian, setiap setengah saat enjin permainan memanggilonTurnTimer()
kaedah. Lagi dan lagi selama-lamanya — sehingga pemasa dimatikan. Jadi bagaimana anda menggunakan pemasa?
-
Hidupkan pemasa.
Untuk melakukan ini, terdapat kaedah khas. Kaedah ini mengambil sebagai hujah selang antara panggilan dalam milisaat (1 milisaat = 1/1000 saat). Anda hanya perlu memanggilnya sekali, dan enjin permainan akan mula memanggil kaedah setiap kaliCik milisaat.
void setTurnTimer(int timeMs)
onTurn()
-
Gantikan kaedah onTurn(int).
Untuk melakukan ini, anda perlu mengisytiharkan kaedah dalam kelas yang mewarisi . Kaedah ini akan dipanggil oleh enjin permainan. Lebih-lebih lagi, dengan setiap panggilan enjin permainan akan menghantar kepada kaedah pengecam berjujukan untuk panggilan (1, 2, 3, …).
void onTurn(int step)
Game
-
Matikan pemasa.
Jika pemasa tidak lagi diperlukan, contohnya, apabila pengguna menyelesaikan permainan, anda boleh mematikannya. Untuk melakukan ini, anda hanya perlu memanggil kaedah.
stopTurnTimer()
-
Mempercepatkan atau menukar pemasa.
Dalam sesetengah permainan, kadar peristiwa berlaku sentiasa dipercepatkan, jadi lebih mudah untuk mempercepatkan pemasa kami (mengurangkan masa antara panggilan). Tiada yang lebih mudah: panggil
setTurnTimer(int timeMs)
sekali lagi dengan nilai baharu dan masa antaraonTurn()
panggilan akan berubah.
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Create a playing field that is 3 cells x 3 cells
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer, the interval between calls is 500ms.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // If 100 calls have been made, turn off the timer
}
if (step % 2 == 1) {
// If this call is odd, set the cell background to red
setCellColor(1, 1, Color.RED);
}
else {
// If this call is even, set the cell background to blue
setCellColor(1, 1, Color.BLUE);
}
}
…
}
Dalam contoh mudah ini, kami mencipta medan iaitu 3 sel x 3 sel. Kemudian kami memulakan pemasa yang akan memanggil onTurn()
kaedah setiap setengah saat. Setiap setengah saat, warna sel akan berubah, tetapi kandungannya tidak akan berubah. Selepas 50 saat, warna tidak akan berubah lagi. Itu sahaja buat masa ini! Jika anda ingin mengetahui lebih lanjut tentang bahagian "Permainan", berikut ialah beberapa dokumentasi berguna yang boleh membantu:
GO TO FULL VERSION