Kazalo:

Programirajte svojo igro 2048 W/Java !: 8 korakov
Programirajte svojo igro 2048 W/Java !: 8 korakov

Video: Programirajte svojo igro 2048 W/Java !: 8 korakov

Video: Programirajte svojo igro 2048 W/Java !: 8 korakov
Video: RTX 3090 Ti vs RTX 3060 Ultimate Showdown for Stable Diffusion, ML, AI & Video Rendering Performance 2024, November
Anonim

Avtor PranP1My (nepopolno) Sledite Več avtorja:

Arduino CNC stroj iz rešenih delov računalnika
Arduino CNC stroj iz rešenih delov računalnika
Arduino CNC stroj iz rešenih delov računalnika
Arduino CNC stroj iz rešenih delov računalnika
Sodobne lesene klopi DIY
Sodobne lesene klopi DIY
Sodobne lesene klopi DIY
Sodobne lesene klopi DIY
Brezstično odpiranje vrat (vSTEM)
Brezstično odpiranje vrat (vSTEM)
Brezstično odpiranje vrat (vSTEM)
Brezstično odpiranje vrat (vSTEM)

Všeč mi je igra 2048. Zato sem se odločil, da programiram svojo različico.

Je zelo podobna dejanski igri, vendar mi programiranje sam daje svobodo, da kadar koli želim spremeniti karkoli želim. Če želim igro 5x5 namesto tipičnih 4x4, mi bo to omogočila preprosta sprememba s konstruktorjem 'Board'. Recimo, da želim otežiti igro in dodati kose na položaje, zaradi katerih bo igralcu bolj zapleteno in ne naključno. Z enostavnim algoritmom lahko naredim prav to. Čeprav v tem navodilu ne bom obravnaval vseh teh sprememb, nameravam v prihodnje dodati še več.

Za zdaj pa bomo programirali vašo tipično igro leta 2048.

Začnimo!

(Opomba: Ta Instructable zahteva zmerno znanje programiranja - zlasti z Javo)

1. korak: Materiali

Materiali
Materiali

Za ta projekt ne boste potrebovali veliko, saj je to le koraki v programiranju.

Materiali:

  • Prenosni računalnik
  • Eclipse (ali kateri koli IDE po vaši izbiri)

Ja. To je to.

2. korak: Spoznajte program - odbor

Vso kodo sem naložil na GitHub - preverite tukaj:

Igro sem razdelil v tri razrede: deska, ploščice in igra.

Plošča:

Opis: Razred Board se ukvarja z igralno ploščo, nastavlja niz elementov »Ploščice«, pridobi trenutni rezultat in najvišjo ploščico ter matriko postavi v niz (ki bo uporabljen kasneje v »Igra«). Večina logike je tudi tukaj, razred, ki ponuja metode za drstenje dveh in štirih na naključnih lokacijah, premikanje navzgor, navzdol, levo in desno ter obveščanje igralcev, ko je igre konec.

Konstruktorji:

/ * Privzeti konstruktor za ploščo - nastavi matriko 4x4 */

javni odbor () {…}

/ * Konstruktor za ploščo - nastavi matriko z določeno velikostjo mreže */

javna tabla (int mreže) {…}

Metode:

/ * Metoda Getter, ki vrne ploščo */

javna ploščica getBoard () {…}

/ * Metoda Getter, ki vrne rezultat */

public int getScore () {…}

/ * Poišče najvišjo ploščico na plošči in jo vrne */

public int getHighTile () {…}

/ * Natisne ploščo na konzolo - za namene testiranja */

public void print () {…}

/ * Vrne ploščo kot niz - uporabljeno v grafičnem vmesniku */

javni niz toString () {…}

/ * Ustvari 2 (ali 4) na praznem prostoru zelo hitro, ko se izvede poteza */

javna praznina spawn () {…}

/ * Preveri, ali je deska popolnoma zatemnjena in če je, bo igralce spodbudil k ponovnemu zagonu */

public boolean blackOut () {…}

/ * Preveri, ali je igre konec - ko je plošča zatemnjena in nobena ploščica ne more združiti */

javna logična igraOver () {…}

/ * Pokliče se, ko pritisnete puščico 'w' ali gor - pokliče 'verticalMove' za vsako ploščico na plošči s parametrom 'gor' */

public void up () {…}

/ * Pokliče se, ko pritisnete puščico 's' ali puščico navzdol - kliče 'verticalMove' za vsako ploščico na plošči s parametrom 'dol' */public void down () {…}

/ * Pokliče se, ko pritisnete 'd' ali puščico desno - pokliče 'horizontalMove' za vsako ploščico na plošči s parametrom 'right' */public void right () {…}

/ * Pokliče se, ko pritisnete 'a' ali puščico levo - kliče 'horizontalMove' za vsako ploščico na plošči s parametrom 'left' */

javna praznina levo () {…}

/* Primerja vrednosti dveh ploščic skupaj in če sta enaki ali če je enaka 0 (navadna ploščica) - se njune vrednosti dodajo (pod pogojem, da sta ploščici, ki jo primerjamo, dve različni ploščici in se premikata v ustrezno smer) - rekurzivno se premika po vrstici */

public void horizontalnoMove (vrstica int, int col, smer niza) {…}

/* Primerja vrednosti dveh ploščic skupaj in če sta enaki ali če je enaka 0 (navadna ploščica) - se njune vrednosti dodajo (pod pogojem, da sta ploščici, ki jo primerjamo, dve različni ploščici in se premikata v ustrezno smer) - rekurzivno se premika skozi stolpec */

public void verticalMove (int vrstica, int col, smer niza) {…}

Ja, to je veliko metod - vendar ne skrbite, večino je zelo enostavno razumeti. Poleg tega je razred 'Board' najbolj zapleten, zato bo vse po tem razmeroma preprosto.

3. korak: Spoznajte program - ploščice

Ploščica:

Opis: Razred Tile obravnava posamezne ploščice in je najmanjši od vseh razredov. Vsaka ploščica ima celoštevilčno vrednost in barvo. Ima dva konstruktorja, ki ustvarjata ploščice vrednosti 0 (privzeto) ali vrednosti #. Metode so večinoma samoumevne, pri čemer metode „getter“in „setter“predstavljajo večino vseh.

Konstruktorji:

/ * Konstruira osnovno ploščico z vrednostjo 0 */

javna ploščica () {…}

/ * Ustvari ploščico z vrednostjo številke */

javna ploščica (int številka) {…}

Metode:

/ * Dobi vrednost ploščice */

public int getValue () {…}

/ * Nastavi vrednost ploščice - uporablja se pri sestavljanju dveh ploščic skupaj */

public void setValue (int vrednost) {…}

/ * Predstavlja ploščico kot niz - uporablja se v grafičnem vmesniku */

javni niz toString () {…}

/ * Nastavi barvo ploščice glede na njeno vrednost */

public void setColor () {…}

/ * Dobi barvo ploščice */

public void getColor () {…}

4. korak: Spoznajte program - igro

Igra

Opis: Razred iger vsebuje glavno metodo, večino metod grafičnega vmesnika in ključne interakcije. Potrebuje tako razrede Tile kot Board in jim omogoča skupno delo.

Konstruktorji:

Nobena

Metode:

/ * nastavi grafični vmesnik z ustreznimi velikostmi in doda poslušalca ključev */

javna statična praznina setUpGUI () {…}

/ * Preveri, ali so pritisnjene tipke wasd ali puščice in izvede ustrezna dejanja - ob vsakem premiku posodobi okvir JFrame */

public void keyPressed (KeyEvent e) {…}

/ * Barva grafični vmesnik z nizom nizov, ploščo, ploščicami in zagotavlja, da so prebarvani, ko je igre konec */

barva za javno praznino (grafika g) {…}

/ * nariše posamezno ploščico - poklicano z metodo barvanja */

public void drawTiles (grafika g, ploščice, int x, int y) {…}

/ * Glavna metoda - nastavi grafični vmesnik in zažene igro */

javna statična void main (String args) {…}

5. korak: Pomembne metode - gibanje

Metode gibanja so najpomembnejše za razumevanje, toda dobra novica je, da ko razumete navpična gibanja, lahko to razumevanje uporabite za vodoravna gibanja. Dejansko so tri vertikalne metode premikanja popolnoma enake kot tri horizontalne metode premikanja, le da se ena premika po vrsticah, druga pa po stolpcih. Zato se osredotočimo le na metode navpičnega gibanja.

private void verticalMove (vrstica int, int col, smer niza)

{Tile začetnica = deska [obroba] [stolpec]; Primerjaj ploščice = deska [vrstica] [stolpec]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (vrstica> meja || (smer.equals ("dol") && (vrstica <meja))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {rezultat += addScore; } initial.setValue (addScore); compare.setValue (0); }} else {if (direction.equals ("dol")) {border--; } else {meja ++; } verticalMove (vrstica, stolpec, smer); }}

Zgornjo metodo, verticalMove, kličemo po metodah 'gor' in 'dol'. Oglejmo si metodo "gor".

javna praznina ()

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

Ta metoda gre skozi celotno ploščo in kliče verticalMove za vsako ploščico s parametrom "gor". verticalMove nato ploščico na položaju 'j' in 'i' primerja s ploščico na položaju 'border' in 'i'. Če sta oba enaka, se združita. Če niso, se obrobna ploščica poveča za 1 (ker je veljavni parameter 'gor'), in verticalMove se ponovno pokliče.

Priporočena: