JavaRush /جاوا بلاگ /Random-SD /جاوا رش تي سيڪشن "گيمز": ايونٽ هينڊلنگ

جاوا رش تي سيڪشن "گيمز": ايونٽ هينڊلنگ

گروپ ۾ شايع ٿيل
JavaRush مان ”گيمس“ هڪ نئون سيڪشن آهي جنهن ۾ دلچسپ ۽ وڏي پيماني تي ڪم شامل آهن توهان جي مشهور راندين جا پنهنجا ورجن ٺاهڻ لاءِ. اهو سادو آهي: هر راند جو منصوبو ذيلي ڪمن ۾ ورهايل آهي. انھن کي ھڪڙي ھڪڙي مڪمل ڪريو ۽ راند تيار آھي. توھان ان کي سماجي نيٽ ورڪن تي حصيداري ڪري سگھو ٿا ۽ دوستن کي راند ڪرڻ جي دعوت ڏئي سگھو ٿا. بابهن آرٽيڪل ۾ اسين تفصيل سان ڳالهائينداسين ايونٽ پروسيسنگ جي طريقن جي باري ۾ جڏهن رانديون لکڻ.

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);
جيڪڏهن توهان چاهيو ٿا ته ڪارناما ٿين جڏهن صارف ڪيبورڊ تي هڪ بٽڻ دٻائي، انهن طريقن کي پنهنجي گيم ڪلاس ۾ بيان ڪريو جيڪي گيم مان ورثي ۾ آهن ۽ انهن ۾ پنهنجو ڪوڊ لکو. گيم انجڻ پاڻ ان کي سڏيندو جڏهن صارف ڪيبورڊ ڪيبورڊ کي دٻائي يا جاري ڪري.
  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);
        }
    }
}
اهم! انجڻ جي موجوده ورزن ۾، ڪيئي قسم صرف قدرن جو محدود سيٽ قبول ڪري سگھي ٿو (9 پي سي):
مطلب جيڪو صارف ڪلڪ ڪيو
ڪي. ENTER استعمال ڪندڙ انٽر بٽڻ کي دٻايو
Key.ESCAPE صارف Esc بٽڻ کي دٻايو
چاٻي. PAUSE استعمال ڪندڙ روڪيو بٽڻ تي ڪلڪ ڪيو
ڪي. اسپيس استعمال ڪندڙ اسپيس کي دٻايو
چاٻي. کاٻي استعمال ڪندڙ بائیں تير کي دٻايو
چاٻي.حق استعمال ڪندڙ ساڄي تير کي دٻايو
ڪي. يو. پي استعمال ڪندڙ مٿي تير کي دٻايو
چاٻي. هيٺ استعمال ڪندڙ ھيٺئين تير کي دٻايو
چاٻي. 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 سيڪنڊن کان پوءِ رنگ تبديل ٿيڻ بند ٿي ويندو. اهو ئي سڀ ڪجهه آهي! جيڪڏهن توهان راندين جي سيڪشن بابت وڌيڪ سکڻ چاهيو ٿا، هتي ڪجهه مفيد دستاويز آهن جيڪي مدد ڪري سگهن ٿيون:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION