Sadržaj:

Programirajte svoju igru 2048 s Javom !: 8 koraka
Programirajte svoju igru 2048 s Javom !: 8 koraka

Video: Programirajte svoju igru 2048 s Javom !: 8 koraka

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

Napisao PranP1My (nepotpuno) SiteFollow Više od autora:

Arduino CNC stroj od spašenih PC dijelova
Arduino CNC stroj od spašenih PC dijelova
Arduino CNC stroj od spašenih PC dijelova
Arduino CNC stroj od spašenih PC dijelova
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)

Volim igru 2048. I tako sam odlučio programirati svoju verziju.

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

Za sada ćemo programirati vašu tipičnu igru 2048.

Započnimo!

(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:

  • Prijenosno računalo
  • Eclipse (ili bilo koji IDE po vašem izboru)

Da. To je to.

2. korak: Upoznajte program - ploču

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

Podijelio sam igru u 3 klase: ploču, pločicu i igru.

Odbor:

Opis: Klasa Board bavi se ploču za igru, postavljanjem niza elemenata 'Pločica', dobivanjem trenutnog rezultata i najvećom pločicom te stavljanjem niza u niz (kasnije će se koristiti u 'Igri'). Većina logike je također ovdje, klasa nudi metode za mrijest 2 i 4 na nasumičnim mjestima, kretanje 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 ploča (unutarnje rešetke) {…}

Metode:

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

javna pločica getBoard () {…}

/ * Metoda dobivanja koja vraća rezultat */

public int getScore () {…}

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

public int getHighTile () {…}

/ * Ispisuje ploču na konzolu - 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 zamračena i ako jest, potaknut će igrače na ponovno pokretanje */

javni boolean blackOut () {…}

/ * Provjerava je li igra gotova - kad je ploča zamračena i nijedna pločica se ne može kombinirati */

javna logička igraOver () {…}

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

public void up () {…}

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

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

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

javna praznina left () {…}

/* Uspoređuje vrijednosti dviju pločica zajedno i ako su iste ili ako je jednaka 0 (obična pločica) - njihove se vrijednosti dodaju (pod uvjetom da su pločice koje uspoređujemo dvije različite pločice i da se kreću prema odgovarajućem smjeru) - rekurzivno se kreće kroz redak */

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

/* Uspoređuje vrijednosti dviju pločica zajedno i ako su iste ili ako je jednaka 0 (obična pločica) - njihove se vrijednosti dodaju (pod uvjetom da su pločice koje uspoređujemo dvije različite pločice i da se kreću prema odgovarajućem smjeru) - 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 bavi se 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 razumljive same od sebe, a metode 'dobivanja' 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 grafičkom sučelju */

javni niz toString () {…}

/ * Postavlja boju pločice na temelju njezine vrijednosti */

javna void setColor () {…}

/ * Dobiva boju pločice */

javna 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ćuje im zajednički rad.

Konstruktori:

Nijedan

Metode:

/ * postavlja GUI odgovarajućih veličina i dodaje slušatelja ključeva */

javna statička praznina setUpGUI () {…}

/ * Provjerava je li pritisnuta tipka wasd ili 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 njihovo ponovno bojanje 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) {…}

/ * Glavna metoda - 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 je vijest da kad razumijete okomita kretanja, to razumijevanje možete primijeniti na vodoravna kretanja. Zapravo, tri vertikalne metode kretanja potpuno su iste kao tri horizontalne metode, osim što se jedna pomiče preko redaka, a druga preko stupaca. Iz tog razloga, usredotočimo se samo na vertikalne metode kretanja.

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

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

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

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 ponovno poziva.

Preporučeni: