Obsah:

Naprogramujte si vlastnú hru 2048 W/Java !: 8 krokov
Naprogramujte si vlastnú hru 2048 W/Java !: 8 krokov

Video: Naprogramujte si vlastnú hru 2048 W/Java !: 8 krokov

Video: Naprogramujte si vlastnú hru 2048 W/Java !: 8 krokov
Video: Написание 2D-игр на C с использованием SDL Томаса Лайвли 2024, November
Anonim

Od PranP1My (neúplné) stránky Nasledovať viac od autora:

CNC stroj Arduino zo zachránených súčiastok do počítača
CNC stroj Arduino zo zachránených súčiastok do počítača
CNC stroj Arduino zo zachránených súčiastok do počítača
CNC stroj Arduino zo zachránených súčiastok do počítača
DIY moderné drevené lavice
DIY moderné drevené lavice
DIY moderné drevené lavice
DIY moderné drevené lavice
Bezkontaktný otvárač dverí (vSTEM)
Bezkontaktný otvárač dverí (vSTEM)
Bezkontaktný otvárač dverí (vSTEM)
Bezkontaktný otvárač dverí (vSTEM)

Milujem hru 2048. A tak som sa rozhodol naprogramovať vlastnú verziu.

Je to veľmi podobné skutočnej hre, ale samotné programovanie mi dáva slobodu zmeniť čokoľvek chcem, kedykoľvek chcem. Ak chcem namiesto typického 4x4 hru 5x5, jednoduchá zmena pomocou konštruktéra „Board“mi to umožní. Povedzme, že chcem hru sťažiť a pridať figúrky na pozície, ktoré budú pre hráča najkomplexnejšie, a nie náhodne. Pomocou jednoduchého algoritmu to môžem urobiť. Aj keď nebudem pokrývať všetky tieto úpravy v tomto návode, mám v pláne postupne pridávať ďalšie.

Zatiaľ však naprogramujeme vašu typickú hru na rok 2048.

Začnime!

(Poznámka na stranu: Tento návod vyžaduje mierne znalosti programovania - konkrétne s jazykom Java)

Krok 1: Materiály

Materiály
Materiály

Na tento projekt nebudete potrebovať veľa, pretože je to len návod na programovanie.

Materiály:

  • Prenosný počítač
  • Eclipse (alebo akékoľvek IDE podľa vášho výberu)

Áno. To je všetko.

Krok 2: Zoznámte sa s programom - rada

Nahral som celý svoj kód na GitHub - pozrite sa sem:

Hru som rozdelil do 3 tried: doska, dlaždica a hra.

Doska:

Popis: Trieda Board sa zaoberá hracou doskou, nastavením radu prvkov „dlaždíc“, získaním aktuálneho skóre a najvyššej dlaždice a umiestnením poľa do reťazca (bude sa neskôr používať v „hre“). Väčšina logiky je tu tiež. Táto trieda poskytuje metódy na spawnovanie dvojiek a štvoriek na náhodných miestach, pohyb hore, dole, doľava a doprava a informovanie hráčov, keď sa hra skončí.

Konštruktéri:

/ * Predvolený konštruktér pre tabuľu - nastavuje maticu 4x4 */

verejná rada () {…}

/ * Constructor for the Board - nastaví maticu so zadanou veľkosťou mriežky */

public Board (int grids) {…}

Metódy:

/ * Metóda getra, ktorá vráti tabuľu */

verejná dlaždica getBoard () {…}

/ * Metóda getra, ktorá vracia skóre */

public int getScore () {…}

/ * Nájde najvyššiu dlaždicu na doske a vráti ju */

public int getHighTile () {…}

/ * Vytlačí dosku na konzolu - na testovacie účely */

verejná prázdna tlač () {…}

/ * Vráti dosku ako reťazec - používa sa v GUI */

public String toString () {…}

/ * Ukáže 2 (alebo 4) na prázdnom mieste, hneď ako je urobený ťah */

spawn public void () {…}

/ * Skontroluje, či je doska úplne začiernená a ak áno, prinúti hráčov reštartovať */

public boolean blackOut () {…}

/ * Skontroluje, či sa hra skončila - keď je doska stmavená a žiadna z dlaždíc sa nedá kombinovať */

public boolean gameOver () {…}

/ * Volá sa, keď je stlačené 'w' alebo šípka hore - volá 'verticalMove' pre každú dlaždicu na doske s parametrom 'hore' */

verejná neplatnosť () {…}

/ * Volá sa, keď stlačíte šípku 's' alebo nadol - volá 'verticalMove' pre každú dlaždicu na doske s parametrom 'dole' */public void down () {…}

/ * Volá sa, keď je stlačené 'd' alebo šípka doprava - volá 'horizontalMove' pre každú dlaždicu na doske s parametrom 'vpravo' */public void right () {…}

/ * Volá sa, keď je stlačené 'a' alebo šípka doľava - volá 'horizontalMove' pre každú dlaždicu na doske s parametrom 'left' */

verejná prázdnota vľavo () {…}

/* Porovnáva hodnoty dvoch dlaždíc dohromady a ak sú rovnaké alebo ak sa jedna rovná 0 (obyčajná dlaždica) - ich hodnoty sa sčítajú (za predpokladu, že dlaždice, ktoré porovnávame, sú dve rôzne dlaždice a pohybujú sa príslušným smerom) - rekurzívne sa pohybuje v riadku */

public void horizontalMove (int rad, int col, smer strunu) {…}

/* Porovnáva hodnoty dvoch dlaždíc dohromady a ak sú rovnaké alebo ak sa jedna rovná 0 (obyčajná dlaždica) - ich hodnoty sa sčítajú (za predpokladu, že dlaždice, ktoré porovnávame, sú dve rôzne dlaždice a pohybujú sa príslušným smerom) - rekurzívne sa pohybuje v stĺpci */

public void verticalMove (int rad, int col, smer reťazca) {…}

Áno, je to veľa metód - ale nebojte sa, väčšina je veľmi ľahko zrozumiteľná. Okrem toho je trieda „Board“najkomplexnejšia, takže všetko potom bude relatívne jednoduché.

Krok 3: Zoznámte sa s programom - dlaždica

Dlaždica:

Popis: Trieda Tile sa zaoberá jednotlivými dlaždicami a je najmenšia zo všetkých tried. Každá dlaždica má celočíselnú hodnotu a farbu. Má dva konštruktory, ktoré vytvárajú dlaždice hodnoty 0 (predvolené) alebo hodnoty #. Metódy sú väčšinou samovysvetľujúce a väčšinu z nich tvoria metódy „getter“a „setter“.

Konštruktéri:

/ * Zostaví základnú dlaždicu s hodnotou 0 */

verejná dlaždica () {…}

/ * Zostaví dlaždicu s hodnotou čísla */

public Tile (int number) {…}

Metódy:

/ * Získa hodnotu dlaždice */

public int getValue () {…}

/ * Nastaví hodnotu dlaždice - používa sa pri sčítaní dvoch dlaždíc dohromady */

public void setValue (int value) {…}

/ * Predstavuje dlaždicu ako reťazec - používa sa v GUI */

public String toString () {…}

/ * Nastaví farbu dlaždice na základe jej hodnoty */

public void setColor () {…}

/ * Získa farbu dlaždice */

public void getColor () {…}

Krok 4: Zoznámte sa s programom - hrou

Hra

Popis: Herná trieda obsahuje hlavnú metódu, väčšinu metód GUI a interakcie s kľúčmi. Preberá triedy Tile a Board a umožňuje im spolupracovať.

Konštruktéri:

Žiadny

Metódy:

/ * nastaví GUI s vhodnými veľkosťami a pridá poslucháč kľúčov */

verejná statická prázdnota setUpGUI () {…}

/ * Skontroluje, či sú stlačené klávesy wasd alebo šípky a vykonáva príslušné akcie - aktualizuje JFrame každým pohybom */

public void keyPressed (KeyEvent e) {…}

/ * GUI namaľuje sériou strún, dosky, dlaždíc a zaistí, aby boli po skončení hry prefarbené */

public void paint (grafika g) {…}

/ * nakreslí jednotlivú dlaždicu - volá sa metódou maľovania */

public void drawTiles (grafika g, dlaždica, int x, int y) {…}

/ * Hlavná metóda - nastaví GUI a spustí hru */

public static void main (reťazce args) {…}

Krok 5: Dôležité metódy - pohyb

Metódy pohybu sú najdôležitejšie na pochopenie, ale dobrou správou je, že akonáhle porozumiete vertikálnym pohybom, môžete ich porozumenie použiť na horizontálne pohyby. V skutočnosti sú tri metódy vertikálneho pohybu úplne rovnaké ako tri pohyby horizontálnou metódou, ibaže jeden sa pohybuje cez riadky a druhý cez stĺpce. Z tohto dôvodu sa zamerajme iba na metódy vertikálneho pohybu.

súkromná prázdna vertikálaPohyb (int rad, int col, smer reťazca)

{Tile initial = board [border] [col]; Porovnanie dlaždíc = doska [riadok] [stĺpec]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (row> border || (direction.equals ("down") && (row <border))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); porovnať.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (riadok, stĺpček, smer); }}

Vyššie uvedená metóda, verticalMove, sa nazýva metódami „hore“a „dole“. Pozrime sa na metódu „hore“.

verejná neplatnosť ()

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

Táto metóda prechádza celou doskou a volá verticalMove pre každú dlaždicu s parametrom „hore“. verticalMove potom porovná dlaždicu v polohe „j“a „i“s dlaždicou v polohe „hranica“a „i“. Ak sú tieto dve rovnaké, spoja sa. Ak nie sú, dlaždica orámovania sa zvýši o 1 (pretože nastavený parameter je „hore“) a zavolá sa znova verticalMove.

Odporúča: