Sisukord:

Programmeerige oma 2048 mäng W/Java !: 8 sammu
Programmeerige oma 2048 mäng W/Java !: 8 sammu

Video: Programmeerige oma 2048 mäng W/Java !: 8 sammu

Video: Programmeerige oma 2048 mäng W/Java !: 8 sammu
Video: Този Мъж се е Върнал от 2048 за да Предупреди Човечеството 2024, Juuli
Anonim

Autor: PranP1My (mittetäielik) sait

Arduino CNC -masin päästetud arvutiosadest
Arduino CNC -masin päästetud arvutiosadest
Arduino CNC -masin päästetud arvutiosadest
Arduino CNC -masin päästetud arvutiosadest
DIY kaasaegsed puidust pingid
DIY kaasaegsed puidust pingid
DIY kaasaegsed puidust pingid
DIY kaasaegsed puidust pingid
Kontaktivaba ukseavaja (vSTEM)
Kontaktivaba ukseavaja (vSTEM)
Kontaktivaba ukseavaja (vSTEM)
Kontaktivaba ukseavaja (vSTEM)

Ma armastan mängu 2048. Ja nii otsustasin ma oma versiooni programmeerida.

See on väga sarnane tegeliku mänguga, kuid selle ise programmeerimine annab mulle vabaduse muuta kõike, mida tahan, millal tahan. Kui soovin tüüpilise 4x4 asemel 5x5 mängu, võimaldab seda lihtsasti teha „Board” konstruktori abil. Ütle, et tahan mängu keerulisemaks muuta, lisades tükke positsioonidele, mis muudavad selle mängija jaoks kõige keerukamaks, mitte juhuslikult. Lihtsa algoritmi abil saan seda teha. Kuigi ma ei hõlma kõiki neid selles juhendis tehtud muudatusi, kavatsen ma neid lisada.

Praegu aga programmeerime teie tüüpilise mängu 2048.

Alustame!

(Kõrvalmärkus: see juhend sisaldab nõutavaid programmeerimisalaseid teadmisi - eriti Java puhul)

Samm: materjalid

Materjalid
Materjalid

Selle projekti jaoks pole teil palju vaja, kuna see on lihtsalt programmeerimise ülevaade.

Materjalid:

  • Sülearvuti
  • Eclipse (või mõni teie valitud IDE)

Jep. See on kõik.

2. samm: tutvuge programmiga - juhatus

Laadisin kogu oma koodi GitHubi üles - vaadake seda siit:

Jagasin mängu kolme klassi: lauaplaat, plaat ja mäng.

Juhatus:

Kirjeldus: Lauaklass tegeleb mängulauaga, paneb paika 'Tile' elementide massiivi, kogub praeguse punktisumma ja kõrgeima plaadi ning paneb massiivi stringiks (kasutatakse hiljem 'Mängus'). Suurem osa loogikast on ka siin - klass pakub meetodeid 2 -de ja 4 -de kudemiseks juhuslikes kohtades, liikudes üles, alla, vasakule ja paremale ning andes mängijatele teada, kui mäng on lõppenud.

Konstruktorid:

/ * Tahvli vaikekonstruktor - seab üles 4x4 maatriksi */

avalik juhatus () {…}

/ * Tahvli konstruktor - määrab kindlaks määratud ruudustiku suurusega maatriksi */

avalik juhatus (int ruudustikud) {…}

Meetodid:

/ * Getteri meetod, mis tagastab tahvli */

avalik plaat getBoard () {…}

/ * Getteri meetod, mis tagastab skoori */

avalik int getScore () {…}

/ * Leiab tahvlilt kõrgeima plaadi ja tagastab selle */

public int getHighTile () {…}

/ * Prindib tahvli konsoolile - testimiseks */

public void print () {…}

/ * Tagastab tahvli stringina - kasutatakse GUI -s */

public String toString () {…}

/ * Kudub 2 (või 4) tühjale kohale kohe, kui käik on tehtud */

public void spawn () {…}

/ * Kontrollib, kas plaat on täielikult pimendatud ja kui see on nii, siis kutsub see mängijaid taaskäivitama */

public boolean blackOut () {…}

/ * Kontrollib, kas mäng on läbi - kui laud on pimendatud ja ükski plaat ei saa kombineerida */

public boolean gameOver () {…}

/ * Helistatakse, kui vajutatakse nuppu „w” või ülesnool - kutsub „verticalMove” iga plaadi plaadil parameetriga „üles” */

avalik tühistamine () {…}

/ * Helistatakse, kui vajutatakse nuppu „s” või allanoolt - kutsub „verticalMove” iga tahvli plaati parameetriga „alla” */public void down () {…}

/ * Helistatakse, kui vajutatakse nuppu „d” või paremat noolt - kutsub nuppu „horizontalMove” iga plaadi plaadil parameetriga „right” */public void right () {…}

/ * Helistatakse, kui vajutatakse a- või vasaknoolt - kutsub 'horizontalMove' iga tahvli plaadi kohta parameetriga 'left' */

public void left () {…}

/* Võrdleb kahe plaadi väärtusi koos ja kui need on samad või kui üks on võrdne 0 -ga (tavaline plaat) - nende väärtused lisatakse (eeldusel, et võrdlusplaadid on kaks erinevat plaati ja nad liiguvad sobivas suunas) - liigub rekursiivselt läbi rea */

public void horizontalMove (int rida, int col, stringi suund) {…}

/* Võrdleb kahe plaadi väärtusi koos ja kui need on samad või kui üks on võrdne 0 -ga (tavaline plaat) - nende väärtused lisatakse (eeldusel, et võrdlusplaadid on kaks erinevat plaati ja nad liiguvad sobivas suunas) - liigub rekursiivselt läbi veeru */

public void verticalMove (int rida, int col, stringi suund) {…}

Jah, neid meetodeid on palju - aga ärge muretsege, enamik neist on äärmiselt kergesti mõistetavad. Lisaks on „Board” klass kõige keerulisem, nii et pärast seda on kõik suhteliselt lihtne.

3. samm: tutvuge programmiga - Tile

Plaat:

Kirjeldus: Tile klass käsitleb üksikuid plaate ja on kõigi klasside väikseim. Igal plaadil on täisarv ja värv. Sellel on kaks konstruktorit, mis loovad plaadid väärtusega 0 (vaikimisi) või #. Meetodid on enamasti iseenesestmõistetavad, „getter” ja „setter” meetodid moodustavad suurema osa koguarvust.

Konstruktorid:

/ * Ehitab põhiplaadi väärtusega 0 */

avalik plaat () {…}

/ * Ehitab paani väärtusega number */

avalik plaat (int number) {…}

Meetodid:

/ * Saab plaadi väärtuse */

public int getValue () {…}

/ * Määrab paani väärtuse - kasutatakse kahe plaadi lisamisel */

public void setValue (int väärtus) {…}

/ * Esitab paani stringina - kasutatakse GUI -s */

public String toString () {…}

/ * Määrab plaadi värvi selle väärtuse alusel */

public void setColor () {…}

/ * Saab plaadi värvi */

public void getColor () {…}

4. samm: tutvuge programmiga - mäng

Mäng

Kirjeldus: Mänguklass sisaldab peamist meetodit, enamikku GUI -meetodeid ja peamisi interaktsioone. See võtab nii plaatide kui ka lauatunde ning võimaldab neil koostööd teha.

Konstruktorid:

Puudub

Meetodid:

/ * seadistab sobiva suurusega GUI ja lisab võtme kuulaja */

public staatiline tühine setUpGUI () {…}

/ * Kontrollib, kas wasd- või nooleklahve on vajutatud, ja teeb sobivaid toiminguid - värskendab JFrame'i iga liigutusega */

public void keyVajutatud (KeyEvent e) {…}

/ * Värvib graafilise kasutajaliidese rea stringide, tahvli ja plaatidega ning tagab, et need värvitakse uuesti pärast mängu lõppu */

public void paint (graafika g) {…}

/ * joonistab üksiku paani - kutsutud värvimismeetodilt */

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

/ * Peamine meetod - seadistab GUI ja käivitab mängu */

public static void main (String args) {…}

5. samm: olulised meetodid - liikumine

Liigutusmeetoditest on kõige olulisem aru saada, kuid hea uudis on see, et kui olete vertikaalsetest liikumistest aru saanud, saate seda arusaama horisontaalsete liikumiste puhul rakendada. Tegelikult on kolm vertikaalset liikumismeetodit täpselt samad, mis kolm horisontaalmeetodi liigutust, välja arvatud üks liigub üle ridade ja teine üle veergude. Sel põhjusel keskendume ainult vertikaalsete liikumiste meetoditele.

private void verticalMove (int rida, int col, stringi suund)

{Plaatide initsiaal = laud [piir] [col]; Plaatide võrdlus = plaat [rida] [col]; if (initial.getValue () == 0 || initial.getValue () == võrdle.getVäärtus ()) {if (rida> piir || (direction.equals ("alla") && (rida <äär))) {int addScore = initial.getValue () + võrrelda.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); võrrelda.setValue (0); }} else {if (direction.equals ("down")) {border--; } muu {piir ++; } verticalMove (rida, veerg, suund); }}

Ülaltoodud meetodit verticalMove kutsutakse üles ja alla meetoditega. Vaatame "üles" meetodit.

avalik tühistamine ()

{jaoks (int i = 0; i <grids; i ++) {border = 0; jaoks (int j = 0; j <grids; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}

See meetod läbib kogu tahvli ja kutsub vertikaalselt liikuma iga plaadi jaoks parameetriga "üles". verticalMove võrdleb seejärel plaati positsioonil 'j' ja 'i plaadiga positsioonil' border 'ja' i '. Kui need kaks on võrdsed, ühendatakse need. Kui neid pole, suurendatakse äärisetahvlit 1 võrra (kuna kehtiv parameeter on „üleval”) ja uuesti kutsutakse vertikaalset liikumist.

Soovitan: