JavaRush /Blog Jawa /Random-JV /Bagean "Game" ing JavaRush: Penanganan Acara

Bagean "Game" ing JavaRush: Penanganan Acara

Diterbitake ing grup
"Game" saka JavaRush minangka bagean anyar kanthi tugas sing menarik lan gedhe kanggo nggawe versi game populer sampeyan dhewe. Iku prasaja: saben project game dipérang dadi subtasks. Rampungake siji-siji lan game wis siyap. Sampeyan bisa nuduhake ing jaringan sosial lan ngajak kanca-kanca kanggo muter. BabIng materi iki, kita bakal ngomong kanthi rinci babagan cara pangolahan acara nalika nulis game.

1. Nggarap mouse

Mesin game duwe rong cara kanggo nggarap mouse:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Sampeyan mung ngumumake cara kasebut ing kelas game sing diwarisake saka Game, lan nulis kode apa wae. Lan mesin game dhewe bakal nelpon nalika pangguna mencet tombol mouse.
  1. onMouseLeftClick(int x, int y)- disebut dening engine nalika sampeyan klik tombol mouse kiwa. Minangka bantahan, iku nampa koordinat sel saka lapangan playing ngendi klik dumadi. Sèl kiwa ndhuwur duwé koordinat (0,0). Kanggo nggunakake cara iki, iku kudu overridden.

  2. onMouseRightClick(int x, int y)- disebut nalika sampeyan klik-tengen. Kerjane padha karo metode kasebut onMouseLeftClick(int x, int y).
Tuladha nggunakake metode:
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. Nggarap keyboard

Mesin game duwe rong cara kanggo nggarap keyboard:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Yen sampeyan pengin tumindak kedadeyan nalika pangguna menet tombol ing keyboard, wara-wara cara iki ing kelas game sing warisan saka Game lan nulis kode ing wong. Mesin game dhewe bakal nelpon nalika pangguna menet utawa ngeculake tombol keyboard.
  1. onKeyPress (Key key)— disebut nalika sembarang tombol keyboard dipencet. Nilai tombol sing dipencet (utawa Key.UNKNOWN) diterusake menyang metode minangka argumen kunci.

  2. onKeyReleased (Key key)- disebut nalika sembarang tombol keyboard dirilis. Argumentasi tombol njupuk nilai kunci sing cocog (utawa Key.UNKNOWN).
Tuladha nggunakake metode:
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);
        }
    }
}
Penting! Ing versi mesin saiki, jinis Key mung bisa nampa set winates saka nilai (9 pcs):
Artine Apa sing diklik pangguna
Key.ENTER Pangguna menet tombol Enter
Kunci.MULUNG Pangguna menet tombol Esc
Kunci.JAGA Pangguna ngeklik tombol Ngaso
Kunci. SPACE Pangguna menet Space
Kunci.KIRI Pangguna menet Panah Kiri
Kunci. TEngen Pangguna menet Panah Kanan
Kunci.UP Pangguna menet panah munggah
Kunci. MUNDUR Pangguna menet panah mudhun
Kunci.Ora ngerti Tombol apa wae kajaba sing kasebut ing ndhuwur

3. Nggarap timer

Akeh game sing ditindakake ing wektu nyata, tegese sanajan pangguna ora nindakake apa-apa, acara ing game kasebut isih ditindakake. Supaya sampeyan bisa ngleksanakake game kasebut, kita wis nambahake fungsi timer ing mesin game. Kerjane kaya mangkene: sampeyan nguripake timer lan nyetel periode wektu sawise iku kudu mati. Contone, 500 milidetik. Sawise iku, saben setengah detik Game Engine nelpon onTurnTimer(). Kaping pirang-pirang tanpa wates nganti timer dipateni. Kepiye cara nggunakake timer?
  1. Nguripake timer.

    Ana cara khusus kanggo iki void setTurnTimer(int timeMs). Minangka argumentasi, metode kasebut njupuk durasi interval antarane panggilan ing milidetik (1/1000 detik). Cukup kanggo nelpon sapisan, lan mesin game bakal miwiti nelpon cara onTurn()saben milliseconds Ms.

  2. Ganti metode onTurn(int).

    Kanggo nindakake iki, sampeyan kudu ngumumake metode void onTurn(int step)ing kelas sing diwarisake saka kelas kasebut Game. Cara iki bakal diarani mesin game. Ing kasus iki, mesin bakal saben wektu nransfer nomer serial telpon kuwi (1,2,3, ...) kanggo cara.

  3. Pateni timer.

    Yen wektu ora perlu maneh, nalika, contone, pangguna wis rampung game, iku bisa dipateni. Kanggo nindakake iki, sampeyan mung kudu nelpon stopTurnTimer().

  4. Nyepetake utawa ngganti wektu.

    Ing sawetara game, acara terus-terusan nyepetake, mula luwih gampang nyepetake wektu (nyuda wektu ing antarane telpon). Ora ana sing luwih gampang: nelpon setTurnTimer(int timeMs)maneh, kanthi nilai anyar, lan wektu antarane telpon onTurn()bakal diganti.

Tuladha:
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);

        }
    }}
Ing conto prasaja iki, kita nggawe lapangan sel 3x3. Banjur kita nguripake timer sing bakal nelpon cara saben setengah detik onTurn(). Saben setengah detik warna sel bakal ganti, nanging isine ora bakal owah. Sawise 50 detik, warna bakal mandheg ganti. Iku kabeh! Yen sampeyan pengin sinau luwih lengkap babagan bagean Game, iki sawetara dokumentasi migunani sing bisa mbantu:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION