CodeGym/Java blog/Véletlen/Játékok szekció a CodeGym-en: Játékmotor
John Squirrels
Szint
San Francisco

Játékok szekció a CodeGym-en: Játékmotor

Megjelent a csoportban
A CodeGym "Játékai" egy új rész nagy feladatokkal, amelyek közé tartozik a népszerű számítógépes játékok írása. Könnyebb létrehozni, mint amilyennek látszik: minden projekt húsz részfeladatra van felosztva. A feladatok lépésről lépésre történő elvégzésével megírja saját játékát, majd egyedi funkciókat adhat hozzá, és megoszthatja barátaival. A CodeGym „Játékok” szakasza: Játékmotor – 1A játékok az egyszerű CodeGym játékmotort használják . Ebben a cikkben leírjuk a legfontosabb jellemzőit , és azt, hogy hogyan néz ki a játékírási folyamat.

1. Bemutatkozás

A fejlesztő számára a számítógépes játék megvalósításának három szakasza van:
  1. A játék inicializálása — Ez a szakasz előkészítő műveletekből áll: a játéktér méretének beállítása, a játéktér megrajzolása, játékobjektumok létrehozása és kezdeti helyzetükbe helyezése, valamint egyéb műveletek, amelyeket a játék elején végre kell hajtani.

  2. A játék folyamata. Ez a szakasz magában foglalja a játéktárgyak mozgatását, a játékos akcióit, a pontszám megtartását és egyéb olyan műveleteket, amelyeket bizonyos gyakorisággal vagy gombnyomással kell végrehajtani.

  3. A játék befejezése. Ez a szakasz magában foglalja az animáció leállítását, a győzelem vagy veszteség jelentését, és egyéb műveleteket, amelyeket a játék végén végre kell hajtani.

2. A játék inicializálása

A játék inicializálása mindössze két lépésből áll: 1. lépés: A játék fő osztályának létrehozása. Saját játék fejlesztéséhez a CodeGym játékmotor használatával létre kell hoznia egy osztályt, amely örökli az Gameosztályt (com.codegym.engine.cell.Game). Ez lehetővé teszi az osztályod számára, hogy meghívja a játékmotor metódusait, és lehetőséget ad a motornak a saját módszereinek meghívására. Például:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
2. lépés: Az inicializálási metódus() felülbírálása. A játék elindításához szükséges összes művelet ebben a metódusban fog megtörténni: a játéktér létrehozása, játékobjektumok létrehozása stb. Egyszerűen deklarálnia kell ezt a metódust abban az osztályban, amely örökli az osztályt Game. Például:
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
    }
}
A initialize()módszer analóg a metódussal main(): ez a kiindulópontja a játékhoz írt összes kódnak.

3. Játéktér kialakítása

A játéktér kialakítása is csak két lépésből áll. 1. lépés: Ossza fel a játékteret cellákra. A játékmotor a teljes játékteret cellákra osztja. A minimális méret 3x3; a maximum 100x100. A játék képernyőjének méretei állandóak. Különböző számú cellára osztható. Például, 7 cella széles és 9 cella magas: "Játékok" szakasz a CodeGym-en: Játékmotor - 2Vegye figyelembe, hogy a cellák számozása a bal felső sarokból kezdődik. A játéktér méretének beállításához használja a void setScreenSize(int width, int height)módszert. Beállítja a játéktér méretét. Paraméterei a cellák számát jelentik vízszintesen (szélesség) és függőlegesen (magasság). Általában egyszer hívják a játék indításakor. Például:
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);
        ...
    }
}
A játék írásakor előfordulhat, hogy meg kell találnia a játékmező aktuális szélességét és magasságát. Ehhez a int getScreenWidth()és int getScreenHeight()módszerek jól jönnek majd. 2. lépés: Kapcsolja be vagy ki a rácsot (opcionális). Ha nem tetszik a játéktér celláit elválasztó fekete rács, akkor kikapcsolhatja. A void showGrid(boolean isShow)módszer be- és kikapcsolja a rácsot. Alapértelmezés szerint a rács jelenik meg. A kikapcsolásához hívja ezt a metódust false argumentumként:
showGrid(false);
Eredmény: „Játékok” szakasz a CodeGym-en: Játékmotor – 3A rács újbóli bekapcsolásához hívja:
showGrid(true);

4. Egy primitív program

Íme egy példa egy programra:
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);
    }
}
Ebben a példában a játékmező 3x3-ra van állítva, a rács ki van kapcsolva, és a cella méretének fele narancssárga "X" van beállítva kék háttérre a középső cellában. Ez lesz az első dolog, amit a játékos lát a játék kezdetekor.

5. Munka a játéktér celláival

Az, hogy a játékteret sejtekre oszthatjuk, nagyszerű, de mit tehetünk magukkal a sejtekkel? A következő tulajdonságokat állíthatja be a játékmező egyes celláihoz:
  • cella színe (cella háttérszíne);
  • szöveg (szöveg vagy szám);
  • szöveg szín;
  • szöveg mérete a cella méretének százalékában.
Nézzük meg a játékmező celláival való munkamódszereket :
  1. void setCellColor(int x, int y, Color color)— beállítja a cella színét koordinátákkal (x, y):

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

  2. Color getCellColor(int x, int y)— visszaadja a cella színét koordinátákkal (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value)— beállítja a cella szövegét, amelynek koordinátái (x, y) megegyeznek az értékparaméterben szereplő karakterlánccal:

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

  4. String getCellValue(int x, int y)— visszaadja a cellában lévő szöveget koordinátákkal (x, y):

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

  5. void setCellTextSize(int x, int y, int size)— beállítja a cella tartalmának méretét koordinátákkal (x, y). A méret paraméter a szöveg magassága a cella magasságának százalékában:

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

  6. int getCellTextSize(int x, int y)— visszaadja a cella tartalmának méretét koordinátákkal (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value)— beállítja a cella szövegét, amelynek koordinátái (x, y) megegyeznek az értékparaméterben szereplő számmal:

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

  8. int getCellNumber(int x, int y)— visszaadja a cellában lévő számot koordinátákkal (x, y). Ha a cella nem tartalmaz számot, 0-t ad vissza:

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

  9. void setCellTextColor(int x, int y, Color color)— beállítja a cella tartalmának (szövegének) színét koordinátákkal (x, y):

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

  10. Color getCellTextColor(int x, int y)— visszaadja a cella tartalmának (szövegének) színét koordinátákkal (x, y):

    Color textColor = getCellTextColor(1, 3);
A kényelem érdekében számos módszer létezik setCellValueEx()különböző paraméterkészletekkel:
  1. void setCellValueEx(int x, int y, Color cellColor, String value)— beállítja a háttérszínt (cellColor) és a cella tartalmát (értékét) koordinátákkal (x, y):

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor)— beállítja a cella háttérszínét (cellColor), tartalmát (értékét) és szövegszínét (textColor) koordinátákkal (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)— beállítja a cella háttérszínét (cellColor), tartalmát (értékét), szövegszínét (textColor) és szövegméretét (textSize) koordinátákkal (x, y):

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

6. Színekkel való munka

A Color enumszínekért felelős a játékmotorban. 148 szín egyedi értékeivel rendelkezik. Ezenkívül van egy speciális értéke (NONE), amely nem jelent színt. Íme egy példa a színekkel való munkára:
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.
Néha előfordulhat, hogy be kell szereznie az összes létező szín tömbjét. Ehhez használja a values()módszert. Például:
Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
Nagyon egyszerű színindexet találni a palettán:
Color color = Color.RED;
int redIndex = color.ordinal();  // Index of red

int blueIndex = Color.BLUE.ordinal();  // Index of blue
Az index alapján is kaphat színt:
Color color = Color.values()[10];  // The color variable is assigned the color with index 10 in the Color enum.

7. Párbeszédpanelek

A játék végén jelentenie kell a játékosnak a győzelmet vagy a vereséget. Ehhez van egy speciális módszer, amely egy párbeszédpanelt jelenít meg a játék képernyőjén:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Itt:
  • cellColora párbeszédpanel háttérszíne;
  • messageaz üzenet szövege;
  • textColoraz üzenet szövegének színe;
  • textSizeaz üzenet szövegének mérete.
A párbeszédpanel magától bezárul, ha a felhasználó megnyomja a szóköz billentyűt.

8. Hasznossági módszerek

Játékok írásakor gyakran használnak véletlen számokat. A véletlen számok beszerzésének megkönnyítése érdekében a játékmotor által biztosított alábbi segédprogramokat használhatja:
  1. int getRandomNumber(int max)— véletlenszerű egész számot ad vissza 0-tól (max-1)-ig.

  2. int getRandomNumber(int min, int max)— egy véletlenszerű egész számot ad vissza mintől (max-1)-ig.

Ez minden most! Ha többet szeretne megtudni a "Játékok" részről, itt van néhány hasznos dokumentáció, amely segíthet:
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései