JavaRush /Java блогы /Random-KK /JavaRush жүйесіндегі «Ойындар» бөлімі: Оқиғаларды өңдеу

JavaRush жүйесіндегі «Ойындар» бөлімі: Оқиғаларды өңдеу

Топта жарияланған
JavaRush ұсынған «Ойындар» - танымал ойындардың жеке нұсқаларын жасауға арналған қызықты және ауқымды тапсырмалары бар жаңа бөлім. Бұл қарапайым: әрбір ойын жобасы қосалқы тапсырмаларға бөлінген. Оларды бір-бірден аяқтаңыз және ойын дайын. Сіз оны әлеуметтік желілерде бөлісе аласыз және достарыңызды ойнауға шақыра аласыз. Бұл мақалада біз ойын жазу кезінде оқиғаларды өңдеуБөлім әдістері туралы егжей-тегжейлі сөйлесеміз .

1. Тінтуірмен жұмыс

Ойын қозғалтқышында тінтуірмен жұмыс істеудің екі әдісі бар:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Сіз тек мұраға алынған ойын класында осы әдістерді жариялайсыз Gameжәне оларға кез келген codeты жазасыз. Пайдаланушы тінтуірдің түймелерін басқан кезде ойын қозғалтқышының өзі оларды шақырады.
  1. onMouseLeftClick(int x, int y)— тінтуірдің сол жақ батырмасын басқан кезде қозғалтқыш шақырады. Аргументтер ретінде ол шерту орын алған ойын өрісінің ұяшығының координаттарын алады. Жоғарғы сол жақ ұяшықта координаталар (0,0) бар. Бұл әдісті пайдалану үшін оны қайта анықтау керек.

  2. 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);
Пайдаланушы пернетақтадағы түймені басқанда әрекеттердің орын алуын қаласаңыз, осы әдістерді Ойыннан мұраға алатын ойын сыныбында жариялаңыз және оларға codeты жазыңыз. Пайдаланушы пернетақта пернесін басқанда немесе босатқанда ойын қозғалтқышының өзі оларды шақырады.
  1. onKeyPress (Key key)— кез келген пернетақта пернесі басылғанда шақырылады. Басылған перненің мәні (немесе Key.UNKNOWN) кілт аргументі ретінде әдіске жіберіледі.

  2. 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 Engine onTurnTimer(). Таймер өшірілгенге дейін шексіз сан. Таймерді қалай пайдалануға болады?
  1. Таймерді қосыңыз.

    Бұл үшін арнайы әдіс бар void setTurnTimer(int timeMs). Аргумент ретінде әдіс қоңыраулар арасындағы интервалдың ұзақтығын миллисекундпен қабылдайды (секундтың 1/1000). Оны бір рет шақыру жеткілікті, ал ойын қозғалтқышы onTurn()әр миллисекунд сайын әдісті шақыра бастайды.

  2. onTurn(int) әдісін қайта анықтау.

    void onTurn(int step)Ол үшін класстан мұраланған сыныпта әдісті жариялау керек Game. Бұл әдіс ойын қозғалтқышы арқылы шақырылады. Бұл жағдайда қозғалтқыш әр жолы мұндай қоңыраудың сериялық нөмірін (1,2,3, ...) әдіске ауыстырады.

  3. Таймерді өшіріңіз.

    Таймер қажет болмаса, мысалы, пайдаланушы ойынды аяқтаған кезде, оны өшіруге болады. Мұны істеу үшін сізге жай ғана қоңырау шалу керек stopTurnTimer().

  4. Таймерді жылдамдатыңыз немесе өзгертіңіз.

    Кейбір ойындарда оқиғалар үнемі жылдамдатады, сондықтан таймерді жылдам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 секундтан кейін түс өзгермейді. Бар болғаны! Ойындар бөлімі туралы көбірек білгіңіз келсе, мына жерде көмектесе алатын пайдалы құжат бар:
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION