CodeGym /جاوا بلاگ /Random-UR /CodeGym پر گیمز سیکشن: ایونٹ ہینڈلنگ
John Squirrels
سطح
San Francisco

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

گروپ میں شائع ہوا۔
CodeGym سے "گیمز" ایک نیا سیکشن ہے جس میں بڑے دلچسپ کام ہوتے ہیں جہاں آپ مقبول گیمز کے اپنے ورژن بناتے ہیں۔ یہ آسان ہے: ہر گیم پروجیکٹ کو ذیلی کاموں میں تقسیم کیا گیا ہے۔ ان کو ایک ایک کرکے مکمل کریں اور گیم ہو گیا۔ آپ اسے سوشل نیٹ ورکس پر شیئر کر سکتے ہیں اور اپنے دوستوں کو کھیلنے کے لیے مدعو کر سکتے ہیں۔ CodeGym پر "گیمز" سیکشن: ایونٹ ہینڈلنگ - 1اس مضمون میں، ہم گیمز لکھنے کے لیے استعمال ہونے والے ایونٹ ہینڈلنگ کے طریقوں کو تفصیل سے بیان کریں گے۔

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.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        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) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        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.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        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) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
اہم! گیم انجن کے موجودہ ورژن میں، کلیدی قسم میں نو اقدار کا ایک محدود سیٹ ہے:
قدر صارف کی طرف سے دبائی گئی کلید
کلید۔ENTER صارف نے Enter دبایا
کلید۔ ESCAPE صارف نے Esc دبایا
کلید۔ PAUSE صارف نے توقف دبا دیا۔
کلید۔اسپیس صارف نے اسپیس کو دبایا
کلید۔ بائیں صارف نے بائیں تیر والے بٹن کو دبایا
کلید۔ رائٹ صارف نے دائیں تیر والے بٹن کو دبایا
کلید یوپی صارف نے اوپر تیر والے بٹن کو دبایا
Key.DOWN صارف نے نیچے کی بٹن دبائی
کلید۔UNKNOWN صارف نے اوپر والے کے علاوہ ایک کلید دبائی

3. ٹائمر کے ساتھ کام کرنا

بہت سے گیمز ریئل ٹائم میں ہوتے ہیں، یعنی اگر صارف کچھ نہیں کرتا، تب بھی گیم میں واقعات رونما ہوتے رہتے ہیں۔ آپ کو اس طرح کے گیمز کو لاگو کرنے کے قابل بنانے کے لیے، ہم نے گیم انجن میں ٹائمر شامل کیا ہے۔ یہ کچھ اس طرح کام کرتا ہے: آپ ٹائمر آن کرتے ہیں اور ٹائمر کا وقفہ سیٹ کرتے ہیں۔ مثال کے طور پر، 500 ملی سیکنڈ۔ پھر، ہر آدھے سیکنڈ میں گیم انجن onTurnTimer()طریقہ کو کال کرتا ہے۔ بار بار ہمیشہ کے لیے — جب تک ٹائمر بند نہ ہو جائے۔ تو آپ ٹائمر کیسے استعمال کرتے ہیں؟
  1. ٹائمر آن کریں۔

    ایسا کرنے کے لئے، ایک خاص طریقہ ہے void setTurnTimer(int timeMs). یہ طریقہ ایک دلیل کے طور پر کالوں کے درمیان وقفہ کو ملی سیکنڈ میں لیتا ہے (1 ملی سیکنڈ = 1/1000 سیکنڈ)۔ آپ کو اسے صرف ایک بار کال کرنے کی ضرورت ہے، اور گیم انجن onTurn()ہر بار Ms ملی سیکنڈ میں طریقہ کو کال کرنا شروع کر دے گا۔

  2. onTurn(int) طریقہ کو اوور رائیڈ کریں۔

    ایسا کرنے کے لیے، آپ کو void onTurn(int step)کلاس میں ایک طریقہ کا اعلان کرنا ہوگا جو وراثت میں ملتا ہے Game۔ یہ طریقہ گیم انجن کے ذریعہ بلایا جائے گا۔ مزید یہ کہ ہر کال کے ساتھ گیم انجن کال کے لیے ایک ترتیب وار شناخت کنندہ کے طریقہ کار کو منتقل کرے گا (1, 2, 3, …)۔

  3. ٹائمر بند کر دیں۔

    اگر ٹائمر کی مزید ضرورت نہیں ہے، مثال کے طور پر، جب صارف گیم مکمل کرتا ہے، تو آپ اسے بند کر سکتے ہیں۔ ایسا کرنے کے لیے، آپ کو صرف stopTurnTimer()طریقہ کال کرنے کی ضرورت ہے۔

  4. ٹائمر کو تیز کریں یا تبدیل کریں۔

    کچھ گیمز میں، واقعات جس رفتار سے ہوتے ہیں وہ مسلسل تیز ہوتی رہتی ہے، اس لیے ہمارے ٹائمر کو تیز کرنا آسان ہو گا (کالوں کے درمیان وقت کم کریں)۔ کچھ بھی آسان نہیں ہو سکتا: setTurnTimer(int timeMs)ایک نئی قدر کے ساتھ ایک بار پھر کال کریں، اور کالوں کے درمیان وقت onTurn()بدل جائے گا۔

مثال کے طور پر:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {@Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        }
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }}
اس سادہ مثال میں، ہم نے ایک فیلڈ بنایا ہے جو 3 خلیات x 3 خلیات ہے۔ پھر ہم نے ایک ٹائمر شروع کیا جو onTurn()ہر آدھے سیکنڈ میں طریقہ کو کال کرے گا۔ ہر آدھے سیکنڈ میں، سیل کا رنگ بدل جائے گا، لیکن اس کا مواد نہیں بدلے گا۔ 50 سیکنڈ کے بعد، رنگ مزید نہیں بدلے گا۔ ابھی کے لیے بس اتنا ہی ہے! اگر آپ "گیمز" سیکشن کے بارے میں مزید جاننا چاہتے ہیں، تو یہاں کچھ مفید دستاویزات ہیں جو مدد کر سکتی ہیں:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION