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 tulis sebarang kod di dalamnya. Dan enjin permainan itu sendiri akan memanggil mereka apabila pengguna menekan butang tetikus.
onMouseLeftClick(int x, int y)
— dipanggil oleh enjin apabila anda mengklik butang kiri tetikus. Sebagai hujah, ia menerima koordinat sel medan permainan tempat klik berlaku. Sel kiri atas mempunyai koordinat (0,0). Untuk menggunakan kaedah ini, ia mesti ditindih.onMouseRightClick(int x, int y)
— dipanggil apabila anda klik kanan. Berfungsi serupa dengan kaedahonMouseLeftClick(int x, int y)
.
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 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 papan kekunci ditekan. Nilai kekunci yang ditekan (atau Key.UNKNOWN) dihantar kepada kaedah sebagai hujah kunci.onKeyReleased (Key key)
— dipanggil apabila sebarang kekunci papan kekunci dilepaskan. Argumen kunci mengambil nilai kunci yang sepadan (atau Key.UNKNOWN).
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! Dalam versi enjin semasa, jenis Kunci hanya boleh menerima set nilai terhad (9 pcs):
Maknanya | Perkara yang diklik oleh pengguna |
---|---|
Kunci.MASUKKAN | Pengguna menekan butang Enter |
Kunci.MELARIKAN | Pengguna menekan butang Esc |
Kunci.JEDA | Pengguna mengklik butang Jeda |
Kunci.RUANG | Pengguna menekan Space |
Kunci.KIRI | Pengguna menekan Anak Panah Kiri |
Kunci.KANAN | Pengguna menekan Anak Panah Kanan |
Key.UP | Pengguna menekan Anak Panah Atas |
Kunci. BAWAH | Pengguna menekan Anak Panah Bawah |
Kunci.TIDAK DIKENALI | Mana-mana kunci kecuali yang disenaraikan di atas |
3. Bekerja dengan pemasa
Banyak permainan berlaku dalam masa nyata, bermakna walaupun pengguna tidak melakukan apa-apa, acara dalam permainan masih dilaksanakan. Supaya anda boleh melaksanakan permainan sedemikian, kami telah menambah fungsi pemasa pada enjin permainan. Ia berfungsi seperti ini: anda menghidupkan pemasa dan menetapkan tempoh masa selepas itu ia sepatutnya dimatikan. Contohnya, 500 milisaat. Selepas itu, setiap setengah saat Enjin Permainan memanggilonTurnTimer()
. Bilangan yang tidak terhingga kali sehingga pemasa dimatikan. Bagaimana untuk menggunakan pemasa?
-
Hidupkan pemasa.
Terdapat kaedah khas untuk ini
void setTurnTimer(int timeMs)
. Sebagai hujah, kaedah mengambil tempoh selang antara panggilan dalam milisaat (1/1000 saat). Ia cukup untuk memanggilnya sekali, dan enjin permainan akan mula memanggil kaedahonTurn()
setiap kaliCik milisaat. -
Gantikan kaedah onTurn(int).
Untuk melakukan ini, anda perlu mengisytiharkan kaedah
void onTurn(int step)
dalam kelas yang diwarisi daripada kelasGame
. Kaedah ini akan dipanggil oleh enjin permainan. Dalam kes ini, enjin akan setiap kali memindahkan nombor siri panggilan tersebut (1,2,3, ...) kepada kaedah. -
Matikan pemasa.
Jika pemasa tidak lagi diperlukan, apabila, sebagai contoh, pengguna telah menyelesaikan permainan, ia boleh dimatikan. Untuk melakukan ini, anda hanya perlu memanggil
stopTurnTimer()
. -
Percepatkan atau tukar pemasa.
Dalam sesetengah permainan, acara sentiasa dipercepatkan, jadi lebih mudah untuk mempercepatkan pemasa kami (mengurangkan masa antara panggilan). Tiada yang lebih mudah: panggil
setTurnTimer(int timeMs)
semula, dengan nilai baharu, dan masa antara panggilanonTurn()
akan berubah.
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 mudah ini, kami mencipta medan sel 3x3. Kemudian kami menghidupkan pemasa yang akan memanggil kaedah setiap setengah saat onTurn()
. Setiap setengah saat warna sel akan berubah, tetapi kandungannya tidak akan berubah. Selepas 50 saat warna akan berhenti berubah. Itu sahaja! Jika anda ingin mengetahui lebih lanjut tentang bahagian Permainan, berikut ialah beberapa dokumentasi berguna yang boleh membantu:
GO TO FULL VERSION