1. Siçan ilə işləmək
Oyun mühərrikində siçan ilə işləmək üçün iki üsul var:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
və onlara istənilən kodu yazırsınız. İstifadəçi siçan düymələrini basdıqda oyun mühərriki özü onları çağıracaq.
onMouseLeftClick(int x, int y)
— siçanın sol düyməsini sıxdığınız zaman mühərrik tərəfindən çağırılır. Arqumentlər olaraq, klik baş verdiyi oyun sahəsinin xanasının koordinatlarını alır. Yuxarı sol xananın koordinatları (0,0) var. Bu metoddan istifadə etmək üçün onu ləğv etmək lazımdır.onMouseRightClick(int x, int y)
— sağ kliklədiyiniz zaman zəng edilir. Metodla oxşar işləyironMouseLeftClick(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. Klaviatura ilə işləmək
Oyun mühərrikində klaviatura ilə işləmək üçün iki üsul var:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— istənilən klaviatura düyməsi basıldıqda çağırılır. Basılan düymənin (və ya Key.UNKNOWN) dəyəri əsas arqument kimi metoda ötürülür.onKeyReleased (Key key)
— istənilən klaviatura düyməsi buraxıldıqda çağırılır. Açar arqument müvafiq açarın (və ya Key.UNKNOWN) qiymətini alır.
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);
}
}
}
Vacibdir! Mühərrikin cari versiyasında Açar növü yalnız məhdud dəyərlər dəstini qəbul edə bilər (9 ədəd):
Məna | İstifadəçinin klik etdiyi şey |
---|---|
Açar.ENTER | İstifadəçi Enter düyməsini sıxdı |
Açar. ESCAPE | İstifadəçi Esc düyməsini sıxdı |
Açar.PAUSE | İstifadəçi Pause düyməsini sıxdı |
Açar. SPACE | İstifadəçi Space düyməsini sıxdı |
Açar.SOL | İstifadəçi Sol Oxa basdı |
Açar.SAĞ | İstifadəçi Sağ Oxa basdı |
Key.UP | İstifadəçi Yuxarı Oxa basdı |
Açar. AŞAĞI | İstifadəçi Aşağı Oxa basdı |
Açar.Naməlum | Yuxarıda sadalananlardan başqa istənilən açar |
3. Taymerlə işləmək
Bir çox oyun real vaxt rejimində baş verir, yəni istifadəçi heç nə etməsə belə, oyundakı hadisələr hələ də icra olunur. Bu cür oyunları həyata keçirə bilməniz üçün oyun mühərrikinə taymer funksiyası əlavə etdik. Bu, belə işləyir: siz taymeri yandırırsınız və onun sönəcəyi vaxt müddətini təyin edirsiniz. Məsələn, 500 millisaniyə. Bundan sonra hər yarım saniyədə Game EngineonTurnTimer()
. Taymer söndürülənə qədər sonsuz sayda. Taymeri necə istifadə etmək olar?
-
Taymeri yandırın.
Bunun üçün xüsusi bir üsul var
void setTurnTimer(int timeMs)
. Arqument olaraq, metod zənglər arasındakı intervalın müddətini millisaniyələrlə (1/1000 saniyə) götürür. Bir dəfə zəng etmək kifayətdir və oyun mühərrikionTurn()
hər dəfə Ms millisaniyəlik metodu çağırmağa başlayacaq. -
OnTurn(int) metodunu ləğv edirik.
void onTurn(int step)
Bunu etmək üçün, sinifdən miras qalmış bir sinifdə metodu elan etməlisinizGame
. Bu üsul oyun mühərriki tərəfindən çağırılacaq. Bu halda, mühərrik hər dəfə belə bir çağırışın seriya nömrəsini (1,2,3, ...) metoda köçürür. -
Taymeri söndürün.
Taymer artıq lazım deyilsə, məsələn, istifadəçi oyunu bitirdikdə onu söndürmək olar. Bunu etmək üçün sadəcə zəng etmək lazımdır
stopTurnTimer()
. -
Taymeri sürətləndirin və ya dəyişdirin.
Bəzi oyunlarda hadisələr daim sürətlənir, ona görə də taymerimizi sürətləndirmək (zənglər arasındakı vaxtı azaltmaq) rahat olardı. Daha sadə bir şey yoxdur:
setTurnTimer(int timeMs)
yeni bir dəyərlə yenidən zəng edin və zənglər arasındakı vaxtonTurn()
dəyişəcək.
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);
}
}
…
}
Bu sadə nümunədə biz 3x3 xanalardan ibarət bir sahə yaratdıq. Sonra hər yarım saniyədən bir metodu çağıracaq taymeri işə saldıq onTurn()
. Hər yarım saniyədə hüceyrənin rəngi dəyişəcək, lakin məzmunu dəyişməyəcək. 50 saniyədən sonra rəng dəyişməyi dayandıracaq. Hamısı budur! Oyunlar bölməsi haqqında daha çox öyrənmək istəyirsinizsə, burada kömək edə biləcək bəzi faydalı sənədlər var:
GO TO FULL VERSION