Cum să-ți scriu sapperul pe java în 15 minute

Cum să-ți scriu sapperul pe java în 15 minute

Vom avea nevoie de:

  • 15 minute de timp liber;
  • Un mediu de lucru reglat, adică JDK și IDE (de exemplu, Eclipse);
  • Biblioteca LWJGL (versiunea 2.x.x) pentru lucrul cu Open GL. Rețineți că pentru versiunile LWJGL de mai sus 3 va trebui să scrieți un cod diferit de cel prezentat în articol;
  • Icoane pentru celule, adică numere, un steag, un steag plasat incorect, o mină, o mină explodată și un câmp închis. Puteți să-l desenați simbolic sau să descărcați cele folosite pentru a scrie articolul.

Lucrează cu grafica

Pentru a lucra cu grafica, creați o clasă separată - GUI. Din aceasta, trebuie să stocăm toate comenzile grafice (de exemplu, câmpurile de celule), definirea elementului prin care trebuie să faceți clic și să transferăm controlul, să afișăm elementele grafice pe ecran și să controlam funcțiile de bază ale OpenGL.







Beneficiați că clasa GUI va interacționa cu elementele grafice, trebuie să creați o interfață (scrierea clasei rețelei, a celulelor și a altor mecanici este prea devreme), ceea ce va determina ce este. Logica sugerează că elementul grafic ar trebui să aibă:

  • Aspect (textura);
  • coordonează;
  • Dimensiuni (lățime și înălțime);
  • O metodă care, pe baza coordonatelor de clic transmise, determină dacă un clic pe un element a lovit;
  • O metodă care manipulează un clic pe un element.

Astfel, scriem:

GUI ar trebui să stocheze celulele câmpului. Să creăm o matrice bidimensională în aceste scopuri:

Acum, să examinăm principalele funcții ale OpenGL. În primul rând, avem nevoie de inițializare.







Nu vom mai vorbi despre asta în detaliu studiul LWJGL nu face parte din planurile noastre actuale. În al doilea rând, trebuie să actualizăm imaginea pe ecran:

Și, în final, trebuie să desenați această imagine în general. Pentru aceasta, este timpul să terminați enum Sprite. Elementele sale vor reprezenta un înveliș pentru textura cu nume ușor de citit.

Acum putem scrie o metodă pentru GUI. care va atrage elementele:

Trebuie doar să facă o singură metodă pentru a inițializa grafica, iar restul vom scrie în clasa de control principal, revenind aici, doar pentru a face modificări minore.

Creați o clasă de celule. Interfață GUIlement. In metodele getWidth () și getHeight () restituie constant pentru coordonatele vor crea un domeniu care va fi inițializat de proiectant. Doar proiectantul va transfera starea unei celule, „-1“, în cazul în care este a mea, „-2“, în cazul în care acesta este o mină a explodat, numărul de minele din apropiere, în alte cazuri. În acest scop, ar fi posibil să se folosească enum, dar este mai convenabil să se transfere numărul de mine ca întreg, IMHO. Deci, designerul:

Încă două câmpuri - booleanul este Marcat și Boolean isHidden va fi responsabil pentru a detecta dacă celula a fost marcată și a fost deschisă. Implicit, ambele pavilioane sunt setate la fals.

Ne vom uita la metoda getSprite ().

În cazul în care butonul este apăsat, trebuie din nou să luăm în considerare câteva cazuri simple:

Pentru a putea deschide celula atunci când celula este deteriorată, adăugăm metoda:

Pentru o implementare mai convenabilă a generatorului, adăugați această metodă:

Tratamentul răspunsurilor din celule

Să revenim la metoda GUI.receiveClick (). Acum nu putem întoarce rezultatul înapoi, deoarece dacă rezultatul este o unitate, atunci trebuie să deschidem celulele învecinate și să revenim la clasa principală de control este deja zero, ca semn că totul a mers bine.

Noi scriem un generator

Această sarcină nu este mai dificilă decât crearea unei serii de valori booleene aleatorii. Ideea este urmatoarea - pentru fiecare celula a matricei, generam un numar aleatoriu de la 0 la 100. Daca acest numar este mai mic de 15, atunci scriem matricea minus in acest loc (astfel, sansa de a satisface mina este de 15%). După ce am scris mina, numim toate celulele din jurul metodei incNearMines (). dar pentru acele celule în care celula nu a fost încă creată, stocăm valoarea într-o matrice specială.

Principala clasă de control și intrare

Creați clasa principală. în ea metoda de intrare este public static void main (String [] args). Această metodă va trebui să facă două lucruri: apel inițializarea GUI și în mod ciclic apela metodele de lucru, până când primește un semnal de închidere (intrare () GUI.draw () și GUI.update ().).

Aici nu avem metoda input (). să ne ocupăm de ea.

Metoda GUI.gameover () va apela pur și simplu metoda show () pe fiecare celulă, arătând astfel întregul câmp:







Trimiteți-le prietenilor: