Sisällysluettelo:
- Vaihe 1: Materiaalit
- Vaihe 2: Tutustu ohjelmaan - Hallitus
- Vaihe 3: Tutustu ohjelmaan - laatta
- Vaihe 4: Tutustu ohjelmaan - Peli
- Vaihe 5: Tärkeitä menetelmiä - liike
Video: Ohjelmoi oma 2048 -peli W/Java !: 8 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Tekijä PranP1My (Incomplete) SiteFollow Lisää kirjoittajalta:
Rakastan peliä 2048. Ja niin päätin ohjelmoida oman versioni.
Se on hyvin samanlainen kuin varsinainen peli, mutta sen itse ohjelmointi antaa minulle vapauden muuttaa mitä haluan milloin tahansa. Jos haluan 5x5 -pelin tyypillisen 4x4 -pelin sijaan, yksinkertainen muutos Board -konstruktorin avulla mahdollistaa sen. Sano, että haluan tehdä pelistä vaikeamman lisäämällä kappaleita paikkoihin, jotka tekevät siitä monimutkaisimman pelaajan kannalta eikä satunnaisesti. Yksinkertaisen algoritmin avulla voin tehdä juuri sen. Vaikka en kata kaikkia näitä muutoksia tässä Instructable -ohjelmassa, aion lisätä niitä lisää.
Toistaiseksi ohjelmoimme kuitenkin tyypillisen pelisi vuodelle 2048.
Aloitetaan!
(Sivuhuomautus: Tämä Instructable vaatii maltillista ohjelmointitaitoa - erityisesti Javan kanssa)
Vaihe 1: Materiaalit
Et tarvitse paljon tähän projektiin, koska se on vain ohjelmoinnin läpikäynti.
Materiaalit:
- Kannettava tietokone
- Eclipse (tai mikä tahansa valitsemasi IDE)
Jep. Se siitä.
Vaihe 2: Tutustu ohjelmaan - Hallitus
Latasin koko koodini GitHubiin - katso se täältä:
Jaoin pelin kolmeen luokkaan: lauta, laatta ja peli.
Hallitus:
Kuvaus: Board -luokka käsittelee pelilautaa, asettaa joukon 'Tile' -elementtejä, hakee nykyisen pistemäärän ja korkeimman laatan ja asettaa taulukon merkkijonoon (käytettäväksi myöhemmin 'Game' -pelissä). Suurin osa logiikasta on myös tässä, luokka tarjoaa menetelmiä 2: n ja 4: n kutelemiseksi satunnaisissa paikoissa, ylös, alas, vasemmalle ja oikealle ja ilmoittaa pelaajille, kun peli on ohi.
Rakentajat:
/ * Taulukon oletusrakentaja - määrittää 4x4 -matriisin */
julkinen hallitus () {…}
/ * Taulukon rakentaja - määrittää matriisin, jolla on määritetty ruudukon koko */
julkinen hallitus (int ruudukot) {…}
Menetelmät:
/ * Getter -menetelmä, joka palauttaa levyn */
julkinen laatta getBoard () {…}
/ * Getter -menetelmä, joka palauttaa pisteet */
julkinen int getScore () {…}
/ * Etsii taulun korkeimman laatan ja palauttaa sen */
public int getHighTile () {…}
/ * Tulostaa levyn konsolille - testausta varten */
public void print () {…}
/ * Palauttaa levyn merkkijonona - käytetään graafisessa käyttöliittymässä */
public String toString () {…}
/ * Kutoo 2 (tai 4) tyhjään tilaan heti siirron aikana */
public void spawn () {…}
/ * Tarkistaa, onko lauta kokonaan pimennetty ja jos on, se kannustaa pelaajia käynnistämään uudelleen */
public boolean blackOut () {…}
/ * Tarkistaa, onko peli ohi - kun lauta on pimennetty eikä mikään laatta voi yhdistyä */
public boolean gameOver () {…}
/ * Soitetaan, kun w- tai ylös -nuolta painetaan - kutsuu "verticalMove" jokaiselle levylle ruudulla parametrilla "up" */
public void up () {…}
/ * Soitetaan, kun 's' tai alanuolta painetaan - kutsuu "verticalMove" jokaiselle levylle, jonka parametri on "down" */public void down () {…}
/ * Soitetaan, kun "d" tai oikeaa nuolta painetaan - kutsuu "horizontalMove" jokaiselle levylle ruudulla parametrilla "right" */public void right () {…}
/ * Soitetaan, kun "a" tai vasen nuoli painetaan - kutsuu "horizontalMove" jokaiselle levylle ruudulla parametrilla "left" */
public void left () {…}
/* Vertaa kahden laatan arvoja yhteen ja jos ne ovat samat tai jos yksi on 0 (tavallinen laatta) - niiden arvot lisätään (edellyttäen, että vertailtavat laatat ovat kaksi eri laattaa ja ne siirtyvät oikeaan suuntaan) - liikkuu rekursiivisesti rivin läpi */
public void horizontalMove (int rivi, int col, merkkijonon suunta) {…}
/* Vertaa kahden laatan arvoja yhteen ja jos ne ovat samat tai jos yksi on 0 (tavallinen laatta) - niiden arvot lisätään (edellyttäen, että vertailtavat laatat ovat kaksi eri laattaa ja ne siirtyvät oikeaan suuntaan) - liikkuu rekursiivisesti sarakkeen läpi */
public void verticalMove (int rivi, int col, merkkijonon suunta) {…}
Joo, se on paljon menetelmiä - mutta älä huoli, useimmat ovat erittäin helppoja ymmärtää. Lisäksi Board -luokka on monimutkaisin, joten kaikki tämän jälkeen on suhteellisen yksinkertaista.
Vaihe 3: Tutustu ohjelmaan - laatta
Laatta:
Kuvaus: Laattaluokka käsittelee yksittäisiä laattoja ja on pienin kaikista luokista. Jokaisella laatalla on kokonaislukuarvo ja väri. Siinä on kaksi konstruktoria, jotka luovat laatat, joiden arvo on 0 (oletus) tai arvo #. Menetelmät ovat enimmäkseen itsestään selviä, ja getter- ja setter -menetelmät muodostavat suurimman osan kokonaismäärästä.
Rakentajat:
/ * Luo peruslaatan, jonka arvo on 0 */
julkinen laatta () {…}
/ * Luo laatan, jonka arvo on numero */
julkinen laatta (int -numero) {…}
Menetelmät:
/ * Saa laatan arvon */
public int getValue () {…}
/ * Asettaa laatan arvon - käytetään, kun lisätään kaksi laattaa yhteen */
public void setValue (int -arvo) {…}
/ * Edustaa laattaa merkkijonona - käytetään graafisessa käyttöliittymässä */
public String toString () {…}
/ * Asettaa laatan värin sen arvon perusteella */
public void setColor () {…}
/ * Saa laatan värin */
public void getColor () {…}
Vaihe 4: Tutustu ohjelmaan - Peli
Peli
Kuvaus: Peliluokka sisältää päämenetelmän, useimmat graafiset käyttöliittymämenetelmät ja tärkeimmät vuorovaikutukset. Se kestää sekä laatta- että hallituksen luokat ja mahdollistaa niiden työskentelyn yhdessä.
Rakentajat:
Ei mitään
Menetelmät:
/ * määrittää sopivan kokoisen graafisen käyttöliittymän ja lisää avainkuuntelijan */
public staattinen void setUpGUI () {…}
/ * Tarkistaa, painetaanko wasd- tai nuolinäppäimiä, ja suorittaa tarvittavat toimenpiteet - päivittää JFrame -kehyksen jokaisella liikkeellä */
public void keyPainettu (KeyEvent e) {…}
/ * Maalaa graafisen käyttöliittymän sarjalla merkkijonoja, levyn ja laatat ja varmistaa, että ne maalataan uudelleen pelin päätyttyä */
public void paint (Grafiikka g) {…}
/ * piirtää yksittäisen laatan - kutsutaan maalausmenetelmästä */
public void drawTiles (Grafiikka g, laattalaatta, int x, int y) {…}
/ * Päämenetelmä - määrittää käyttöliittymän ja aloittaa pelin */
public staattinen void main (String args) {…}
Vaihe 5: Tärkeitä menetelmiä - liike
Liikkumismenetelmät ovat tärkeimpiä ymmärtämään, mutta hyvä uutinen on, että kun ymmärrät pystysuuntaiset liikkeet, voit soveltaa tätä ymmärrystä vaakasuoriin liikkeisiin. Itse asiassa kolme pystysuoraa siirtomenetelmää ovat täsmälleen samat kuin kolme vaakasuuntaista liikettä, paitsi että yksi liikkuu rivien ja toinen sarakkeiden poikki. Tästä syystä keskitytään vain pystysuoriin liikkeen menetelmiin.
private void verticalMove (int rivi, int col, merkkijonon suunta)
{Laattakirjain = lauta [reunus] [col]; Laattojen vertailu = lauta [rivi] [sarake]; if (initial.getValue () == 0 || initial.getValue () == vertaa.getValue ()) {if (rivi> raja || (direction.equals ("alas") && (rivi <raja))) {int addScore = initial.getValue () + vertaa.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); vertaile.setValue (0); }} else {if (direction.equals ("down")) {border--; } muu {raja ++; } verticalMove (rivi, sarake, suunta); }}
Edellä kuvattua vertikaalista liikettä kutsutaan "ylös" ja "alas" -menetelmiksi. Katsotaanpa "ylös" -menetelmää.
julkinen mitätöinti ()
{for (int i = 0; i <ruudukot; i ++) {raja = 0; for (int j = 0; j <grids; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}
Tämä menetelmä kulkee koko levyn läpi ja kutsuu vertikaalimovea jokaiselle ruudulle parametrilla "ylös". verticalMove vertaa sitten laattaa kohdissa 'j' ja 'i' laattaan kohdissa 'border' ja 'i'. Jos nämä kaksi ovat yhtä suuret, ne yhdistetään. Jos ne eivät ole, reunusruutua suurennetaan yhdellä (koska paikalla oleva parametri on 'ylös') ja verticalMove kutsutaan uudelleen.
Suositeltava:
Ohjelmoi mikä tahansa ESP8266 -kortti/-moduuli AT -komennoilla Laiteohjelmisto: 5 vaihetta
Ohjelmoi mikä tahansa ESP8266 -kortti/-moduuli, jossa on AT -komennot Laiteohjelmisto: Jokainen ESP8266 -moduuli ja -kortti voidaan ohjelmoida monin tavoin: Arduino-, python-, Lua-, AT -komennot ja monet muut … on tarkoitettu ESP8266: n käyttämiseen moduulina tai pikatestaukseen TTL RS232 c: n kanssa
Ohjelmoi ATtiny Arduinolla: 7 vaihetta (kuvilla)
Ohjelmoi ATtiny Arduinolla: Seuraavat ohjeet ATtiny -mikrokontrollerien ohjelmointiin Arduino IDE: tä käyttäen. Yksinkertaisesti englanniksi, näin ohjelmoit 8-nastaiset Atmel-sirut tavalliseen tapaan kuin Arduino. Tämä on siistiä, koska ATtiny on pieni, ja - hyvin - tämä mahdollistaa
Ohjelmoi Arduino Android -laitteella Bluetoothin kautta: 6 vaihetta (kuvilla)
Ohjelmoi Arduino Android -laitteella Bluetoothin kautta: Hei maailma, tässä ohjeessa haluan näyttää sinulle, kuinka ohjelmoida Arduino Uno Android -laitteellasi Bluetoothin kautta. Se on hyvin yksinkertainen ja niin halpa. Lisäksi sen avulla voimme ohjelmoida Arduinomme mihin tahansa haluamme langattoman Bluetoothin kautta … Joten
Ohjelmoi Arduino älypuhelimella: 6 vaihetta (kuvien kanssa)
Ohjelmoi Arduino älypuhelimella: Tässä opetusohjelmassa olen näyttänyt sinulle, kuinka ohjelmoida Arduino Board älypuhelimellasi
Ohjelmoi tietokoneesi sammumaan automaattisesti määrittämällä, milloin haluat sen tekevän: 4 vaihetta
Ohjelmoi tietokoneesi sammumaan automaattisesti määrittämällä, milloin haluat sen tekevän: hei, se on toinen ohje joka on otettu jokapäiväisestä elämästäni … viimeksi minun piti ladata paljon ohjelmistoja tietokoneelleni ja minun oli annettava sen ladata yön yli, en halunnut pitää tietokonetta päällä koko yön latausten päätyttyä ja