1. Тінтуірмен жұмыс
Ойын қозғалтқышында тінтуірмен жұмыс істеудің екі әдісі бар:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
және оларға кез келген codeты жазасыз. Пайдаланушы тінтуірдің түймелерін басқан кезде ойын қозғалтқышының өзі оларды шақырады.
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);
}
}
}
Маңызды! Қозғалтқыштың ағымдағы нұсқасында Кілт түрі тек шектеулі мәндер жинағын қабылдай алады (9 дана):
Мағынасы | Пайдаланушы нені басқан |
---|---|
ENTER пернесі | Пайдаланушы Enter түймесін басқан |
Key.ESCAPE | Пайдаланушы Esc түймесін басты |
Кілт. ТОҚТАТУ | Пайдаланушы кідірту түймесін басқан |
Key.SPACE | Пайдаланушы Space пернесін басады |
Кілт.СОЛ | Пайдаланушы сол жақ көрсеткіні басқан |
Кілт. ОҢ | Пайдаланушы оң жақ көрсеткіні басты |
KEY.UP | Пайдаланушы жоғары көрсеткіні басқан |
ТӨМЕН | Пайдаланушы төмен көрсеткіні басқан |
Кілт.БЕЛГІСІЗ | Жоғарыда аталғандардан басқа кез келген кілт |
3. Таймермен жұмыс
Көптеген ойындар нақты уақыт режимінде өтеді, яғни пайдаланушы ештеңе жасамаса да, ойындағы оқиғалар әлі де орындалады. Осындай ойындарды жүзеге асыру үшін біз ойын қозғалтқышына таймер функциясын қостық. Ол келесідей жұмыс істейді: сіз таймерді қосасыз және ол өшетін уақыт кезеңін орнатасыз. Мысалы, 500 миллисекунд. Осыдан кейін әр жарты секунд сайын Game EngineonTurnTimer()
. Таймер өшірілгенге дейін шексіз сан. Таймерді қалай пайдалануға болады?
-
Таймерді қосыңыз.
Бұл үшін арнайы әдіс бар
void setTurnTimer(int timeMs)
. Аргумент ретінде әдіс қоңыраулар арасындағы интервалдың ұзақтығын миллисекундпен қабылдайды (секундтың 1/1000). Оны бір рет шақыру жеткілікті, ал ойын қозғалтқышыonTurn()
әр миллисекунд сайын әдісті шақыра бастайды. -
onTurn(int) әдісін қайта анықтау.
void onTurn(int step)
Ол үшін класстан мұраланған сыныпта әдісті жариялау керекGame
. Бұл әдіс ойын қозғалтқышы арқылы шақырылады. Бұл жағдайда қозғалтқыш әр жолы мұндай қоңыраудың сериялық нөмірін (1,2,3, ...) әдіске ауыстырады. -
Таймерді өшіріңіз.
Таймер қажет болмаса, мысалы, пайдаланушы ойынды аяқтаған кезде, оны өшіруге болады. Мұны істеу үшін сізге жай ғана қоңырау шалу керек
stopTurnTimer()
. -
Таймерді жылдамдатыңыз немесе өзгертіңіз.
Кейбір ойындарда оқиғалар үнемі жылдамдатады, сондықтан таймерді жылдамdate ыңғайлы болар еді (қоңыраулар арасындағы уақытты азайтыңыз). Одан оңай ештеңе жоқ:
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