1. Sichqoncha bilan ishlash
O'yin dvigatelida sichqoncha bilan ishlashning ikkita usuli mavjud:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
va ularga istalgan kodni yozasiz. Va foydalanuvchi sichqoncha tugmachalarini bosganda, o'yin dvigatelining o'zi ularni chaqiradi.
onMouseLeftClick(int x, int y)
— sichqonchaning chap tugmasini bosganingizda vosita tomonidan chaqiriladi. Argumentlar sifatida u bosish sodir bo'lgan o'yin maydonining katak koordinatalarini oladi. Yuqori chap katakda koordinatalar (0,0) mavjud. Ushbu usuldan foydalanish uchun uni bekor qilish kerak.onMouseRightClick(int x, int y)
- sichqonchaning o'ng tugmachasini bosganingizda chaqiriladi. Usulga o'xshash ishlaydionMouseLeftClick(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 bilan ishlash
O'yin dvigatelida klaviatura bilan ishlashning ikkita usuli mavjud:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— istalgan klaviatura tugmasi bosilganda chaqiriladi. Bosilgan tugmaning qiymati (yoki Key.UNKNOWN) kalit argumenti sifatida usulga uzatiladi.onKeyReleased (Key key)
— istalgan klaviatura tugmasi bo'shatilganda chaqiriladi. Kalit argumenti tegishli kalit (yoki Key.UNKNOWN) qiymatini oladi.
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);
}
}
}
Muhim! Dvigatelning joriy versiyasida Kalit turi faqat cheklangan qiymatlar to'plamini qabul qilishi mumkin (9 dona):
Ma'nosi | Foydalanuvchi nima bosdi |
---|---|
Klaviatura.ENTER | Foydalanuvchi Enter tugmasini bosdi |
Kalit.QOCHISH | Foydalanuvchi Esc tugmasini bosdi |
Tugma. PAUSE | Foydalanuvchi Pauza tugmasini bosdi |
Key.SPACE | Foydalanuvchi Space tugmasini bosdi |
Klaviatura.CHAP | Foydalanuvchi chap o'qni bosdi |
Kalit. O‘ng | Foydalanuvchi o'ng strelkani bosdi |
Key.UP | Foydalanuvchi yuqoriga o'qni bosdi |
Klaviatura. DOWN | Foydalanuvchi pastga o'qni bosdi |
Kalit. noma'lum | Yuqorida sanab o'tilganlardan tashqari har qanday kalit |
3. Taymer bilan ishlash
Ko'pgina o'yinlar real vaqtda sodir bo'ladi, ya'ni foydalanuvchi hech narsa qilmasa ham, o'yindagi voqealar baribir bajariladi. Bunday o'yinlarni amalga oshirishingiz uchun biz o'yin mexanizmiga taymer funksiyasini qo'shdik. Bu shunday ishlaydi: siz taymerni yoqasiz va u o'chadigan vaqtni belgilaysiz. Masalan, 500 millisekund. Shundan so'ng, har yarim soniyada Game EngineonTurnTimer()
. Taymer o'chirilgunga qadar cheksiz ko'p marta. Taymerdan qanday foydalanish kerak?
-
Taymerni yoqing.
Buning uchun maxsus usul mavjud
void setTurnTimer(int timeMs)
. Argument sifatida, usul qo'ng'iroqlar orasidagi intervalning davomiyligini millisekundlarda (1/1000 soniya) oladi. Uni bir marta chaqirish kifoya va o'yin mexanizmionTurn()
har safar Ms millisekundlarda usulni chaqira boshlaydi. -
Biz onTurn(int) usulini bekor qilamiz.
void onTurn(int step)
Buni amalga oshirish uchun siz sinfdan meros qilib olingan sinfdagi usulni e'lon qilishingiz kerakGame
. Ushbu usul o'yin mexanizmi tomonidan chaqiriladi. Bunday holda, vosita har safar bunday qo'ng'iroqning seriya raqamini (1,2,3, ...) usulga o'tkazadi. -
Taymerni o'chiring.
Agar taymer endi kerak bo'lmasa, masalan, foydalanuvchi o'yinni tugatganida, uni o'chirib qo'yish mumkin. Buning uchun siz shunchaki qo'ng'iroq qilishingiz kerak
stopTurnTimer()
. -
Tezlashtiring yoki taymerni o'zgartiring.
Ba'zi o'yinlarda voqealar doimiy ravishda tezlashadi, shuning uchun bizning taymerimizni tezlashtirish qulay bo'ladi (qo'ng'iroqlar orasidagi vaqtni qisqartirish). Oddiyroq narsa yo'q:
setTurnTimer(int timeMs)
yangi qiymat bilan qayta qo'ng'iroq qiling va qo'ng'iroqlar orasidagi vaqtonTurn()
o'zgaradi.
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);
}
}
…
}
Ushbu oddiy misolda biz 3x3 hujayralar maydonini yaratdik. Keyin biz har yarim soniyada usulni chaqiradigan taymerni yoqdik onTurn()
. Har yarim soniyada hujayraning rangi o'zgaradi, lekin uning tarkibi o'zgarmaydi. 50 soniyadan keyin rang o'zgarishni to'xtatadi. Ana xolos! Oʻyinlar boʻlimi haqida koʻproq maʼlumotga ega boʻlishni istasangiz, bu yerda yordam berishi mumkin boʻlgan foydali hujjatlar mavjud:
GO TO FULL VERSION