Cuprins:
- Pasul 1: Materiale
- Pasul 2: Cunoașteți programul - Consiliul
- Pasul 3: Cunoașteți programul - Placi
- Pasul 4: Cunoașteți Programul - Joc
- Pasul 5: Metode importante - Mișcare
Video: Programează-ți propriul joc 2048 W / Java !: 8 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
De PranP1My (Incomplete) Site Urmăriți mai multe de la autor:
Îmi place jocul 2048. Așa că am decis să-mi programez propria versiune.
Este foarte asemănător cu jocul propriu-zis, dar programarea mea îmi oferă libertatea de a schimba orice vreau oricând vreau. Dacă vreau un joc 5x5 în loc de 4x4 tipic, o simplă schimbare folosind constructorul „Board” îmi va permite să fac acest lucru. Spuneți că vreau să îngreunez jocul, adăugând piese la poziții care îl vor face cel mai complex pentru jucător, mai degrabă decât la întâmplare. Folosind un algoritm simplu, pot face exact asta. Deși nu voi acoperi toate aceste modificări în acest instructabil, intenționez să adaug mai multe pe măsură ce merg.
Deocamdată, însă, vă vom programa jocul tipic din 2048.
Să începem!
(O notă laterală: acest instructabil necesită cunoștințe moderate de programare - în special cu Java)
Pasul 1: Materiale
Nu veți avea nevoie de mult pentru acest proiect, deoarece este doar un pas de pas de programare.
Materiale:
- Laptop
- Eclipse (sau orice IDE la alegere)
Da. Asta e.
Pasul 2: Cunoașteți programul - Consiliul
Am încărcat tot codul meu pe GitHub - verificați-l aici:
Am împărțit jocul în 3 clase: Board, Tile și Game.
Bord:
Descriere: Clasa Board se ocupă de tabla de joc, configurarea unei matrice de elemente „Tile”, obținerea scorului curent și cea mai mare țiglă și punerea matricei într-un șir (pentru a fi folosită mai târziu în „Joc”). Cea mai mare parte a logicii este, de asemenea, aici, clasa furnizând metode pentru a genera 2 și 4 în locații aleatorii, deplasându-se în sus, în jos, la stânga și la dreapta și informând jucătorii când jocul sa încheiat.
Constructori:
/ * Constructor implicit pentru bord - configurează o matrice 4x4 * /
consiliu public () {…}
/ * Constructor pentru bord - setează o matrice cu dimensiunea grilei specificată * /
Consiliul public (grile int) {…}
Metode:
/ * Metoda Getter care returnează placa * /
public Tile getBoard () {…}
/ * Metoda Getter care returnează scorul * /
public int getScore () {…}
/ * Găsește cea mai înaltă țiglă de pe tablă și o returnează * /
public int getHighTile () {…}
/ * Tipărește placa pe consolă - în scopul testării * /
public nul print () {…}
/ * Returnează placa ca un șir - utilizat în GUI * /
public String toString () {…}
/ * Apare 2 (sau 4) într-un spațiu gol chiar când se face o mișcare * /
public void spawn () {…}
/ * Verifică dacă placa este complet oprită și dacă este, va împinge jucătorii să repornească * /
public boolean blackOut () {…}
/ * Verifică dacă jocul s-a terminat - când tabla este înnegrită și niciuna dintre piese nu se poate combina * /
public boolean gameOver () {…}
/ * Apelat când se apasă „w” sau săgeata sus - apelează „verticalMove” pentru fiecare țiglă de pe tablă cu parametrul „sus” * /
public void up () {…}
/ * Apelat când se apasă „s” sau săgeata în jos - apelează „verticalMove” pentru fiecare țiglă de pe tablă cu parametrul „jos” * / public void jos () {…}
/ * Apelat când este apăsată „d” sau săgeata spre dreapta - apelează „horizontalMove” pentru fiecare țiglă de pe tablă cu parametrul „dreapta” * / public void right () {…}
/ * Apelat când este apăsată „o” sau săgeata stânga - apelează „horizontalMove” pentru fiecare țiglă de pe tablă cu parametrul „left” * /
gol public lăsat () {…}
/ * Compară valorile a două plăci împreună și dacă sunt aceleași sau dacă una este egală cu 0 (placă simplă) - valorile lor sunt adăugate (cu condiția ca plăcile pe care le comparăm să fie două plăci diferite și să se deplaseze spre direcția corespunzătoare) - se mișcă recursiv prin rând * /
public void horizontalMove (int rând, int col, direcție șir) {…}
/ * Compară valorile a două plăci împreună și dacă sunt aceleași sau dacă una este egală cu 0 (placă simplă) - valorile lor sunt adăugate (cu condiția ca plăcile pe care le comparăm să fie două plăci diferite și să se deplaseze spre direcția corespunzătoare) - se deplasează recursiv prin coloana * /
public void verticalMove (int rând, int col, direcție șir) {…}
Da, sunt o mulțime de metode - dar nu vă faceți griji, majoritatea sunt extrem de ușor de înțeles. În plus, clasa „Board” este cea mai complexă, deci totul după aceasta va fi relativ simplu.
Pasul 3: Cunoașteți programul - Placi
Ţiglă:
Descriere: Clasa Tile se ocupă de plăcile individuale și este cea mai mică dintre toate clasele. Fiecare țiglă are o valoare întreagă și o culoare. Are doi constructori care creează plăci de valoare 0 (implicit) sau valoare #. Metodele se explică în mare parte, metodele „getter” și „setter” constituind o mare parte din total.
Constructori:
/ * Construiește o țiglă de bază cu o valoare de 0 * /
placă publică () {…}
/ * Construiește o țiglă cu o valoare de număr * /
Placă publică (număr int) {…}
Metode:
/ * Obține valoarea plăcii * /
public int getValue () {…}
/ * Setează valoarea plăcii - utilizată la adăugarea a două plăci împreună * /
public void setValue (valoare int) {…}
/ * Reprezintă țiglă ca un șir - utilizat în GUI * /
public String toString () {…}
/ * Setează culoarea plăcii pe baza valorii acesteia * /
public void setColor () {…}
/ * Obține culoarea plăcii * /
public nul getColor () {…}
Pasul 4: Cunoașteți Programul - Joc
Joc
Descriere: Clasa de joc găzduiește metoda principală, majoritatea metodelor GUI și interacțiunile cheie. Este nevoie atât de clasele Tile, cât și de cele Board și le permite să lucreze împreună.
Constructori:
Nici unul
Metode:
/ * configurează GUI cu dimensiuni adecvate și adaugă un Key Listener * /
public static void setUpGUI () {…}
/ * Verifică dacă sunt apăsate tastele WASD sau săgeată și efectuează acțiunile corespunzătoare - actualizează JFrame cu fiecare mișcare * /
public void keyPressed (KeyEvent e) {…}
/ * Pictează interfața grafică cu o serie de șiruri, tablă, plăci și se asigură că acestea sunt repictate la sfârșitul jocului * /
vopsea de vid public (grafică g) {…}
/ * desenează o țiglă individuală - apelată din metoda de vopsire * /
public void drawTiles (Graphics g, Tile tile, int x, int y) {…}
/ * Metoda principală - configurează GUI și începe jocul * /
public static main main (String args) {…}
Pasul 5: Metode importante - Mișcare
Metodele de mișcare sunt cele mai importante de înțeles, dar vestea bună este că, odată ce înțelegeți mișcările verticale, puteți aplica această înțelegere mișcărilor orizontale. De fapt, cele trei metode de mișcare verticală sunt exact aceleași cu cele trei mișcări orizontale, cu excepția uneia care se deplasează pe rânduri, iar cealaltă pe coloane. Din acest motiv, să ne concentrăm doar asupra metodelor de mișcare verticală.
private void verticalMove (rând int, col int, direcția șirului)
{Tile initial = board [border] [col]; Compararea plăcilor = bord [rând] [col]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (rând> border || (direction.equals ("jos") && (rând <border))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {score + = addScore; } initial.setValue (addScore); compare.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (rând, col, direcție); }}
Metoda de mai sus, verticalMove, este numită prin metodele „sus” și „jos”. Să aruncăm o privire la metoda „sus”.
public nul ()
{pentru (int i = 0; i <grile; i ++) {border = 0; for (int j = 0; j <grile; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}
Această metodă trece prin întreaga placă și apelează verticalMove pentru fiecare țiglă cu parametrul „sus”. verticalMove compară apoi țiglă la poziția 'j' și 'i' cu țiglă la poziția 'chenar' și 'i'. Dacă cele două sunt egale, ele sunt combinate. Dacă nu sunt, țiglă de margine este mărită cu 1 (deoarece parametrul în loc este „sus”), iar verticalMove este apelat din nou.
Recomandat:
Cum se programează Arduino Mega 2560 Core ?: 3 pași
Cum se programează Arduino Mega 2560 Core ?: Am găsit pe eBay această mega placă Arduino cu factor de formă mic. Este o versiune mai mică a Arduino mega 2560 și se pare că se numește Arduino mega core … Totuși, a existat o problemă! Nu include conectivitate USB și nu există multe în
Creați-vă propriul joc 1D Pong: 5 pași (cu imagini)
Asigurați-vă propriul joc 1D Pong: Pentru acest proiect vă voi arăta cum am combinat o placă MDF cu butoane sonore, LED-uri și un Arduino Nano pentru a crea un joc 1D Pong care este foarte distractiv de jucat. Pe parcurs vă voi arăta cum să creați circuitul electronic și cât de diferit
Arduino Rhythm Game Controller (pentru propriul meu joc): 6 pași
Arduino Rhythm Game Controller (pentru propriul meu joc): În acest instructiv vă voi arăta cum construiesc acest Rhythm Game Controller de la zero. Aceasta implică abilități de bază de prelucrare a lemnului, abilități de bază de imprimare 3D și abilități de bază de lipire. Probabil puteți construi acest proiect cu succes dacă aveți zero ex
Scrie-ți propriul joc Tic Tac Toe în Java: 6 pași
Scrieți-vă propriul joc Tic Tac Toe în Java: Sunt sigur că toți știți despre jocul clasic Tic Tic Toe. Încă din anii de școală elementară, Tic Tac Toe a fost un joc popular pe care îl jucam cu prietenii mei. Am fost întotdeauna fascinat de simplitatea jocului. În primul meu an
Creați-vă propriul kit de joc electronic: 7 pași
Creați-vă propriul kit de joc electronic: conceput inițial pentru Maker Faire de Grand Idea Studio, „Construiți-vă propriul kit de joc electronic” este un kit personalizat destinat să vă introducă în lumea electronică și a lipitului. Când este asamblat cu succes, kitul devine