1. Кор бо муш
Муҳаррики бозӣ ду усули кор бо муш дорад:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
ва дар онҳо ҳама гуна рамз нависед. Ва худи муҳаррики бозӣ ба онҳо занг мезанад, вақте ки корбар тугмаҳои мушро пахш мекунад.
onMouseLeftClick(int x, int y)
— хангоми пахш кардани тугмаи чапи муш аз тарафи двигатель даъват карда мешавад. Ҳамчун далел, он координатҳои ячейкаи майдони бозиро, ки клик рух додааст, мегирад. Ячеки чапи болои координатҳо дорад (0,0). Барои истифодаи ин усул, он бояд аз байн бурда шавад.onMouseRightClick(int x, int y)
— ҳангоми пахши тугмаи рост занг занед. Ба усул монанд кор мекунадonMouseLeftClick(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. Кор бо клавиатура
Муҳаррики бозӣ ду усули кор бо клавиатура дорад:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— занг зада мешавад, вақте ки ягон тугмаи клавиатура пахш карда мешавад. Қимати калиди пахшшуда (ё Key.UNKNOWN) ба усул ҳамчун далели калидӣ интиқол дода мешавад.onKeyReleased (Key key)
— даъват вақте ки ягон калиди клавиатура озод карда мешавад. Аргументи калидӣ арзиши калиди мувофиқро мегирад (ё 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);
}
}
}
Муҳим! Дар versionи ҷории муҳаррик, навъи Калид метавонад танҳо маҷмӯи маҳдуди арзишҳоро қабул кунад (9 дона):
Маънои | Он чизе ки корбар клик кардааст |
---|---|
Калид. ENTER | Истифодабаранда тугмаи Enterро пахш кард |
Калид. ҒУРО | Истифодабаранда тугмаи Esc-ро пахш кард |
Калид. ТАВАККИ | Истифодабаранда тугмаи Таваққуфро пахш кард |
Key.SPACE | Истифодабаранда Space-ро пахш кард |
Калид. ЧАП | Истифодабаранда тирчаи чапро пахш кард |
Калид. РОСТ | Истифодабаранда тирчаи ростро пахш кард |
Key.UP | Истифодабаранда тирчаи болоро пахш кард |
Тугма. ПОЁН | Истифодабаранда тирчаи поёнро пахш кард |
Калид.НОМАЪЛУМ | Ҳама гуна калид ба истиснои калидҳои дар боло номбаршуда |
3. Кор бо таймер
Бисёр бозиҳо дар вақти воқеӣ сурат мегиранд, яъне ҳатто агар корбар ҳеҷ коре накунад, рӯйдодҳои бозӣ ҳанӯз иҷро мешаванд. Барои он ки шумо чунин бозиҳоро амалӣ карда тавонед, мо ба муҳаррики бозӣ функсияи таймерро илова кардем. Он чунин кор мекунад: шумо таймерро фаъол мекунед ва давраи вақтро таъин мекунед, ки пас аз он он бояд хомӯш шавад. Масалан, 500 миллисония. Баъд аз ин, ҳар ним сония Engine Game баonTurnTimer()
. Шумораи беохир то хомӯш кардани таймер. Таймерро чӣ тавр истифода бурдан мумкин аст?
-
Таймерро фаъол созед.
Барои ин усули махсус вуҷуд дорад
void setTurnTimer(int timeMs)
. Ҳамчун далел, усул давомнокии фосилаи байни зангҳоро дар миллисонияҳо (1/1000 сония) мегирад.onTurn()
Ба он як маротиба занг задан кифоя аст ва муҳаррики бозӣ ҳар дафъа Ms миллисония ба ин усул занг мезанад . -
Мо усули onTurn(int)-ро бекор мекунем.
Барои ин ба шумо лозим аст, ки методро
void onTurn(int step)
дар синфе, ки аз синф мерос гирифта шудааст, эълон кунедGame
. Ин усул аз ҷониби муҳаррики бозӣ даъват карда мешавад. Дар ин ҳолат, муҳаррик ҳар дафъа рақами силсилавии чунин зангро (1,2,3, ...) ба усул интиқол медиҳад. -
Таймерро хомӯш кунед.
Агар таймер дигар лозим набошад, вақте ки масалан, корбар бозиро анҷом додааст, онро хомӯш кардан мумкин аст. Барои ин ба шумо танҳо занг задан лозим аст
stopTurnTimer()
. -
Таймерро суръат диҳед ё тағир диҳед.
Дар баъзе бозиҳо, рӯйдодҳо мунтазам суръат мегиранд, аз ин рӯ таймерро суръат бахшидан қулай мебуд (вақти байни зангҳоро кам кунед). Ҳеҷ чизи соддатар нест:
setTurnTimer(int timeMs)
дубора занг занед, бо арзиши нав ва вақти байни зангҳоonTurn()
тағир меёбад.
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);
}
}
…
}
Дар ин мисоли оддӣ, мо майдони ҳуҷайраҳои 3x3 сохтаем. Пас аз он мо таймерро фаъол кардем, ки ҳар ним сония ин усулро даъват мекунад onTurn()
. Дар хар ним сония ранги ячейка тагьир меёбад, аммо мазмуни он тагьир намеёбад. Пас аз 50 сония тағирёбии ранг қатъ мегардад. Ҳамааш ҳамин! Агар шумо хоҳед, ки дар бораи бахши Бозиҳо маълумоти бештар гиред, дар ин ҷо ҳуҷҷатҳои муфиде ҳастанд, ки метавонанд кӯмак расонанд:
GO TO FULL VERSION