JavaRush /Блоги Java /Random-TG /Бахши "Бозиҳо" дар JavaRush: Идоракунии рӯйдодҳо

Бахши "Бозиҳо" дар JavaRush: Идоракунии рӯйдодҳо

Дар гурӯҳ нашр шудааст
"Бозиҳо" аз JavaRush як бахши нав бо вазифаҳои ҷолиб ва васеъмиқёс барои эҷоди versionҳои шахсии бозиҳои маъмул аст. Ин оддӣ аст: ҳар як лоиҳаи бозӣ ба зервазифаҳо тақсим карда мешавад. Онҳоро як ба як пур кунед ва бозӣ омода аст. Шумо метавонед онро дар шабакаҳои иҷтимоӣ мубодила кунед ва дӯстонро барои бозӣ даъват кунед. Дар ин мақола мо дар бораи усулҳои коркарди рӯйдодҳо ҳангоми навиштани бозиҳо Бобмуфассал сӯҳбат хоҳем кард .

1. Кор бо муш

Муҳаррики бозӣ ду усули кор бо муш дорад:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);
Шумо танҳо ин усулҳоро дар синфи бозии меросӣ эълон мекунед Gameва дар онҳо ҳама гуна рамз нависед. Ва худи муҳаррики бозӣ ба онҳо занг мезанад, вақте ки корбар тугмаҳои мушро пахш мекунад.
  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);
Агар шумо хоҳед, ки корбар ҳангоми пахш кардани тугмаи клавиатура амалҳо ба амал оянд, ин усулҳоро дар синфи бозии худ, ки аз Game мерос мегиранд, эълон кунед ва рамзи худро дар онҳо нависед. Худи муҳаррики бозӣ ба онҳо занг мезанад, вақте ки корбар тугмаи клавиатураро пахш мекунад ё мебарорад.
  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 дона):
Маънои Он чизе ки корбар клик кардааст
Калид. ENTER Истифодабаранда тугмаи Enterро пахш кард
Калид. ҒУРО Истифодабаранда тугмаи Esc-ро пахш кард
Калид. ТАВАККИ Истифодабаранда тугмаи Таваққуфро пахш кард
Key.SPACE Истифодабаранда Space-ро пахш кард
Калид. ЧАП Истифодабаранда тирчаи чапро пахш кард
Калид. РОСТ Истифодабаранда тирчаи ростро пахш кард
Key.UP Истифодабаранда тирчаи болоро пахш кард
Тугма. ПОЁН Истифодабаранда тирчаи поёнро пахш кард
Калид.НОМАЪЛУМ Ҳама гуна калид ба истиснои калидҳои дар боло номбаршуда

3. Кор бо таймер

Бисёр бозиҳо дар вақти воқеӣ сурат мегиранд, яъне ҳатто агар корбар ҳеҷ коре накунад, рӯйдодҳои бозӣ ҳанӯз иҷро мешаванд. Барои он ки шумо чунин бозиҳоро амалӣ карда тавонед, мо ба муҳаррики бозӣ функсияи таймерро илова кардем. Он чунин кор мекунад: шумо таймерро фаъол мекунед ва давраи вақтро таъин мекунед, ки пас аз он он бояд хомӯш шавад. Масалан, 500 миллисония. Баъд аз ин, ҳар ним сония Engine Game ба onTurnTimer(). Шумораи беохир то хомӯш кардани таймер. Таймерро чӣ тавр истифода бурдан мумкин аст?
  1. Таймерро фаъол созед.

    Барои ин усули махсус вуҷуд дорад void setTurnTimer(int timeMs). Ҳамчун далел, усул давомнокии фосилаи байни зангҳоро дар миллисонияҳо (1/1000 сония) мегирад. onTurn()Ба он як маротиба занг задан кифоя аст ва муҳаррики бозӣ ҳар дафъа Ms миллисония ба ин усул занг мезанад .

  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 сония тағирёбии ранг қатъ мегардад. Ҳамааш ҳамин! Агар шумо хоҳед, ки дар бораи бахши Бозиҳо маълумоти бештар гиред, дар ин ҷо ҳуҷҷатҳои муфиде ҳастанд, ки метавонанд кӯмак расонанд:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION