JavaRush /Java Blog /Random-TK /JavaRush-da "Oýunlar" bölümi: Wakalary dolandyrmak

JavaRush-da "Oýunlar" bölümi: Wakalary dolandyrmak

Toparda çap edildi
JavaRush-dan “Oýunlar”, meşhur oýunlaryň öz wersiýalaryny döretmek üçin gyzykly we uly göwrümli meseleler bilen täze bölüm. Bu ýönekeý: her oýun taslamasy subtasklara bölünýär. Olary birin-birin tamamlaň we oýun taýýar. Sosial ulgamlarda paýlaşyp, dostlaryňyzy oýnamaga çagyryp bilersiňiz. Bu makalada oýun ýazanymyzda hadysalary gaýtadan işlemegiňBap usullary barada jikme-jik gürleşeris .

1. Syçan bilen işlemek

Oýun motorynyň syçan bilen işlemegiň iki usuly bar:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Diňe bu usullary miras galan oýun synpynda yglan edýärsiňiz Gamewe olarda islendik kod ýazýarsyňyz. Ulanyjy syçanjygyň düwmelerini basanda oýun motorynyň özi olara jaň eder.
  1. onMouseLeftClick(int x, int y)- syçanyň çep düwmesine basanyňyzda motor tarapyndan çagyrylýar. Argument hökmünde, basan ýerindäki oýun öýjüginiň koordinatlaryny alýar. Çep ýokarky öýjükde koordinatlar bar (0,0). Bu usuly ulanmak üçin ony ýok etmeli.

  2. onMouseRightClick(int x, int y)- sag düwmä basanyňyzda çagyrylýar. Usula meňzeş işler onMouseLeftClick(int x, int y).
Usullary ulanmagyň mysaly:
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. Klawiatura bilen işlemek

Oýun motorynyň klawiatura bilen işlemegiň iki usuly bar:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);
Ulanyjy klawiaturadaky düwmä basanda hereketleriň ýüze çykmagyny isleseňiz, bu usullary Oýundan miras galan oýun synpyňyzda yglan ediň we koduňyzy ýazyň. Ulanyjy klawiatura düwmesini basanda ýa-da çykaranda, oýun motorynyň özi olara jaň eder.
  1. onKeyPress (Key key)- islendik klawiatura düwmesi basylanda çagyrylýar. Basylan düwmäniň bahasy (ýa-da Key.UNKNOWN) esasy argument hökmünde usula geçýär.

  2. onKeyReleased (Key key)- islendik klawiatura düwmesi çykanda çagyrylýar. Esasy argument, degişli açaryň (ýa-da Key.UNKNOWN) bahasyny alýar.
Usullary ulanmagyň mysaly:
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);
        }
    }
}
Möhüm! Dwigateliň häzirki wersiýasynda açar görnüşi diňe çäkli bahalar toplumyny kabul edip biler (9 sany):
Manysy Ulanyjynyň basan zady
Açar Ulanyjy Enter düwmesini basdy
Açar.ESCAPE Ulanyjy Esc düwmesini basdy
Açar.PAUSE Ulanyjy "Pause" düwmesine basdy
Açar.SPACE Ulanyjy “Space” -i basdy
Key.LEFT Ulanyjy Çep oky basdy
Düwme Ulanyjy sag oky basdy
Key.UP Ulanyjy Upokarky oky basdy
Düwme Ulanyjy aşak oky basdy
Açar.UNKNOWN Aboveokarda sanalanlardan başga islendik açar

3. Taymer bilen işlemek

Köp oýunlar hakyky wagtda bolup geçýär, ýagny ulanyjy hiç zat etmese-de, oýundaky wakalar henizem ýerine ýetirilýär. Şeýle oýunlary durmuşa geçirip bilersiňiz, oýun motoryna taýmer funksiýasyny goşduk. Munuň ýaly bir zat işleýär: taýmeri açyp, öçmeli wagtyny kesgitleýärsiňiz. Mysal üçin, 500 millisekunt. Ondan soň, her ýarym sekuntda Oýun motory jaň edýär onTurnTimer(). Taymer öçýänçä çäksiz gezek. Taymeri nädip ulanmaly?
  1. Hasaplaýjyny açyň.

    Munuň üçin ýörite usul bar void setTurnTimer(int timeMs). Argument hökmünde bu usul millisekuntdaky jaňlaryň arasyndaky aralyk dowamlylygyny alýar (sekuntyň 1/1000). Bir gezek jaň etmek ýeterlikdir we oýun dwigateli onTurn()her gezek millisekuntda usuly çagyryp başlar.

  2. OnTurn (int) usulyny ýok edýäris.

    void onTurn(int step)Munuň üçin synpdan miras galan synpda usuly yglan etmeli Game. Bu usul oýun dwigateli tarapyndan atlandyrylar. Bu ýagdaýda hereketlendiriji her gezek şeýle jaňyň seriýa belgisini (1,2,3, ...) usula geçirer.

  3. Taymeri öçüriň.

    Hasaplaýjy indi zerur däl bolsa, mysal üçin, ulanyjy oýny gutaranda, ony öçürip bolýar. Munuň üçin diňe jaň etmeli stopTurnTimer().

  4. Taýmeri çaltlaşdyryň ýa-da üýtgediň.

    Käbir oýunlarda wakalar yzygiderli çaltlaşýar, şonuň üçin taýmerimizi tizleşdirmek amatly bolar (jaňlaryň arasyndaky wagty azaltmak). Has ýönekeý zat ýok: setTurnTimer(int timeMs)täzeden baha beriň, täze baha bilen jaňlaryň arasyndaky wagt onTurn()üýtgär.

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

        }
    }}
Bu ýönekeý mysalda 3x3 öýjük meýdany döretdik. Soňra her ýarym sekuntda usuly çagyrjak taýmeri açdyk onTurn(). Her ýarym sekuntda öýjügiň reňki üýtgär, ýöne mazmuny üýtgemez. 50 sekuntdan soň reňk üýtgemez. Bu hemmesi! Oýunlar bölümi barada has giňişleýin öwrenmek isleseňiz, kömek edip biljek käbir peýdaly resminamalar:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION