Përmbajtje:

Programoni lojën tuaj 2048 Lojë W/Java !: 8 hapa
Programoni lojën tuaj 2048 Lojë W/Java !: 8 hapa

Video: Programoni lojën tuaj 2048 Lojë W/Java !: 8 hapa

Video: Programoni lojën tuaj 2048 Lojë W/Java !: 8 hapa
Video: RTX 3090 Ti vs RTX 3060 Ultimate Showdown for Stable Diffusion, ML, AI & Video Rendering Performance 2024, Korrik
Anonim

Nga PranP1My (Jo i plotë) SiteFollow More nga autori:

Makinë Arduino CNC Nga Pjesët e PC të Salvaged
Makinë Arduino CNC Nga Pjesët e PC të Salvaged
Makinë Arduino CNC Nga Pjesët e PC të Salvaged
Makinë Arduino CNC Nga Pjesët e PC të Salvaged
Stola moderne prej druri DIY
Stola moderne prej druri DIY
Stola moderne prej druri DIY
Stola moderne prej druri DIY
Hapës i dyerve pa kontakt (vSTEM)
Hapës i dyerve pa kontakt (vSTEM)
Hapës i dyerve pa kontakt (vSTEM)
Hapës i dyerve pa kontakt (vSTEM)

Më pëlqen loja 2048. Dhe kështu vendosa të programoj versionin tim.

Veryshtë shumë e ngjashme me lojën aktuale, por programimi i saj vetë më jep lirinë të ndryshoj çfarë të dua sa herë që dua. Nëse dua një lojë 5x5 në vend të 4x4 tipike, një ndryshim i thjeshtë duke përdorur konstruktorin 'Board' do të më lejojë ta bëj këtë. Thuaj që dua ta bëj lojën më të vështirë, duke shtuar pjesë në pozicione që do ta bëjnë atë më komplekse për lojtarin sesa në mënyrë të rastësishme. Duke përdorur një algoritëm të thjeshtë, unë mund ta bëj këtë. Ndërsa nuk do t'i mbuloj të gjitha këto modifikime në këtë Instructable, unë planifikoj të shtoj më shumë ndërsa shkoj.

Tani për tani, megjithatë, ne do të programojmë lojën tuaj tipike të vitit 2048.

Le të fillojmë!

(Një shënim anësor: Ky udhëzues kërkon njohuri të moderuara të programimit - veçanërisht me Java)

Hapi 1: Materialet

Materiale
Materiale

Ju nuk do të keni nevojë për shumë për këtë projekt pasi është vetëm një hap i programimit.

Materiale:

  • Laptop
  • Eklips (ose ndonjë IDE sipas dëshirës tuaj)

Po Kjo eshte.

Hapi 2: Njihuni me Programin - Bordi

Kam ngarkuar të gjithë kodin tim në GitHub - shikojeni këtu:

Unë e ndava lojën në 3 klasa: Bordi, Pllaka dhe Lojë.

Bordi:

Përshkrimi: Klasa e Bordit merret me tabelën e lojës, duke vendosur një grup elementësh 'Tile', duke marrë rezultatin aktual dhe pllakën më të lartë dhe duke e vendosur grupin në një varg (për t'u përdorur më vonë në 'Game'). Shumica e logjikës është gjithashtu këtu, klasa siguron metoda për pjelljen e 2 -ve dhe 4 -ve në vende të rastësishme, duke lëvizur lart, poshtë, majtas dhe djathtas dhe duke i bërë të ditur lojtarët kur loja ka mbaruar.

Ndërtuesit:

/ * Konstruktori i paracaktuar për Bordin - krijon një matricë 4x4 */

Bordi publik () {…}

/ * Ndërtuesi për Bordin - krijon një matricë me madhësi të caktuar të rrjetit */

Bordi publik (rrjetet int) {…}

Metodat:

/ * Metoda Getter që kthen tabelën */

Tile publike getBoard () {…}

/ * Metoda Getter që kthen rezultatin */

int int getScore () {…}

/ * Gjen pllakën më të lartë në tabelë dhe e kthen atë */

public int getHighTile () {…}

/ * Shtyp tabelën në tastierë - për qëllime testimi */

shtyp publik i pavlefshëm () {…}

/ * Kthen tabelën si një varg - përdoret në GUI */

publike String toString () {…}

/ * Hedh një 2 (ose 4) në një vend bosh shumë kohë kur bëhet një lëvizje */

pjellje publike e zbrazët () {…}

/ * Kontrollon për të parë nëse bordi është nxirë plotësisht dhe nëse është, do t'i shtyjë lojtarët të rinisin */

publike boolean blackOut () {…}

/ * Kontrollon për të parë nëse loja ka mbaruar - kur tabela është nxirë dhe asnjëra prej pllakave nuk mund të kombinohet */

lojë publike booleanOver () {…}

/ * Thirret kur shtypet "w" ose shigjeta lart - thërret "verticalMove" për çdo pllakë në tabelë me parametrin "lart" */

zbrazëti publike () {…}

/ * Thirret kur shtypet shigjeta "s" ose poshtë - thërret "verticalMove" për çdo pllakë në tabelë me parametrin "poshtë" */zbrazëti publike poshtë () {…}

/ * Thirret kur shtypet 'd' ose shigjeta e djathtë - thërret 'horizontalMove' për çdo pllakë në tabelë me parametrin 'right' */public void right () {…}

/ * Thirret kur shtypet 'a' ose shigjeta e majtë - thërret 'horizontalMove' për çdo pllakë në tabelë me parametrin 'majtas' */

zbrazëti publike majtas () {…}

/* Krahason dy vlerat e pllakave së bashku dhe nëse ato janë të njëjta ose nëse njëra është e barabartë me 0 (pllakë e thjeshtë) - vlerat e tyre shtohen (me kusht që pllakat që po krahasojmë të jenë dy pllaka të ndryshme dhe ato po lëvizin drejt drejtimit të duhur) - lëviz në mënyrë rekursive përmes rreshtit */

boshllëku publik horizontalMove (rreshti int, int kol, Drejtimi i vargut) {…}

/* Krahason dy vlerat e pllakave së bashku dhe nëse ato janë të njëjta ose nëse njëra është e barabartë me 0 (pllakë e thjeshtë) - vlerat e tyre shtohen (me kusht që pllakat që po krahasojmë të jenë dy pllaka të ndryshme dhe ato po lëvizin drejt drejtimit të duhur) - lëviz në mënyrë rekursive përmes kolonës */

boshllëku publik verticalMove (rreshti int, int kolona, Drejtimi i vargut) {…}

Po, këto janë shumë metoda - por mos u shqetësoni, shumica janë jashtëzakonisht të lehta për tu kuptuar. Për më tepër, klasa "Bordi" është më kompleksi, kështu që gjithçka pas kësaj do të jetë relativisht e thjeshtë.

Hapi 3: Njihuni me Programin - Pllakë

Tjegull:

Përshkrimi: Klasa Tile merret me pllakat individuale dhe është më e vogla nga të gjitha klasat. Çdo pllakë ka një vlerë të plotë dhe një ngjyrë. Ka dy konstruktorë që krijojnë Pllaka me vlerë 0 (parazgjedhje) ose vlerë #. Metodat janë kryesisht vetë -shpjeguese, me metodat 'marrëse' dhe 'vendosëse' që përbëjnë një pjesë të madhe të totalit.

Ndërtuesit:

/ * Ndërton një pllakë bazë me një vlerë prej 0 */

Tile publike () {…}

/ * Ndërton një pllakë me një vlerë të numrit */

Tjegull publike (numri int) {…}

Metodat:

/ * Merr vlerën e pllakës */

public int getValue () {…}

/ * Vendos vlerën e pllakës - përdoret kur shtoni dy pllaka së bashku */

void publik setValue (int value) {…}

/ * Përfaqëson pllakën si një varg - përdoret në GUI */

publike String toString () {…}

/ * Vendos ngjyrën e pllakës bazuar në vlerën e saj */

void publik setColor () {…}

/ * Merr ngjyrën e pllakës */

zbrazëti publike getColor () {…}

Hapi 4: Njihuni me Programin - Lojë

Lojë

Përshkrimi: Klasa e lojërave përmban metodën kryesore, shumicën e metodave GUI dhe ndërveprimet kryesore. Ajo merr të dyja klasat e Tileve dhe Bordit dhe u mundëson atyre të punojnë së bashku.

Ndërtuesit:

Asnje

Metodat:

/ * vendos GUI me madhësitë e përshtatshme dhe shton një Dëgjues Kyç */

publike statike void setUpGUI () {…}

/ * Kontrollon për të parë nëse tastet wasd ose shigjetat janë shtypur dhe kryen veprimet e duhura - përditëson JFrame me çdo lëvizje */

çelësi publik i zbrazëtPressed (KeyEvent e) {…}

/ * Ngjyros GUI me një varg telash, tabelë, pllaka dhe siguron që ato të lyhen kur loja të ketë mbaruar */

bojë publike e zbrazët (Grafika g) {…}

/ * vizaton një pllakë individuale - e quajtur nga metoda e bojës */

zbrazëti publike të zbrazëtTiles (Grafika g, pllaka e pllakave, int x, int y) {…}

/ * Metoda kryesore - vendos GUI dhe fillon lojën */

publiku statik i zbrazëtirës statike (String args) {…}

Hapi 5: Metoda të rëndësishme - Lëvizja

Metodat e lëvizjes janë më të rëndësishmet për t'u kuptuar, por lajmi i mirë është pasi të kuptoni lëvizjet vertikale, mund ta zbatoni atë kuptim në lëvizjet horizontale. Në fakt, tre metodat vertikale të lëvizjes janë të njëjta me tre lëvizjet e metodës horizontale, me përjashtim të njërës lëvizje nëpër rreshta dhe tjetrës nëpër kolona. Për këtë arsye, le të përqëndrohemi vetëm në metodat e lëvizjes vertikale.

private void verticalMove (rreshti int, int kol, Drejtimi i vargut)

{Pllaka fillestare = bordi [kufiri] [kol]; Krahasimi i pllakave = bordi [rreshti] [kol]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (row> border || (drejtim.equals ("down") && (row <border))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); krahaso.setValue (0); }} else {if (drejtimi.ekziston ("poshtë")) {kufiri--; } else {kufi ++; } verticalMove (rresht, kol, drejtim); }}

Metoda e mësipërme, verticalMove, quhet me metodat 'lart' dhe 'poshtë'. Le të hedhim një vështrim në metodën 'lart'.

zbrazëti publike ()

{për (int i = 0; i <rrjetet; i ++) {kufi = 0; për (int j = 0; j <rrjetet; j ++) {if (bordi [j] .getValue ()! = 0) {if (kufi <= j) {verticalMove (j, i, "lart"); }}}}}

Kjo metodë kalon nëpër të gjithë tabelën dhe thërret verticalMove për çdo pllakë me parametrin "lart". verticalMove pastaj krahason pllakën në pozicionin 'j' dhe 'i' me pllakën në pozicionin 'kufiri' dhe 'i'. Nëse të dy janë të barabartë, ato kombinohen. Nëse nuk janë, pllaka e kufirit rritet me 1 (pasi parametri në vend është 'lart'), dhe verticalMove thirret përsëri.

Recommended: