JavaRush /وبلاگ جاوا /Random-FA /بخش "بازی ها" در JavaRush: مدیریت رویداد

بخش "بازی ها" در JavaRush: مدیریت رویداد

در گروه منتشر شد
"بازی ها" از 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);
اگر می‌خواهید زمانی که کاربر دکمه‌ای روی صفحه‌کلید فشار می‌دهد، اقداماتی انجام شود، این متدها را در کلاس بازی خود که از 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);
        }
    }
}
مهم! در نسخه فعلی موتور، نوع کلید فقط می تواند مجموعه ای محدود از مقادیر (9 عدد) را بپذیرد:
معنی چیزی که کاربر کلیک کرده است
Key.ENTER کاربر دکمه Enter را فشار داد
کلید.فرار کاربر دکمه Esc را فشار داد
کلید. مکث کاربر روی دکمه Pause کلیک کرد
کلید.فضا کاربر Space را فشار داد
کلید.چپ کاربر فلش چپ را فشار داد
کلید.راست کاربر فلش راست را فشار داد
Key.UP کاربر فلش رو به بالا را فشار داد
کلید. پایین کاربر فلش رو به پایین را فشار داد
کلید.ناشناخته هر کلیدی به جز موارد ذکر شده در بالا

3. کار با تایمر

بسیاری از بازی ها در زمان واقعی انجام می شوند، به این معنی که حتی اگر کاربر هیچ کاری انجام ندهد، رویدادهای بازی همچنان اجرا می شوند. برای اینکه بتوانید چنین بازی هایی را پیاده سازی کنید، قابلیت تایمر را به موتور بازی اضافه کرده ایم. این کار چیزی شبیه به این است: شما تایمر را روشن می کنید و مدت زمانی را تنظیم می کنید که پس از آن باید خاموش شود. مثلا 500 میلی ثانیه. پس از آن، هر نیم ثانیه موتور بازی، 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