Tartalomjegyzék:

Programozza be saját 2048 játékát Java/Java !: 8 lépésben
Programozza be saját 2048 játékát Java/Java !: 8 lépésben

Videó: Programozza be saját 2048 játékát Java/Java !: 8 lépésben

Videó: Programozza be saját 2048 játékát Java/Java !: 8 lépésben
Videó: Writing 2D Games in C using SDL by Thomas Lively 2024, Július
Anonim

Szerző: PranP1My (Incomplete) SiteFollow More by the author:

Arduino CNC gép megmentett PC alkatrészekből
Arduino CNC gép megmentett PC alkatrészekből
Arduino CNC gép megmentett PC alkatrészekből
Arduino CNC gép megmentett PC alkatrészekből
DIY modern fa padok
DIY modern fa padok
DIY modern fa padok
DIY modern fa padok
Érintésmentes ajtónyitó (vSTEM)
Érintésmentes ajtónyitó (vSTEM)
Érintésmentes ajtónyitó (vSTEM)
Érintésmentes ajtónyitó (vSTEM)

Imádom a 2048 -as játékot. Ezért úgy döntöttem, hogy saját verziómat programozom.

Nagyon hasonlít a valódi játékhoz, de saját magam programozásával szabadon megváltoztathatom, amit akarok, amikor csak akarok. Ha 5x5 -ös játékot akarok a tipikus 4x4 helyett, akkor a „Board” konstruktor használatával végzett egyszerű változtatás lehetővé teszi ezt. Tegyük fel, hogy meg akarom nehezíteni a játékot, és olyan helyeken adok hozzá darabokat, amelyek a játékos számára a legösszetettebbé teszik, nem pedig véletlenszerűen. Egy egyszerű algoritmus segítségével ezt meg tudom tenni. Bár nem fogom lefedni mindezeket a módosításokat ebben az utasításban, tervezem, hogy közben hozzáadok többet.

Egyelőre azonban a tipikus 2048 -as játékot programozzuk.

Lássunk neki!

(Mellékhelyzetben: Ez az Instructable mérsékelt programozási ismereteket igényel - különösen Java -val)

1. lépés: Anyagok

Anyagok
Anyagok

Nem lesz sok szüksége erre a projektre, mivel ez csak egy programozási bemutató.

Anyagok:

  • Laptop
  • Eclipse (vagy tetszőleges IDE)

Aha. Ez az.

2. lépés: Ismerje meg a programot - tábla

Feltöltöttem az összes kódomat a GitHubra - nézd meg itt:

A játékot 3 osztályra osztottam: Board, Tile és Game.

Tábla:

Leírás: A Board osztály foglalkozik a játéktáblával, felállít egy „Tile” elemekből álló tömböt, megkapja az aktuális pontszámot és a legmagasabb lapkát, és a tömböt karakterláncba helyezi (később használni kell a „Game” -ben). A logika nagy része is itt van, az osztály módszereket kínál a 2 -es és 4 -es ívására véletlenszerű helyeken, felfelé, lefelé, balra és jobbra mozogva, és értesíti a játékosokat, amikor a játéknak vége.

Konstruktorok:

/ * Alapértelmezett konstruktor a táblához - beállít egy 4x4 -es mátrixot */

nyilvános tanács () {…}

/ * Konstruktor a táblához - beállít egy mátrixot a megadott rácsmérettel */

nyilvános tanács (int rácsok) {…}

Mód:

/ * Getter módszer, amely visszaadja a táblát */

nyilvános csempe getBoard () {…}

/ * Getter módszer, amely visszaadja a pontszámot */

public int getScore () {…}

/ * Megtalálja a legmagasabb lapkát a táblán, és visszaadja */

public int getHighTile () {…}

/ * Kinyomtatja a táblát a konzolra - tesztelés céljából */

public void print () {…}

/ * A táblát karakterláncként adja vissza - a GUI -ban használják */

public String toString () {…}

/ * 2 -t (vagy 4 -et) hoz létre egy üres helyen, amikor a lépést végrehajtják */

public void spawn () {…}

/ * Ellenőrzi, hogy a tábla teljesen elsötétült -e, és ha igen, akkor arra ösztönzi a játékosokat, hogy induljanak újra */

public boolean blackOut () {…}

/ * Ellenőrzi, hogy véget ért -e a játék - amikor a tábla elsötétült, és egyik lapka sem kombinálható */

public boolean gameOver () {…}

/ * A "w" vagy a felfelé mutató nyíl megnyomásakor hívják - a "verticalMove" meghívja a táblán lévő összes lapot az "up" paraméterrel */

public void up () {…}

/ * Az „s” vagy a lefelé mutató nyíl megnyomásakor hívják - a „verticalMove” parancsot hívja meg a táblán minden lefelé, a „le” paraméterrel */public void down () {…}

/ * A „d” vagy a jobbra mutató nyíl megnyomásakor hívják - hívja a „horizontalMove” parancsot a táblán a „right” */public void right paraméterrel () {…}

/ * Az "a" vagy a bal nyíl megnyomásakor hívják - a "horizontalMove" meghívja a táblán lévő összes lapot a "left" paraméterrel */

public void left () {…}

/* Összehasonlítja két csempe értékeit, és ha azonosak, vagy ha az egyik egyenlő 0 -val (sima csempe), akkor hozzáadjuk az értékeiket (feltéve, hogy az összehasonlítandó lapok két különböző lapka, és a megfelelő irányba haladnak) - rekurzívan mozog a sorban */

public void horizontalMove (int sor, int col, String irány) {…}

/* Összehasonlítja két csempe értékeit, és ha azonosak, vagy ha az egyik egyenlő 0 -val (sima csempe), akkor hozzáadjuk az értékeiket (feltéve, hogy az összehasonlítandó lapok két különböző lapka, és a megfelelő irányba haladnak) - rekurzívan mozog az oszlopon */

public void verticalMove (sor, int oszlop, karakterlánc iránya) {…}

Igen, ez sok módszer - de ne aggódjon, a legtöbb rendkívül könnyen érthető. Ezen felül a „Board” osztály a legösszetettebb, így ezután minden viszonylag egyszerű lesz.

3. lépés: Ismerje meg a programot - Csempe

Csempe:

Leírás: A Csempe osztály az egyes lapokkal foglalkozik, és az összes osztály közül a legkisebb. Minden csempe egész értékkel és színnel rendelkezik. Két konstruktorral rendelkezik, amelyek 0 (alapértelmezett) vagy #értékű csempéket hoznak létre. A módszerek többnyire magától értetődőek, a „getter” és „setter” módszerek teszik ki a teljes tömeget.

Konstruktorok:

/ * Egy alaplapkát készít, amelynek értéke 0 */

nyilvános csempe () {…}

/ * Csempét készít egy szám értékkel */

nyilvános csempe (int szám) {…}

Mód:

/ * Megkapja a csempe értékét */

public int getValue () {…}

/ * Beállítja a csempe értékét - két lap összeillesztésekor használatos */

public void setValue (int érték) {…}

/ * A csempét karakterláncként jelöli - a GUI -ban használják */

public String toString () {…}

/ * Beállítja a csempe színét az értéke alapján */

public void setColor () {…}

/ * Megkapja a csempe színét */

public void getColor () {…}

4. lépés: Ismerje meg a programot - játék

Játszma, meccs

Leírás: A Game Class tartalmazza a fő módszert, a legtöbb GUI módszert és a legfontosabb interakciókat. A csempe és a tábla osztályokat is igénybe veszi, és lehetővé teszi számukra, hogy együtt dolgozzanak.

Konstruktorok:

Egyik sem

Mód:

/ * beállítja a megfelelő méretű GUI -t, és hozzáad egy kulcsfigyelőt */

public static void setUpGUI () {…}

/ * Ellenőrzi, hogy megnyomták -e a wasd vagy a nyíl billentyűket, és elvégzi a megfelelő műveleteket - minden mozdulattal frissíti a JFrame -et */

public void keyNyomva (KeyEvent e) {…}

/ * Festi a GUI -t egy sor karakterlánccal, a táblával és a lapokkal, és biztosítja, hogy a játék végeztével átfestik őket */

public void paint (grafika g) {…}

/ * rajzol egy egyedi lapkát - a festési módszerből hívják */

public void drawTiles (Graphics G, Tile tile, int x, int y) {…}

/ * Fő módszer - beállítja a GUI -t és elindítja a játékot */

public static void main (String args) {…}

5. lépés: Fontos módszerek - Mozgás

A mozgásmódszerek megértése a legfontosabb, de a jó hír az, hogy ha megérti a függőleges mozgásokat, akkor ezt a megértést alkalmazhatja a vízszintes mozgásokra is. Valójában a három függőleges mozgási módszer pontosan megegyezik a három vízszintes módszermozgással, kivéve az egyiket a sorokon, a másikat az oszlopokon. Ezért csak a függőleges mozgási módszerekre koncentráljunk.

private void verticalMove (int sor, int col, String irány)

{Csempe kezdőbetű = tábla [szegély] [col]; Csempe összehasonlítása = tábla [sor] [oszlop]; if (initial.getValue () == 0 || kezdeti.getValue () == összehasonlítás.getValue ()) {if (sor> szegmens || (direction.equals ("le") && (sor <szegély))) {int addScore = kezdő.getValue () + összehasonlítás.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); compa.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (sor, oszlop, irány); }}

A fenti vertikális mozgatási módot a „fel” és „le” metódusok hívják. Nézzük a „fel” módszert.

nyilvános érvénytelenítés ()

{for (int i = 0; i <rácsok; i ++) {border = 0; for (int j = 0; j <rácsok; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}

Ez a módszer végigmegy a táblán, és a „up” paraméterrel minden csempe függvényében hívja a verticalMove -t. verticalMove ezután összehasonlítja a „j” és „i” helyzetű csempét a „border” és „i” pozícióban lévő csempével. Ha a kettő egyenlő, akkor egyesítik. Ha nem, akkor a szegélylapkát 1 -gyel növeli (mivel a helyén lévő paraméter „fel”), és a verticalMove újra meghívásra kerül.

Ajánlott: