CodeGym /בלוג Java /Random-HE /מדור משחקים ב- CodeGym: מנוע משחק
John Squirrels
רָמָה
San Francisco

מדור משחקים ב- CodeGym: מנוע משחק

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

1. הקדמה

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

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

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

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

אתחול המשחק מורכב משני שלבים בלבד: שלב 1: צור את המחלקה הראשית של המשחק. כדי לפתח משחק משלך באמצעות מנוע המשחק CodeGym, עליך ליצור מחלקה שיורשת את Gameהמחלקה (com.codegym.engine.cell.Game). זה נותן לכיתה שלך את היכולת לקרוא לשיטות של מנוע המשחק, ונותן למנוע את היכולת לקרוא לשיטות שלך. לדוגמה:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
שלב 2: עוקף את שיטת האתחול (). כל הפעולות הנדרשות כדי להתחיל את המשחק יקרו בשיטה זו: יצירת שדה המשחק, יצירת אובייקטים במשחק וכו'. אתה פשוט צריך להכריז על השיטה הזו במחלקה שיורשת את המחלקה Game. לדוגמה:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        // Here we perform all actions to initialize the game and its objects
    }
}
השיטה initialize()מקבילה לשיטה main(): היא נקודת ההתחלה לכל הקוד שנכתב למשחק.

3. יצירת מגרש משחקים

יצירת מגרש משחקים מורכבת גם משני שלבים בלבד. שלב 1: חלקו את שדה המשחק לתאים. שדה המשחק כולו מחולק לתאים על ידי מנוע המשחק. הגודל המינימלי הוא 3x3; המקסימום הוא 100x100. המידות הן של מסך המשחק קבועות. ניתן לחלק אותו למספרים שונים של תאים. לדוגמה, 7 תאים ברוחב על 9 תאים בגובה: מדור "משחקים" ב-CodeGym: מנוע המשחק - 2שימו לב שהתאים ממוספרים החל מהפינה השמאלית העליונה. כדי להגדיר את גודל מגרש המשחקים, השתמש בשיטה void setScreenSize(int width, int height). זה קובע את גודל מגרש המשחקים. הפרמטרים שלו מייצגים את מספר התאים בצורה אופקית (רוחב) ואנכית (גובה). זה נקרא בדרך כלל פעם אחת כאשר המשחק מתחיל. לדוגמה:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       // Set the field size to 7 cells x 9 cells
       setScreenSize(7, 9);
        ...
    }
}
בעת כתיבת משחק, ייתכן שתצטרך לקבל את הרוחב והגובה הנוכחיים של מגרש המשחקים. לשם כך, השיטות int getScreenWidth()והשיטות int getScreenHeight()יהיו שימושיות. שלב 2: הפעל או כבה את הרשת (אופציונלי). אם אתה לא אוהב את הרשת השחורה שמפרידה בין התאים במגרש המשחקים, אתה יכול לכבות אותה. השיטה void showGrid(boolean isShow)מדליקה ומכבה את הרשת. כברירת מחדל, הרשת מוצגת. כדי לכבות אותה, קרא לשיטה זו עם false בתור הארגומנט:

showGrid(false);
תוצאה: מדור "משחקים" ב-CodeGym: מנוע משחק - 3כדי להפעיל מחדש את הרשת, התקשר:

showGrid(true);

4. תוכנית פרימיטיבית

הנה דוגמה לתוכנית:

public class MySuperGame extends Game {

    @Override
    public void initialize() {

        // Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        // Turn off the grid
        showGrid(false);
        // Change the background of the center cell to blue, and display an "X" in it.
        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, String value)- מגדיר את הטקסט של התא עם קואורדינטות (x, y) שווה למחרוזת בפרמטר הערך:

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

  4. String 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% of the cell height

  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. Color getCellTextColor(int x, int y)- מחזירה את צבע התוכן (טקסט) של התא עם קואורדינטות (x, y):

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

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

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

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

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

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

6. עבודה עם צבע

האחראי Color enumעל הצבעים במנוע המשחק. יש לו ערכים ייחודיים עבור 148 צבעים. יש לו גם ערך מיוחד (NONE) שאינו מייצג שום צבע. הנה דוגמה לעבודה עם צבע:

Color myColor = Color.WHITE;  // The myColor variable is set to white.
Color redColor = Color.RED;  // The redColor variable is set to red.
Color blueColor = Color.BLUE;  // The blueColor variable is set to light blue.
לפעמים ייתכן שיהיה עליך לקבל מערך של כל הצבעים הקיימים. לשם כך, השתמש values()בשיטה. לדוגמה:

Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
קל מאוד לקבל אינדקס של צבע בפלטה:

Color color = Color.RED;
int redIndex = color.ordinal();  // Index of red

int blueIndex = Color.BLUE.ordinal();  // Index of blue
אתה יכול גם לקבל צבע לפי האינדקס שלו:

Color color = Color.values()[10];  // The color variable is assigned the color with index 10 in the Color enum.

7. תיבות דו-שיח

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

void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
כאן:
  • cellColorהוא צבע הרקע של תיבת הדו-שיח;
  • messageהוא הטקסט של ההודעה;
  • textColorהוא הצבע של טקסט ההודעה;
  • textSizeהוא גודל טקסט ההודעה.
תיבת הדו-שיח נסגרת מעצמה אם המשתמש לוחץ על מקש הרווח.

8. שיטות שירות

בעת כתיבת משחקים, נעשה שימוש רב במספרים אקראיים. כדי להקל על קבלת מספרים אקראיים, אתה יכול להשתמש בשיטות השירות הבאות שסופקו על ידי מנוע המשחק:
  1. int getRandomNumber(int max)- מחזיר מספר שלם אקראי מ-0 עד (מקסימום-1) כולל.

  2. int getRandomNumber(int min, int max)- מחזיר מספר שלם אקראי מ-min עד (max-1) כולל.

זה הכל לעת עתה! אם אתה רוצה ללמוד עוד על הקטע "משחקים", הנה כמה תיעוד שימושי שיכול לעזור:
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION