JavaRush /Java блогу /Random-KY /JavaRush боюнча "Оюндар" бөлүмү: Окуяларды башкаруу

JavaRush боюнча "Оюндар" бөлүмү: Окуяларды башкаруу

Группада жарыяланган
JavaRushтан "Оюндар" - бул популярдуу оюндардын өз versionларын түзүү үчүн кызыктуу жана масштабдуу тапшырмалары бар жаңы бөлүм. Бул жөнөкөй: ар бир оюн долбоору субмилдеттерге бөлүнөт. Аларды бир-бирден толуктап, оюн даяр. Сиз аны социалдык тармактарда бөлүшүп, досторуңузду ойноого чакыра аласыз. Бул макалада биз оюндарды жазууда окуяны кайра иштетүүбөлүм ыкмалары жөнүндө кеңири сөз кылабыз .

1. Чычкан менен иштөө

Оюн кыймылдаткычында чычкан менен иштөөнүн эки ыкмасы бар:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Сиз жөн гана мураска алынган оюн классында бул ыкмаларды жарыялап Game, аларга каалаган codeду жазасыз. Колдонуучу чычкан баскычтарын басканда оюн кыймылдаткычы өзү аларды чакырат.
  1. onMouseLeftClick(int x, int y)— чычкандын сол баскычын басканда кыймылдаткыч тарабынан чакырылат. Аргументтер катары, ал чыкылdateу пайда болгон оюн талаасынын уячасынын координаттарын алат. Жогорку сол уячанын координаттары бар (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);
        }
    }
}
Маанилүү! Кыймылдаткычтын учурдагы versionсында Ачкыч түрү чектелген маанилердин топтомун гана кабыл алат (9 даана):
Мааниси Колдонуучу эмнени басыңыз
Key.ENTER Колдонуучу Enter баскычын басты
Key.ESCAPE Колдонуучу Esc баскычын басты
Key.PAUSE Колдонуучу Тыным баскычын чыкылдаткан
Key.SPACE Колдонуучу Space баскычын басыңыз
Ачкыч.СОЛ Колдонуучу сол жебени басып койду
Key.RIGHT Колдонуучу Оң жебени басты
Key.UP Колдонуучу "Жогорку жебени" басты
Негизги төмөн Колдонуучу ылдый жебени басты
Key.UNKNOWN Жогоруда саналгандардан башка каалаган ачкыч

3. Таймер менен иштөө

Көптөгөн оюндар реалдуу убакытта ишке ашат, башкача айтканда, колдонуучу эч нерсе кылбаса да, оюндагы окуялар дагы эле аткарылат. Мындай оюндарды ишке ашыруу үчүн, биз оюн кыймылдаткычына таймер функциясын коштук. Ал төмөнкүдөй иштейт: сиз таймерди күйгүзөсүз жана ал өчүп турган убакытты орнотосуз. Мисалы, 500 миллисекунд. Андан кийин, ар бир жарым секунданын ичинде Оюн кыймылдаткычы onTurnTimer(). Таймер өчүрүлгөнгө чейин чексиз сандагы. Таймерди кантип колдонсо болот?
  1. Таймерди күйгүзүңүз.

    Бул үчүн атайын ыкма бар void setTurnTimer(int timeMs). Аргумент катары, ыкма чалуулардын ортосундагы интервалдын узактыгын миллисекунд менен алат (секунддун 1/1000). Аны бир жолу чакыруу жетиштүү жана оюн кыймылдаткычы onTurn()ар бир миллисекунд сайын ыкманы чакыра баштайт.

  2. onTurn(int) ыкмасын жокко чыгарыңыз.

    void onTurn(int step)Бул үчүн, класстан мураска алынган класста методду жарыялоо керек Game. Бул ыкма оюн кыймылдаткычы тарабынан чакырылат. Бул учурда, кыймылдаткыч ар бир жолу мындай чакыруунун сериялык номерин (1,2,3, ...) ыкмага өткөрүп берет.

  3. Таймерди өчүрүңүз.

    Таймердин кереги жок болсо, мисалы, колдонуучу оюнду аяктаганда, аны өчүрүп койсо болот. Бул үчүн, сиз жөн гана чакыруу керек stopTurnTimer().

  4. Таймерди тездетиңиз же өзгөртүңүз.

    Кээ бир оюндарда окуялар тынымсыз тездетип турат, ошондуктан биздин таймерди тездетүү ыңгайлуу болмок (чалуулардын ортосундагы убакытты кыскартуу). Жөнөкөй нерсе жок: 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тер бар:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION