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

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

در گروه منتشر شد
"بازی ها" از JavaRush بخش جدیدی است که شامل پروژه های بزرگ برای نوشتن بازی های رایانه ای محبوب است. ساختن آنها ساده تر از چیزی است که به نظر می رسد: هر پروژه به دوجین کار فرعی تقسیم می شود. با تکمیل مراحل مرحله به مرحله، بازی خود را می نویسید و سپس می توانید "ویژگی های" منحصر به فردی را به آن اضافه کنید و آن را با دوستان خود به اشتراک بگذارید. فصلبازی ها از موتور بازی ساده JavaRush استفاده می کنند . در این مقاله در مورد ویژگی های کلیدی آن و اینکه روند نوشتن یک بازی چگونه به نظر می رسد صحبت خواهیم کرد .
  1. معرفی
  2. مقداردهی اولیه بازی
  3. ایجاد یک زمین بازی
  4. برنامه بدوی
  5. کار با سلول های زمین بازی
  6. کار با رنگ
  7. جعبه های گفتگو
  8. روش های سودمند
  9. محدودیت های موتور بازی

1. معرفی

سه مرحله در اجرای یک بازی رایانه ای از سوی سازنده وجود دارد:
  1. راه اندازی بازی اقدامات آماده سازی است: تنظیم اندازه و ترسیم زمین بازی، ایجاد و نصب اشیاء بازی در موقعیت اولیه و همچنین سایر اقداماتی که باید در ابتدای بازی انجام شود.

  2. روند بازی. این شامل حرکت اشیاء بازی، اقدامات بازیکن، محاسبه امتیازات کسب شده و همچنین سایر اقداماتی است که باید در فواصل زمانی معین یا با فشار دادن دکمه ها انجام شوند.

  3. پایان دادن به بازی. این شامل توقف انیمیشن ها، گزارش پیروزی یا شکست و سایر اقداماتی است که باید در پایان بازی انجام شوند.

2. مقداردهی اولیه بازی

شروع بازی فقط از دو مرحله تشکیل شده است:

مرحله 1: کلاس اصلی بازی را ایجاد کنید.

برای توسعه بازی خود بر اساس موتور بازی JavaRush، باید یک کلاس ایجاد کنید و آن را از کلاس Game (com.javarush.engine.cell.Game) به ارث ببرید. این به کلاس شما توانایی فراخوانی متدها در موتور بازی و توانایی موتور برای فراخوانی متدهای شما را می دهد. مثال:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

مرحله 2: روش ()initialize را نادیده بگیرید.

در این روش تمام اقدامات لازم برای شروع بازی انجام می شود: ایجاد زمین بازی، ایجاد آبجکت های بازی و غیره. شما فقط باید این متد را در کلاسی که از کلاس Game ارث می برد، اعلام کنید . مثال:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
متد ()initialize آنالوگ متد main() است : جایی است که تمام کدهای نوشته شده برای بازی شروع به اجرا می کند.

3. ایجاد زمین بازی

ایجاد یک زمین بازی نیز تنها شامل دو مرحله است.

مرحله 1: زمین بازی را به سلول ها تقسیم کنید.

کل زمین بازی توسط موتور بازی به سلول ها تقسیم می شود. حداقل اندازه 3x3 و حداکثر 100x100 است. صفحه نمایش بازی دارای اندازه ثابتی است. می توان آن را به تعداد سلول های مختلف تقسیم کرد. به عنوان مثال، عرض 7 و ارتفاع 9:
فصل
لطفاً توجه داشته باشید که شماره گذاری سلول ها از گوشه سمت چپ بالا شروع می شود. برای تنظیم اندازه زمین بازی، از روش void setScreenSize (int عرض، int ارتفاع) استفاده کنید . اندازه زمین بازی را تعیین می کند. به عنوان پارامتر تعداد سلول ها را به صورت افقی (عرض) و عمودی (ارتفاع) می گیرد. معمولاً زمانی که بازی شروع می شود یک بار صدا زده می شود. مثال:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
هنگام نوشتن یک بازی، ممکن است لازم باشد عرض و ارتفاع فعلی زمین بازی را بدست آورید. متدهای int getScreenWidth() و int getScreenHeight() برای این کار مفید هستند .

مرحله 2: شبکه را روشن یا خاموش کنید (اختیاری).

اگر از شبکه سیاهی که سلول‌ها را در زمین بازی جدا می‌کند، خوشتان نمی‌آید، می‌توانید آن را خاموش کنید. روش void showGrid (boolean isShow) سلول های جداکننده شبکه را روشن و خاموش می کند. به طور پیش فرض، شبکه نمایش داده می شود. برای خاموش کردن آن، این متد را با پارامتر false فراخوانی کنید:
showGrid(false);
نتیجه:
فصل
برای روشن کردن مجدد شبکه، تماس بگیرید:
showGrid(true);

4. برنامه اولیه

نمونه برنامه:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
در این مثال، اندازه زمین بازی روی 3x3 تنظیم شده است، نمایشگر شبکه خاموش است، و یک نماد نارنجی نیم سلولی به اندازه "X" در مرکز روی پس زمینه آبی تنظیم شده است. این اولین چیزی است که بازیکن هنگام شروع بازی می بیند.

5. کار با سلول های زمین بازی

اینکه می‌توانیم زمین بازی را به سلول‌ها تقسیم کنیم، عالی است، اما با خود سلول‌ها چه کنیم؟ هر سلول از زمین بازی را می توان تنظیم کرد:
  • رنگ سلول (رنگ پس زمینه سلول)؛
  • متن (متن یا شماره)؛
  • رنگ متن؛
  • اندازه متن به عنوان درصد نسبت به اندازه سلول.
بیایید روش های کار با سلول های زمین بازی را در نظر بگیریم :
  1. void setCellColor (int x، int y، Color color) - رنگ سلول را با مختصات (x، y) تنظیم می کند:

    setCellColor(0, 0, Color.RED);
    setCellColor(3, 6, Color.BLACK);
    setCellColor(6, 8, Color.NONE);

  2. Color getCellColor(int x، int y) - رنگ سلول را با مختصات (x، y) برمی‌گرداند:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue (int x، int y، مقدار رشته) - مقدار متن را با مختصات (x، y) در سلول قرار می دهد:

    setCellValue(3, 3, "text");
    setCellValue(0, 8, "W");
    setCellValue(4, 1, "2222");
    setCellValue(6, 6, "");

  4. رشته getCellValue(int x، int y) - متن موجود در سلول را با مختصات (x، y) برمی‌گرداند:

    String s = getCellValue(3, 3);
    System.out.println(getCellValue(4, 1));

  5. void setCellTextSize(int x، int y، int size) - اندازه محتوای سلول را با مختصات (x، y) تنظیم می کند. اندازه - ارتفاع متن به عنوان درصدی از ارتفاع سلول:

    setCellTextSize(2 , 0, 70); //  70% высоты клетки

  6. int getCellTextSize(int x, int y) - اندازه محتوای سلول را با مختصات (x, y) برمی‌گرداند:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber (int x، int y، int مقدار) - مقدار عدد را با مختصات (x، y) در سلول قرار می دهد:

    setCellNumber(3, 3, 40);
    setCellNumber(0, 8, -8);
    setCellNumber(4, 1, 2222);
    setCellNumber(6, 6, 0);

  8. int getCellNumber(int x, int y) - عدد موجود در سلول را با مختصات (x,y) برمی گرداند. اگر سلول حاوی عدد نباشد، 0 را برمی گرداند:

    int i = getCellNumber(3, 3);
    System.out.println(getCellNumber(4, 1));

  9. void setCellTextColor (int x، int y، Color color) - رنگ محتوای (متن) را در سلول با مختصات (x، y) تنظیم می کند:

    setCellTextColor(2, 1, Color.GREEN);
    setCellTextColor(0, 1, Color.NONE);

  10. Color getCellTextColor(int x، int y) - رنگ محتوای (متن) یک سلول را با مختصات (x، y) برمی‌گرداند:

    Color textColor = getCellTextColor(1, 3);
برای راحتی، چندین متد setCellValueEx() با مجموعه‌های مختلف پارامترها وجود دارد :
  1. void setCellValueEx (int x, int y, Color cellColor, String مقدار) - سلول را با مختصات (x, y) سلول رنگ پس زمینه و مقدار محتوا تنظیم می کند:

    setCellValueEx(0, 2, Color.BLUE, "56");

  2. void setCellValueEx (int x، int y، Color cellColor، String مقدار، Color textColor) - سلول را با مختصات (x، y) سلول رنگ پس‌زمینه Color، مقدار محتوا و رنگ محتوا تنظیم می‌کند.

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);

  3. void setCellValueEx(int ​​x, int y, Color cellColor, String مقدار, Color textColor, int textSize); - سلول را با مختصات (x، y) سلول رنگ پس زمینه، رنگ، مقدار محتوا، متن رنگ محتوا، رنگ و اندازه متن را تنظیم می کند:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);

6. کار با رنگ

رنگ ها در موتور بازی توسط Color enum کنترل می شوند که حاوی مقادیر منحصر به فرد برای 148 رنگ است. و همچنین مقدار ویژه NONE - عدم وجود رنگ. نمونه کار با رنگ:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
گاهی اوقات ممکن است بخواهید آرایه ای از تمام رنگ های موجود را دریافت کنید. برای انجام این کار، از متد () values ​​استفاده کنید . مثلا:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
دریافت شماره رنگ در پالت بسیار ساده است:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
همچنین می توانید یک رنگ را با شماره آن بدست آورید:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. جعبه های گفتگو

در پایان بازی، بازیکن باید از پیروزی یا شکست مطلع شود. روش خاصی برای این کار وجود دارد که کادر محاوره ای را در صفحه بازی نمایش می دهد:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
اینجا:
  • cellColor - رنگ پس‌زمینه کادر محاوره‌ای.
  • پیام - متن پیام؛
  • textColor - رنگ متن پیام؛
  • textSize - اندازه متن پیام.
اگر کاربر کلید فاصله را فشار دهد، گفتگو به خودی خود بسته می شود.

8. روش های سودمند

معمولاً هنگام نوشتن بازی از اعداد تصادفی استفاده می شود. برای سهولت در به دست آوردن اعداد تصادفی، می توانید از روش های موتور قراضه استفاده کنید:
  1. int getRandomNumber(int max) - یک عدد صحیح تصادفی را از 0 به (max–1) شامل برمی گرداند.

  2. int getRandomNumber (int min, int max) - یک عدد صحیح تصادفی را از min به (max–1) شامل می‌دهد.

9. محدودیت های موتور بازی

برای اجرای بازی ها در سایت، آنها به جاوا اسکریپت روی سرور ترجمه می شوند. در این زمینه محدودیت هایی ایجاد می شود. به طور خاص، هنگام نوشتن بازی‌ها با استفاده از موتور JavaRush، نمی‌توانید با فایل‌ها کار کنید، یا از همه متدهای کلاس System استفاده نکنید ، به جز ()currentTimeMillis ، setOut() ، setErr() ، arrayscopy() . همچنین می توانید از فیلدهای err و out استفاده کنید . با زیر پا گذاشتن این محدودیت ها، البته بازی را می توان کامپایل و اجرا کرد، اما امکان انتشار وجود نخواهد داشت. همچنین نمی توانید یک بازی با حلقه های بی نهایت منتشر کنید. همین! اگر می‌خواهید درباره بخش بازی‌ها اطلاعات بیشتری کسب کنید، در اینجا چند سند مفید وجود دارد که می‌تواند کمک کند:
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION