JavaRush /Java Blog /Random-TL /Seksyon "Mga Laro" sa JavaRush: Paghawak ng Kaganapan

Seksyon "Mga Laro" sa JavaRush: Paghawak ng Kaganapan

Nai-publish sa grupo
Ang "Mga Laro" mula sa JavaRush ay isang bagong seksyon na may kawili-wili at malakihang mga gawain para sa paglikha ng sarili mong mga bersyon ng mga sikat na laro. Ito ay simple: ang bawat proyekto ng laro ay nahahati sa mga subtask. Kumpletuhin ang mga ito nang isa-isa at handa na ang laro. Maaari mo itong ibahagi sa mga social network at mag-imbita ng mga kaibigan na maglaro. Раздел Sa materyal na ito ay pag-uusapan natin nang detalyado ang tungkol sa mga pamamaraan ng pagproseso ng kaganapan kapag nagsusulat ng mga laro.

1. Paggawa gamit ang mouse

Ang engine ng laro ay may dalawang pamamaraan para sa pagtatrabaho gamit ang mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Idedeklara mo lang ang mga pamamaraang ito sa klase ng laro na minana mula sa Game, at isulat ang anumang code sa mga ito. At ang game engine mismo ay tatawag sa kanila kapag pinindot ng user ang mga pindutan ng mouse.
  1. onMouseLeftClick(int x, int y)— tinawag ng makina kapag na-click mo ang kaliwang pindutan ng mouse. Bilang mga argumento, natatanggap nito ang mga coordinate ng cell ng playing field kung saan naganap ang pag-click. Ang itaas na kaliwang cell ay may mga coordinate (0,0). Upang magamit ang paraang ito, dapat itong i-override.

  2. onMouseRightClick(int x, int y)— tinawag kapag nag-right click ka. Gumagana katulad ng pamamaraan onMouseLeftClick(int x, int y).
Halimbawa ng paggamit ng mga pamamaraan:
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. Paggawa gamit ang keyboard

Ang engine ng laro ay may dalawang paraan para sa pagtatrabaho sa keyboard:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Kung gusto mong magkaroon ng mga aksyon kapag pinindot ng user ang isang button sa keyboard, ideklara ang mga paraang ito sa iyong klase ng laro na nagmana mula sa Game at isulat ang iyong code sa mga ito. Ang game engine mismo ay tatawag sa kanila kapag pinindot o inilabas ng user ang isang keyboard key.
  1. onKeyPress (Key key)— tinatawag kapag pinindot ang anumang keyboard key. Ang halaga ng pinindot na key (o Key.UNKNOWN) ay ipinapasa sa pamamaraan bilang key argument.

  2. onKeyReleased (Key key)— tinatawag kapag ang anumang key ng keyboard ay inilabas. Kinukuha ng key argument ang halaga ng kaukulang key (o Key.UNKNOWN).
Halimbawa ng paggamit ng mga pamamaraan:
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);
        }
    }
}
Mahalaga! Sa kasalukuyang bersyon ng engine, ang uri ng Key ay maaari lamang tumanggap ng isang limitadong hanay ng mga halaga (9 na mga PC):
Ibig sabihin Ano ang na-click ng gumagamit
Susi.ENTER Pinindot ng user ang Enter button
Susi.TAKAS Pinindot ng user ang Esc button
Key.PAUSE Na-click ng user ang button na I-pause
Key.SPACE Pinindot ng user ang Space
Susi.LEFT Pinindot ng user ang Left Arrow
Susi. TAMA Pinindot ng user ang Right Arrow
Susi pataas Pinindot ng user ang Up Arrow
Susi.PABABA Pinindot ng user ang Pababang Arrow
Susi.HINDI ALAM Anumang susi maliban sa mga nakalista sa itaas

3. Paggawa gamit ang timer

Maraming mga laro ang nagaganap sa real time, ibig sabihin, kahit na walang ginagawa ang user, ang mga kaganapan sa laro ay isinasagawa pa rin. Upang maipatupad mo ang mga ganitong laro, nagdagdag kami ng pag-andar ng timer sa engine ng laro. Gumagana ito ng isang bagay tulad nito: i-on mo ang timer at itakda ang yugto ng panahon pagkatapos nito dapat itong tumunog. Halimbawa, 500 milliseconds. Pagkatapos nito, bawat kalahating segundo ay tinatawag ng Game Engine ang onTurnTimer(). Isang walang katapusang bilang ng beses hanggang sa i-off ang timer. Paano gamitin ang timer?
  1. I-on ang timer.

    Для этого есть специальный метод void setTurnTimer(int timeMs). В качестве аргумента метод принимает длительность интервала между вызовами в миллисекундах (1/1000 секунды). Достаточно один раз вызвать его, и игровой движок начнет вызывать метод onTurn() каждые timeMs миллисекунд.

  2. Переопределяем метод onTurn(int).

    Для этого необходимо объявить метод void onTurn(int step) в классе, унаследованном от класса Game. Этот метод будет вызываться игровым движком. При этом движок каждый раз будет передавать в метод порядковый номер такого вызова (1,2,3, …).

  3. Выключаем таймер.

    Если таймер больше не нужен, когда, например, пользователь прошел игру, его можно выключить. Для этого нужно просто вызвать метод stopTurnTimer().

  4. Ускоряем or меняем таймер.

    В некоторых играх события постоянно ускоряются, поэтому было бы удобно ускорять наш таймер (уменьшать время между вызовами). Нет ничего проще: вызовите setTurnTimer(int timeMs) еще раз, с новым meaningм, и время между вызовами 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 клетки. Затем включor таймер, который каждые полсекунды будет вызывать метод onTurn(). Каждые полсекунды будет меняться цвет клетки, при этом ее контент не изменится. Через 50 секунд цвет перестанет меняться. На этом все! Если вы хотите узнать о разделе "Игры" больше, вот полезная documentация, которая может в этом помочь:
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION