Obsah:

Naprogramujte si vlastní hru 2048 s Javou !: 8 kroků
Naprogramujte si vlastní hru 2048 s Javou !: 8 kroků

Video: Naprogramujte si vlastní hru 2048 s Javou !: 8 kroků

Video: Naprogramujte si vlastní hru 2048 s Javou !: 8 kroků
Video: Jak Naprogramovat VLASTNÍ HRU do 1 TÝDNE! (pro Začátečníky) 2024, Listopad
Anonim

Od PranP1My (neúplné) stránkyDalší od autora:

Arduino CNC stroj ze zachráněných PC dílů
Arduino CNC stroj ze zachráněných PC dílů
Arduino CNC stroj ze zachráněných PC dílů
Arduino CNC stroj ze zachráněných PC dílů
DIY moderní dřevěné lavice
DIY moderní dřevěné lavice
DIY moderní dřevěné lavice
DIY moderní dřevěné lavice
Bezkontaktní otvírač dveří (vSTEM)
Bezkontaktní otvírač dveří (vSTEM)
Bezkontaktní otvírač dveří (vSTEM)
Bezkontaktní otvírač dveří (vSTEM)

Miluji hru 2048. A tak jsem se rozhodl naprogramovat vlastní verzi.

Je to velmi podobné skutečné hře, ale samotné programování mi dává svobodu změnit, co chci, kdykoli chci. Pokud chci místo typického 4x4 hru 5x5, jednoduchá změna pomocí konstruktoru 'Board' mi to umožní. Řekněme, že chci hru ztížit a přidávat figurky na pozice, které ji pro hráče budou nejkomplikovanější než náhodně. Pomocí jednoduchého algoritmu to dokážu. I když nebudu pokrývat všechny tyto úpravy v tomto Instructable, mám v plánu přidávat další, jak jdu.

Prozatím však naprogramujeme vaši typickou hru 2048.

Začněme!

(A postranní poznámka: Tento Instructable vyžaduje mírné znalosti programování - konkrétně s Javou)

Krok 1: Materiály

Materiály
Materiály

Pro tento projekt nebudete potřebovat mnoho, protože je to jen návod k programování.

Materiály:

  • Notebook
  • Eclipse (nebo jakékoli IDE podle vašeho výběru)

Ano. A je to.

Krok 2: Seznamte se s programem - rada

Nahrál jsem celý svůj kód na GitHub - podívejte se sem:

Hru jsem rozdělil do 3 tříd: Board, Tile a Game.

Prkno:

Popis: Třída Board se zabývá herním plánem, nastavením řady prvků 'Tile', získáním aktuálního skóre a nejvyššího žetonu a vložením pole do řetězce (bude použito později v 'Game'). Většina logiky je také zde, třída poskytuje metody pro rozmnožování dvojek a čtyřek na náhodných místech, pohyb nahoru, dolů, doleva a doprava a informování hráčů, když hra skončí.

Konstruktéři:

/ * Výchozí konstruktor pro desku - nastaví matici 4x4 */

veřejná rada () {…}

/ * Constructor for the Board - nastaví matici se zadanou velikostí mřížky */

public Board (int grids) {…}

Metody:

/ * Metoda Getter, která vrací desku */

veřejná dlaždice getBoard () {…}

/ * Metoda Getter, která vrací skóre */

public int getScore () {…}

/ * Najde nejvyšší dlaždici na hrací ploše a vrátí ji */

public int getHighTile () {…}

/ * Vytiskne desku na konzolu - pro účely testování */

veřejný prázdný tisk () {…}

/ * Vrací desku jako řetězec - používá se v GUI */

public String toString () {…}

/ * Umístí 2 (nebo 4) na prázdné místo, jakmile je proveden tah */

spawn veřejného prostoru () {…}

/ * Zkontroluje, zda je hrací plocha zcela zatemněná a pokud ano, přiměje hráče k restartu */

public boolean blackOut () {…}

/ * Zkontroluje, zda je hra u konce - když je hrací plocha zatemněná a žádná z dlaždic se nedá kombinovat */

public boolean gameOver () {…}

/ * Volá se, když je stisknuto 'w' nebo šipka nahoru - volá 'verticalMove' pro každou dlaždici na desce s parametrem 'nahoru' */

public void up () {…}

/ * Volá se při stisknutí šipky 's' nebo dolů - volá 'verticalMove' pro každou dlaždici na hrací ploše s parametrem 'dolů' */public void down () {…}

/ * Volá se, když je stisknuto 'd' nebo šipka vpravo - volá 'horizontalMove' pro každou dlaždici na hrací ploše s parametrem 'vpravo' */public void right () {…}

/ * Volá se, když je stisknuto 'a' nebo šipka doleva - volá 'horizontalMove' pro každou dlaždici na desce s parametrem 'left' */

veřejná prázdnota vlevo () {…}

/* Porovná hodnoty dvou dlaždic dohromady a pokud jsou stejné nebo pokud se jedna rovná 0 (obyčejná dlaždice) - jejich hodnoty se sčítají (za předpokladu, že porovnávané dlaždice jsou dvě různé dlaždice a pohybují se příslušným směrem) - rekurzivně se pohybuje v řádku */

public void horizontalMove (int row, int col, String direction) {…}

/* Porovná hodnoty dvou dlaždic dohromady a pokud jsou stejné nebo pokud se jedna rovná 0 (obyčejná dlaždice) - jejich hodnoty se sčítají (za předpokladu, že porovnávané dlaždice jsou dvě různé dlaždice a pohybují se příslušným směrem) - rekurzivně se pohybuje ve sloupci */

public void verticalMove (int řada, int col, směr řetězce) {…}

Jo, to je spousta metod - ale nebojte se, většina je extrémně snadno pochopitelná. Kromě toho je třída 'Board' nejsložitější, takže vše po tom bude relativně jednoduché.

Krok 3: Seznamte se s programem - dlaždice

Dlaždice:

Popis: Třída Tile se zabývá jednotlivými dlaždicemi a je nejmenší ze všech tříd. Každá dlaždice má celočíselnou hodnotu a barvu. Má dva konstruktory, které vytvářejí dlaždice s hodnotou 0 (výchozí) nebo hodnotou #. Metody jsou většinou samovysvětlující, přičemž metody „getter“a „setter“tvoří většinu z celkového počtu.

Konstruktéři:

/ * Sestaví základní dlaždici s hodnotou 0 */

veřejná dlaždice () {…}

/ * Sestaví dlaždici s hodnotou čísla */

veřejná dlaždice (int číslo) {…}

Metody:

/ * Získá hodnotu dlaždice */

public int getValue () {…}

/ * Nastaví hodnotu dlaždice - používá se při sčítání dvou dlaždic dohromady */

public void setValue (int value) {…}

/ * Představuje dlaždici jako řetězec - používá se v GUI */

public String toString () {…}

/ * Nastaví barvu dlaždice na základě její hodnoty */

public void setColor () {…}

/ * Získá barvu dlaždice */

public void getColor () {…}

Krok 4: Seznamte se s programem - hrou

Hra

Popis: Třída hry obsahuje hlavní metodu, většinu metod GUI a interakce klíčů. Trvá třídy Tile a Board a umožňuje jim spolupracovat.

Konstruktéři:

Žádný

Metody:

/ * nastaví GUI s vhodnými velikostmi a přidá Key Listener */

public static void setUpGUI () {…}

/ * Zkontroluje, zda jsou stisknuty klávesy wasd nebo arrow, a provede příslušné akce - aktualizuje JFrame při každém pohybu */

public void keyPressed (KeyEvent e) {…}

/ * GUI namaluje řadou strun, desky, dlaždic a zajistí, aby byly znovu natřeny, až hra skončí */

public void paint (grafika g) {…}

/ * nakreslí jednotlivou dlaždici - volanou metodou malování */

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

/ * Hlavní metoda - nastaví GUI a spustí hru */

public static void main (String args) {…}

Krok 5: Důležité metody - pohyb

Metody pohybu jsou nejdůležitější k pochopení, ale dobrou zprávou je, že jakmile porozumíte vertikálním pohybům, můžete toto porozumění aplikovat na horizontální pohyby. Ve skutečnosti jsou tři metody svislého pohybu přesně stejné jako tři pohyby vodorovných metod, kromě toho, že jeden se pohybuje přes řádky a druhý přes sloupce. Z tohoto důvodu se zaměřme pouze na metody vertikálního pohybu.

private void verticalMove (int row, int col, String direction)

{Tile initial = board [border] [col]; Porovnání dlaždic = deska [řada] [sloupec]; 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); porovnat.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (řádek, sloupec, směr); }}

Výše uvedená metoda, verticalMove, se nazývá metodami „nahoru“a „dolů“. Podívejme se na metodu „nahoru“.

veřejná neplatnost ()

{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"); }}}}}

Tato metoda prochází celou deskou a volá verticalMove pro každou dlaždici s parametrem „nahoru“. verticalMove pak porovná dlaždici na pozici 'j' a 'i' s dlaždicí na pozici 'border' a 'i'. Pokud jsou si tito dva rovni, spojí se. Pokud tomu tak není, dlaždice ohraničení se zvýší o 1 (jako parametr na místě je 'nahoru') a verticalMove se zavolá znovu.

Doporučuje: