JavaRush /جاوا بلاگ /Random-UR /جاوا رش پر سیکشن "گیمز": ایونٹ ہینڈلنگ

جاوا رش پر سیکشن "گیمز": ایونٹ ہینڈلنگ

گروپ میں شائع ہوا۔
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 صارف نے Enter بٹن دبایا
کلید۔ ESCAPE صارف نے Esc بٹن دبایا
کلید۔ PAUSE صارف نے توقف کے بٹن پر کلک کیا۔
کلید۔اسپیس صارف نے اسپیس کو دبایا
کلید۔ بائیں صارف نے بائیں تیر کو دبایا
کلید۔ رائٹ صارف نے دائیں تیر کو دبایا
کلید یوپی صارف نے اوپر تیر کو دبایا
Key.DOWN صارف نے نیچے تیر کو دبایا
کلید۔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