Sadržaj:

Programirajte svoju igru 2048 W/Java !: 8 koraka
Programirajte svoju igru 2048 W/Java !: 8 koraka

Video: Programirajte svoju igru 2048 W/Java !: 8 koraka

Video: Programirajte svoju igru 2048 W/Java !: 8 koraka
Video: НЕЗАКОННЫЕ Эксперименты c БОКСИ БУ из ПОППИ ПЛЕЙТАЙМ и ХАГИ ВАГИ в VR! 2024, Juli
Anonim

Autor PranP1My (Nepotpuno) SiteFollow Više od autora:

Arduino CNC mašina od spašenih PC delova
Arduino CNC mašina od spašenih PC delova
Arduino CNC mašina od spašenih PC delova
Arduino CNC mašina od spašenih PC delova
Uradi sam moderne drvene klupe
Uradi sam moderne drvene klupe
Uradi sam moderne drvene klupe
Uradi sam moderne drvene klupe
Beskontaktni otvarač vrata (vSTEM)
Beskontaktni otvarač vrata (vSTEM)
Beskontaktni otvarač vrata (vSTEM)
Beskontaktni otvarač vrata (vSTEM)

Obožavam igru 2048. I tako sam odlučio programirati svoju verziju.

Vrlo je slična stvarnoj igri, ali sama programiranje daje mi slobodu da promijenim šta god poželim kad god to poželim. Ako želim igru 5x5 umjesto tipičnih 4x4, jednostavna promjena pomoću konstruktora 'Board' će mi to omogućiti. Recimo da želim otežati igru, dodajući figure na položaje koji će je učiniti složenijom za igrača, a ne nasumično. Koristeći jednostavan algoritam, mogu to učiniti. Iako neću pokriti sve ove izmjene u ovom Instructable -u, planiram ih dodavati u nastavku.

Za sada ćemo, međutim, programirati vašu tipičnu igru 2048.

Hajde da počnemo!

(Napomena: Ovaj Instructable zahtijeva umjereno znanje programiranja - posebno s Javom)

Korak 1: Materijali

Materijali
Materijali

Za ovaj projekt nećete trebati mnogo jer je to samo vodič kroz programiranje.

Materijali:

  • Laptop
  • Eclipse (ili bilo koji IDE po vašem izboru)

Da. To je to.

Korak 2: Upoznajte program - odbor

Postavio sam sav svoj kôd na GitHub - provjerite ovdje:

Podijelio sam igru u 3 klase: tabla, pločica i igra.

Board:

Opis: Klasa Board se bavi gameboard -om, postavljanjem niza elemenata 'Tile', dobijanjem trenutnog rezultata i najvećom pločicom i stavljanjem niza u niz (kasnije će se koristiti u 'Game'). Većina logike je također ovdje, klasa nudi metode za mrijest 2 i 4 na nasumičnim lokacijama, pomicanje gore, dolje, lijevo i desno, i davanje do znanja igračima kada igra završi.

Konstruktori:

/ * Zadani konstruktor za ploču - postavlja matricu 4x4 */

javni odbor () {…}

/ * Konstruktor za ploču - postavlja matricu s navedenom veličinom mreže */

javna tabla (unutrašnje mreže) {…}

Metode:

/ * Getter metoda koja vraća ploču */

javna pločica getBoard () {…}

/ * Metoda Getter koja vraća rezultat */

public int getScore () {…}

/ * Pronalazi najvišu pločicu na ploči i vraća je */

public int getHighTile () {…}

/ * Štampa ploču na konzoli - radi testiranja */

public void print () {…}

/ * Vraća ploču kao niz - koristi se u grafičkom sučelju */

javni niz toString () {…}

/ * Pokreće 2 (ili 4) na praznom prostoru vrlo često kad se napravi potez */

javna praznina spawn () {…}

/ * Provjerava je li ploča potpuno zatamnjena i ako jest, gurnut će igrače da se ponovo pokrenu */

javni boolean blackOut () {…}

/ * Provjerava je li igra završena - kada je ploča zatamnjena i nijedna pločica ne može kombinirati */

javna logička igraOver () {…}

/ * Poziva se kada se pritisne 'w' ili strelica gore - poziva 'verticalMove' za svaku pločicu na ploči sa parametrom 'gore' */

public void up () {…}

/ * Poziva se kada se pritisne 's' ili strelica prema dolje - poziva 'verticalMove' za svaku pločicu na ploči sa parametrom 'down' */public void down () {…}

/ * Poziva se kada se pritisne 'd' ili strelica udesno - poziva 'horizontalMove' za svaku pločicu na ploči sa parametrom 'desno' */public void right () {…}

/ * Poziva se kada se pritisne 'a' ili strelica ulijevo - poziva 'horizontalMove' za svaku pločicu na ploči sa parametrom 'left' */

javna praznina lijevo () {…}

/* Upoređuje vrednosti dve pločice zajedno i ako su iste ili ako je jednaka 0 (obična pločica) - njihove vrednosti se dodaju (pod uslovom da su pločice koje upoređujemo dve različite pločice i da se kreću u odgovarajućem smeru) - rekurzivno se kreće kroz red */

public void horizontalMove (int red, int col, smjer niza) {…}

/* Upoređuje vrednosti dve pločice zajedno i ako su iste ili ako je jednaka 0 (obična pločica) - njihove vrednosti se dodaju (pod uslovom da su pločice koje upoređujemo dve različite pločice i da se kreću u odgovarajućem smeru) - rekurzivno se kreće kroz stupac */

public void verticalMove (int red, int col, smjer niza) {…}

Da, to je puno metoda - ali ne brinite, većinu je izuzetno lako razumjeti. Povrh toga, klasa 'Board' je najsloženija, pa će sve nakon ovoga biti relativno jednostavno.

Korak 3: Upoznajte program - pločica

Pločica:

Opis: Klasa Pločica se bavi pojedinačnim pločicama i najmanja je od svih klasa. Svaka pločica ima cijelu vrijednost i boju. Ima dva konstruktora koji stvaraju pločice vrijednosti 0 (zadano) ili vrijednosti #. Metode su uglavnom jasne same po sebi, s tim da metode 'dobijanja' i 'postavljanja' čine većinu ukupnog broja.

Konstruktori:

/ * Konstruira osnovnu pločicu s vrijednošću 0 */

javna pločica () {…}

/ * Konstruira pločicu s vrijednošću broja */

javna pločica (int broj) {…}

Metode:

/ * Dobiva vrijednost pločice */

public int getValue () {…}

/ * Postavlja vrijednost pločice - koristi se pri dodavanju dvije pločice zajedno */

public void setValue (int vrijednost) {…}

/ * Predstavlja pločicu kao niz - koristi se u GUI -u */

javni niz toString () {…}

/ * Postavlja boju pločice na osnovu njene vrednosti */

javna void setColor () {…}

/ * Dobiva boju pločice */

public void getColor () {…}

Korak 4: Upoznajte program - igru

Igra

Opis: Klasa igre sadrži glavnu metodu, većinu GUI metoda i ključne interakcije. Potrebne su klase Pločica i Ploča i omogućava im zajednički rad.

Konstruktori:

Nema

Metode:

/ * postavlja grafičko sučelje odgovarajućih veličina i dodaje slušatelja ključeva */

javna statička praznina setUpGUI () {…}

/ * Provjerava da li su pritisnuti wasd ili tipke sa strelicama i izvodi odgovarajuće radnje - ažurira JFrame svakim potezom */

public void keyPressed (KeyEvent e) {…}

/ * Boji GUI nizom žica, daskom, pločicama i osigurava da se prefarbaju kada igra završi */

java boja za praznine (grafika g) {…}

/ * crta pojedinačnu pločicu - poziva se metodom boje */

public void drawTiles (Grafika g, Pločice, int x, int y) {…}

/ * Glavni način - postavlja GUI i pokreće igru */

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

Korak 5: Važne metode - kretanje

Metode kretanja najvažnije su za razumijevanje, ali dobra vijest je da kada shvatite vertikalne pokrete, to razumijevanje možete primijeniti na horizontalna kretanja. U stvari, tri vertikalne metode kretanja potpuno su iste kao tri horizontalne metode, osim što se jedna pomiče niz redova, a druga preko stupaca. Iz tog razloga, fokusirajmo se samo na vertikalne metode kretanja.

private void verticalMove (int red, int col, smjer niza)

{Pločica početna = ploča [granica] [kolona]; Uporedi pločice = ploča [red] [kolona]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (row> border || (direction.equals ("dolje") && (red <granica))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {rezultat += addScore; } initial.setValue (addScore); compare.setValue (0); }} else {if (direction.equals ("dolje")) {border--; } else {granica ++; } verticalMove (red, kolo, smjer); }}

Gornja metoda, verticalMove, poziva se metodama 'gore' i 'dolje'. Pogledajmo 'gore' metodu.

javna praznina ()

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

Ova metoda prolazi kroz cijelu ploču i poziva verticalMove za svaku pločicu s parametrom "gore". verticalMove zatim uspoređuje pločicu na pozicijama 'j' i 'i' s pločicom na pozicijama 'border' i 'i'. Ako su dvije jednake, kombiniraju se. Ako nisu, rubna pločica se povećava za 1 (budući da je postavljeni parametar 'gore'), a verticalMove se ponovo poziva.

Preporučuje se: