CodeGym /Blog Java /Aleatoriu /Secțiunea de jocuri pe CodeGym: Motor de joc
John Squirrels
Nivel
San Francisco

Secțiunea de jocuri pe CodeGym: Motor de joc

Publicat în grup
„Jocuri” de la CodeGym este o nouă secțiune cu sarcini mari care implică scrierea unor jocuri populare pe calculator. Sunt mai ușor de creat decât pare: fiecare proiect este împărțit în douăzeci de subsarcini. Terminând sarcinile pas cu pas, vă veți scrie propriul joc, apoi puteți adăuga caracteristici unice și îl puteți partaja prietenilor. Secțiunea „Jocuri” de pe CodeGym: Motor de joc - 1Jocurile folosesc motorul de joc CodeGym simplu . În acest articol, vom descrie caracteristicile sale cheie și cum arată procesul de scriere a jocului.

1. Introducere

Pentru dezvoltator, există trei etape pentru implementarea unui joc pe computer:
  1. Inițializarea jocului — Această etapă constă în acțiuni pregătitoare: stabilirea dimensiunii terenului de joc, desenarea terenului de joc, crearea obiectelor de joc și punerea lor în pozițiile inițiale și alte acțiuni care trebuie efectuate la începutul jocului.

  2. Procesul jocului. Această etapă include mutarea obiectelor de joc, acțiunile jucătorului, păstrarea scorului și alte acțiuni care trebuie efectuate la o anumită frecvență sau atunci când butoanele sunt apăsate.

  3. Finalizarea jocului. Această etapă include oprirea animației, raportarea unei câștiguri sau pierderi și alte acțiuni care trebuie efectuate la sfârșitul jocului.

2. Inițializarea jocului

Inițializarea jocului constă în doar doi pași: Pasul 1: Creați clasa principală a jocului. Pentru a vă dezvolta propriul joc folosind motorul de joc CodeGym, trebuie să creați o clasă care moștenește clasa Game(com.codegym.engine.cell.Game). Acest lucru oferă clasei dvs. capacitatea de a apela metodele motorului de joc și oferă motorului capacitatea de a apela metodele dvs. De exemplu:

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
Pasul 2: Suprascrieți metoda de inițializare (). Toate acțiunile necesare pentru a începe jocul se vor întâmpla în această metodă: crearea terenului de joc, crearea obiectelor de joc etc. Trebuie pur și simplu să declarați această metodă în clasa care moștenește clasa Game. De exemplu:

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
    }
}
Metoda initialize()este analogă cu main()metoda: este punctul de plecare pentru tot codul scris pentru joc.

3. Crearea unui teren de joc

Crearea unui teren de joc constă și în doar doi pași. Pasul 1: Împărțiți terenul de joc în celule. Întregul teren de joc este împărțit în celule de către motorul de joc. Dimensiunea minima este 3x3; maximul este 100x100. Dimensiunile ecranului de joc sunt constante. Poate fi împărțit în număr diferit de celule. De exemplu, 7 celule lățime și 9 celule înălțime: Secțiunea „Jocuri” de pe CodeGym: Motor de joc - 2rețineți că celulele sunt numerotate începând din colțul din stânga sus. Pentru a seta dimensiunea terenului de joc, utilizați void setScreenSize(int width, int height)metoda. Stabilește dimensiunea terenului de joc. Parametrii săi reprezintă numărul de celule orizontal (lățime) și vertical (înălțime). De obicei, este numit o dată când jocul este început. De exemplu:

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);
        ...
    }
}
Când scrieți un joc, poate fi necesar să obțineți lățimea și înălțimea curentă a terenului de joc. Pentru a face acest lucru, metodele int getScreenWidth()și int getScreenHeight()vor fi utile. Pasul 2: Porniți sau opriți grila (opțional). Dacă nu vă place grila neagră care separă celulele de pe terenul de joc, o puteți dezactiva. Metoda void showGrid(boolean isShow)pornește și dezactivează grila. În mod implicit, grila este afișată. Pentru a o dezactiva, apelați această metodă cu false ca argument:

showGrid(false);
Rezultat: Secțiunea „Jocuri” de pe CodeGym: Motor de joc - 3Pentru a reporni grila, sunați:

showGrid(true);

4. Un program primitiv

Iată un exemplu de program:

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);
    }
}
În acest exemplu, câmpul de joc este setat la 3x3, grila este dezactivată și un „X” portocaliu, jumătate din dimensiunea celulei este setat pe un fundal albastru în celula centrală. Acesta va fi primul lucru pe care îl va vedea jucătorul când începe jocul.

5. Lucrul cu celulele terenului de joc

Faptul că putem împărți terenul de joc în celule este grozav, dar ce putem face cu celulele în sine? Puteți seta următoarele proprietăți pentru fiecare celulă a terenului de joc:
  • culoarea celulei (culoarea de fundal a celulei);
  • text (text sau număr);
  • culoarea textului;
  • dimensiunea textului ca procent din dimensiunea celulei.
Să ne uităm la metodele de lucru cu celulele terenului de joc :
  1. void setCellColor(int x, int y, Color color)— setează culoarea celulei cu coordonatele (x, y):

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

  2. Color getCellColor(int x, int y)— returnează culoarea celulei cu coordonatele (x, y):

    
    Color myColor = getCellColor(2, 0);
    

  3. void setCellValue(int x, int y, String value)— setează textul celulei cu coordonatele (x, y) egale cu șirul din parametrul valoare:

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

  4. String getCellValue(int x, int y)— returnează textul conținut în celulă cu coordonatele (x, y):

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

  5. void setCellTextSize(int x, int y, int size)— setează dimensiunea conținutului celulei cu coordonatele (x, y). Parametrul dimensiune este înălțimea textului ca procent din înălțimea celulei:

    
    setCellTextSize(2 , 0, 70); // 70% of the cell height
    

  6. int getCellTextSize(int x, int y)— returnează dimensiunea conținutului celulei cu coordonatele (x, y):

    
    int size = getCellTextSize(2 , 0);
    

  7. void setCellNumber(int x, int y, int value)— setează textul celulei cu coordonatele (x, y) egale cu numărul din parametrul valoare:

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

  8. int getCellNumber(int x, int y)— returnează numărul conținut în celulă cu coordonatele (x, y). Dacă celula nu conține un număr, returnează 0:

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

  9. void setCellTextColor(int x, int y, Color color)— setează culoarea conținutului (textului) celulei cu coordonatele (x, y):

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

  10. Color getCellTextColor(int x, int y)— returnează culoarea conținutului (textului) celulei cu coordonatele (x, y):

    
    Color textColor = getCellTextColor(1, 3);
    
Pentru comoditate, există mai multe setCellValueEx()metode cu seturi diferite de parametri:
  1. void setCellValueEx(int x, int y, Color cellColor, String value)— setează culoarea de fundal (cellColor) și conținutul (valoarea) celulei cu coordonatele (x, y):

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor)— setează culoarea de fundal (cellColor), conținutul (valoarea) și culoarea textului (textColor) celulei cu coordonatele (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)— setează culoarea de fundal (cellColor), conținutul (valoarea), culoarea textului (textColor) și dimensiunea textului (textSize) celulei cu coordonatele (x, y):

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

6. Lucrul cu culoarea

Este Color enumresponsabil pentru culorile din motorul jocului. Are valori unice pentru 148 de culori. De asemenea, are o valoare specială (NONE) care nu reprezintă nicio culoare. Iată un exemplu de lucru cu culoarea:

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.
Uneori, poate fi necesar să obțineți o serie de toate culorile existente. Pentru a face acest lucru, utilizați values()metoda. De exemplu:

Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
Este foarte ușor să obțineți indexul unei culori în paletă:

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

int blueIndex = Color.BLUE.ordinal();  // Index of blue
De asemenea, puteți obține o culoare după indicele ei:

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

7. Casete de dialog

La sfârșitul jocului, trebuie să raportați jucătorului o victorie sau o pierdere. Pentru a face acest lucru, există o metodă specială care afișează o casetă de dialog pe ecranul jocului:

void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Aici:
  • cellColoreste culoarea de fundal a casetei de dialog;
  • messageeste textul mesajului;
  • textColoreste culoarea textului mesajului;
  • textSizeeste dimensiunea textului mesajului.
Caseta de dialog se închide singură dacă utilizatorul apasă pe bara de spațiu.

8. Metode de utilitate

Când scrieți jocuri, numerele aleatoare sunt folosite foarte mult. Pentru a obține mai ușor numere aleatorii, puteți utiliza următoarele metode utilitare oferite de motorul de joc:
  1. int getRandomNumber(int max)— returnează un număr întreg aleatoriu de la 0 la (max-1) inclusiv.

  2. int getRandomNumber(int min, int max)— returnează un număr întreg aleatoriu de la min la (max-1) inclusiv.

Asta este tot pentru acum! Dacă doriți să aflați mai multe despre secțiunea „Jocuri”, iată o documentație utilă care vă poate ajuta:
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION