1. Чычкан менен иштөө
Оюн кыймылдаткычында чычкан менен иштөөнүн эки ыкмасы бар:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
, аларга каалаган codeду жазасыз. Колдонуучу чычкан баскычтарын басканда оюн кыймылдаткычы өзү аларды чакырат.
onMouseLeftClick(int x, int y)
— чычкандын сол баскычын басканда кыймылдаткыч тарабынан чакырылат. Аргументтер катары, ал чыкылdateу пайда болгон оюн талаасынын уячасынын координаттарын алат. Жогорку сол уячанын координаттары бар (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 даана):
Мааниси | Колдонуучу эмнени басыңыз |
---|---|
Key.ENTER | Колдонуучу Enter баскычын басты |
Key.ESCAPE | Колдонуучу Esc баскычын басты |
Key.PAUSE | Колдонуучу Тыным баскычын чыкылдаткан |
Key.SPACE | Колдонуучу Space баскычын басыңыз |
Ачкыч.СОЛ | Колдонуучу сол жебени басып койду |
Key.RIGHT | Колдонуучу Оң жебени басты |
Key.UP | Колдонуучу "Жогорку жебени" басты |
Негизги төмөн | Колдонуучу ылдый жебени басты |
Key.UNKNOWN | Жогоруда саналгандардан башка каалаган ачкыч |
3. Таймер менен иштөө
Көптөгөн оюндар реалдуу убакытта ишке ашат, башкача айтканда, колдонуучу эч нерсе кылбаса да, оюндагы окуялар дагы эле аткарылат. Мындай оюндарды ишке ашыруу үчүн, биз оюн кыймылдаткычына таймер функциясын коштук. Ал төмөнкүдөй иштейт: сиз таймерди күйгүзөсүз жана ал өчүп турган убакытты орнотосуз. Мисалы, 500 миллисекунд. Андан кийин, ар бир жарым секунданын ичинде Оюн кыймылдаткычыonTurnTimer()
. Таймер өчүрүлгөнгө чейин чексиз сандагы. Таймерди кантип колдонсо болот?
-
Таймерди күйгүзүңүз.
Бул үчүн атайын ыкма бар
void setTurnTimer(int timeMs)
. Аргумент катары, ыкма чалуулардын ортосундагы интервалдын узактыгын миллисекунд менен алат (секунддун 1/1000). Аны бир жолу чакыруу жетиштүү жана оюн кыймылдаткычыonTurn()
ар бир миллисекунд сайын ыкманы чакыра баштайт. -
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 секунддан кийин түс өзгөрбөйт. Баары болду! Эгер сиз Оюндар бөлүмү жөнүндө көбүрөөк билгиңиз келсе, бул жерде жардам бере турган кээ бир пайдалуу documentтер бар:
GO TO FULL VERSION