JavaRush /בלוג Java /Random-HE /סעיף "משחקים" ב-JavaRush: מנוע משחק

סעיף "משחקים" ב-JavaRush: מנוע משחק

פורסם בקבוצה
"משחקים" מ-JavaRush הוא חלק חדש המכיל פרויקטים גדולים של משימות לכתיבת משחקי מחשב פופולריים. ביצוען קל יותר ממה שזה נראה: כל פרויקט מחולק לשני תריסר משימות משנה. על ידי השלמת המשימות שלב אחר שלב, תכתוב את המשחק שלך, ולאחר מכן תוכל להוסיף לו "תכונות" ייחודיות ולשתף אותו עם חברים. פֶּרֶקהמשחקים משתמשים במנוע המשחק הפשוט של JavaRush . במאמר זה נדבר על התכונות המרכזיות שלו וכיצד נראה תהליך כתיבת המשחק.
  1. מבוא
  2. אתחול המשחק
  3. יצירת מגרש משחקים
  4. תוכנית פרימיטיבית
  5. עבודה עם התאים של מגרש המשחקים
  6. עבודה עם צבע
  7. תיבת דיאלוג
  8. שיטות שירות
  9. מגבלות מנוע המשחק

1. הקדמה

ישנם שלושה שלבים בהטמעת משחק מחשב מצד המפתח:
  1. אתחול המשחק הוא פעולות הכנה: קביעת גודל ושרטוט מגרש המשחקים, יצירה והתקנת חפצי משחק בעמדה ההתחלתית וכן פעולות נוספות שיש לבצע בתחילת המשחק.

  2. תהליך משחק. זה כולל תנועה של חפצי משחק, פעולות שחקן, התחשבות בנקודות שנצברו, כמו גם פעולות אחרות שיש לבצע במרווחי זמן מסוימים או על ידי לחיצה על כפתורים.

  3. מסיים את המשחק. זה כולל עצירת אנימציות, הכרזת ניצחון או תבוסה ופעולות אחרות שצריך לבצע בסוף המשחק.

2. אתחול המשחק

אתחול המשחק מורכב משני שלבים בלבד:

שלב 1: צור את מחלקת המשחק הראשית.

כדי לפתח את המשחק שלך על בסיס מנוע המשחק JavaRush, עליך ליצור מחלקה ולרשת אותה ממחלקת המשחק (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 width, int height) . זה קובע את גודל מגרש המשחקים. זה לוקח כפרמטרים את מספר התאים אופקית (רוחב) ואנכית (גובה). זה נקרא בדרך כלל פעם אחת כשהמשחק מתחיל. דוגמא:
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. צבע getCellColor(int x, int y) - מחזיר את צבע התא עם הקואורדינטות (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - ממקם את ערך הטקסט בתא עם קואורדינטות (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 value) - ממקם את ערך המספר בתא עם קואורדינטות (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. צבע getCellTextColor(int x, int y) - מחזיר את צבע התוכן (טקסט) בתא עם קואורדינטות (x, y):

    Color textColor = getCellTextColor(1, 3);
מטעמי נוחות, קיימות מספר שיטות setCellValueEx() עם קבוצות שונות של פרמטרים:
  1. void setCellValueEx(int ​​​​x, int y, Color cellColor, מחרוזת ערך) - מגדיר את התא עם קואורדינטות (x, y) צבע רקע תא צבע וערך תוכן:

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

  2. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor) - מגדיר את התא עם קואורדינטות (x, y) צבע רקע תא צבע, ערך תוכן וטקסט צבע תוכן:

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

  3. void setCellValueEx(int ​​​​x, int y, Color cellColor, ערך מחרוזת, 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. מגבלות מנוע המשחק

כדי להפעיל משחקים באתר, הם מתורגמים ל-JavaScript בשרת. בהקשר זה עולות כמה הגבלות. בפרט, בעת כתיבת משחקים באמצעות מנוע JavaRush, אינך יכול לעבוד עם קבצים, ולא להשתמש בכל השיטות של המחלקה System , מלבד currentTimeMillis() , setOut() , setErr() , arrayscopy() . אתה יכול גם להשתמש בשדות שגיאה ויציאה . בהפרת הגבלות אלו, ניתן כמובן להרכיב ולהריץ את המשחק, אך לא ניתן יהיה לפרסם אותו. אתה גם לא תוכל לפרסם משחק עם לולאות אינסופיות. זה הכל! אם אתה רוצה ללמוד עוד על קטע המשחקים, הנה כמה תיעוד שימושי שיכול לעזור:
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION