Turinys:

Programuokite savo 2048 žaidimą „W/Java“: 8 žingsniai
Programuokite savo 2048 žaidimą „W/Java“: 8 žingsniai

Video: Programuokite savo 2048 žaidimą „W/Java“: 8 žingsniai

Video: Programuokite savo 2048 žaidimą „W/Java“: 8 žingsniai
Video: OpenSSH for Windows: The IT Admin's Key to Remote Management 2024, Liepa
Anonim

Autorius: PranP1My (Nebaigta) Svetainė

„Arduino“CNC mašina iš išgelbėtų kompiuterių dalių
„Arduino“CNC mašina iš išgelbėtų kompiuterių dalių
„Arduino“CNC mašina iš išgelbėtų kompiuterių dalių
„Arduino“CNC mašina iš išgelbėtų kompiuterių dalių
„Pasidaryk pats“šiuolaikiniai mediniai suolai
„Pasidaryk pats“šiuolaikiniai mediniai suolai
„Pasidaryk pats“šiuolaikiniai mediniai suolai
„Pasidaryk pats“šiuolaikiniai mediniai suolai
Bekontaktis durų atidarytuvas (vSTEM)
Bekontaktis durų atidarytuvas (vSTEM)
Bekontaktis durų atidarytuvas (vSTEM)
Bekontaktis durų atidarytuvas (vSTEM)

Man patinka žaidimas 2048. Taigi aš nusprendžiau užprogramuoti savo versiją.

Jis labai panašus į tikrąjį žaidimą, tačiau pats jį programuodamas suteikia man laisvę keisti ką tik noriu, kai tik noriu. Jei noriu 5x5 žaidimo, o ne įprasto 4x4, paprastas pakeitimas naudojant „Board“konstruktorių leis tai padaryti. Tarkime, kad noriu apsunkinti žaidimą, pridėdamas gabalus tose pozicijose, kurios padarys žaidėją sudėtingiausiu, o ne atsitiktiniu. Naudodamas paprastą algoritmą, aš galiu tai padaryti. Nors neaprašysiu visų šių pakeitimų šioje instrukcijoje, planuoju pridėti daugiau.

Tačiau kol kas užprogramuosime jūsų tipinį 2048 m. Žaidimą.

Pradėkime!

(Šoninė pastaba: šiai instrukcijai reikia vidutinių programavimo žinių, ypač naudojant „Java“)

1 žingsnis: medžiagos

Medžiagos
Medžiagos

Šiam projektui jums nereikės daug, nes tai tik programavimo apžvalga.

Medžiagos:

  • Nešiojamas kompiuteris
  • „Eclipse“(arba bet koks jūsų pasirinktas IDE)

Taip. Viskas.

2 žingsnis: susipažinkite su programa - lenta

Įkėliau visą savo kodą į „GitHub“- patikrinkite čia:

Aš suskirstiau žaidimą į 3 klases: Stalo, Plytelių ir Žaidimo.

Lenta:

Aprašymas: „Board“klasė nagrinėja žaidimų lentą, sukuria „plytelių“elementų masyvą, gauna dabartinį rezultatą ir aukščiausią plytelę ir masyvą įtraukia į eilutę (vėliau naudojama žaidime). Dauguma logikos taip pat yra čia, klasė pateikia metodus, kaip neršti 2 ir 4 atsitiktinėse vietose, judėti aukštyn, žemyn, kairėn ir dešinėn ir pranešti žaidėjams, kai žaidimas baigiasi.

Konstruktoriai:

/ * Numatytasis lentos konstruktorius - nustato 4x4 matricą */

viešoji valdyba () {…}

/ * Lentos konstruktorius - nustato matricą su nurodytu tinklelio dydžiu */

viešoji valdyba (int tinklai) {…}

Metodai:

/ * Getter metodas, kuris grąžina lentą */

vieša plytelė getBoard () {…}

/ * Getter metodas, kuris grąžina balą */

public int getScore () {…}

/ * Suranda aukščiausią lentos plytelę ir grąžina ją */

public int getHighTile () {…}

/ * Išspausdina plokštę ant konsolės - bandymų tikslais */

public void print () {…}

/ * Pateikia lentą kaip eilutę - naudojama GUI */

public String toString () {…}

/ * Neršia 2 (arba 4) tuščioje vietoje, kai tik juda */

public void spawn () {…}

/ * Patikrina, ar lenta yra visiškai užtemdyta, ir jei taip, ji paskatins žaidėjus paleisti iš naujo */

public boolean blackOut () {…}

/ * Tikrina, ar žaidimas baigtas - kai lenta yra užtemdyta ir nė viena plytelė negali būti derinama */

public boolean gameOver () {…}

/ * Paskambinama paspaudus „w“arba rodyklę aukštyn - iškviečia „verticalMove“kiekvienai lentos plytelei su parametru „aukštyn“*/

viešas negaliojimas () {…}

/ * Skambinama, kai paspaudžiamas „s“arba rodyklė žemyn - iškviečia „verticalMove“kiekvienai lentos plytelei su parametru „žemyn“*/public void down () {…}

/ * Skambinama, kai paspaudžiamas „d“arba rodyklė į dešinę - iškviečia „horizontalMove“kiekvienai lentos plytelei su parametru „right“*/public void right () {…}

/ * Paskambinama, kai paspaudžiama „a“arba rodyklė kairėn - vadinama „horizontalMove“kiekvienai lentos plytelei su parametru „left“*/

public void left () {…}

/* Palyginamos dviejų plytelių vertės kartu ir jei jos yra vienodos arba jei viena lygi 0 (paprastoji plytelė) - pridedamos jų vertės (su sąlyga, kad lyginamos plytelės yra dvi skirtingos plytelės ir juda atitinkama kryptimi) - rekursyviai juda eilute */

public void horizontalMove (vidinė eilutė, int col, eilutės kryptis) {…}

/* Palyginamos dviejų plytelių vertės kartu ir jei jos yra vienodos arba jei viena lygi 0 (paprastoji plytelė) - pridedamos jų vertės (su sąlyga, kad lyginamos plytelės yra dvi skirtingos plytelės ir juda atitinkama kryptimi) - rekursyviai juda per stulpelį */

public void verticalMove (eilutė, int col, eilutės kryptis) {…}

Taip, tai daugybė metodų, tačiau nesijaudinkite, dauguma jų yra labai lengvai suprantami. Be to, „Board“klasė yra sudėtingiausia, todėl viskas po to bus gana paprasta.

3 žingsnis: susipažinkite su programa - plytelė

Plytelė:

Aprašymas: Plytelių klasė susijusi su atskiromis plytelėmis ir yra mažiausia iš visų klasių. Kiekviena plytelė turi sveiką skaičių ir spalvą. Jame yra du konstruktoriai, kurie sukuria 0 vertės (numatytoji) arba #vertės plyteles. Metodai dažniausiai yra savaime suprantami, o „getter“ir „setter“metodai sudaro didžiąją dalį visų.

Konstruktoriai:

/ * Sukuria pagrindinę plytelę, kurios vertė yra 0 */

vieša plytelė () {…}

/ * Sukuria plytelę su reikšme */

vieša plytelė (int numeris) {…}

Metodai:

/ * Gauna plytelės vertę */

public int getValue () {…}

/ * Nustato plytelės vertę - naudojama kartu sudėjus dvi plyteles */

public void setValue (int vertė) {…}

/ * Plytelė pavaizduota kaip eilutė - naudojama GUI */

public String toString () {…}

/ * Nustato plytelės spalvą pagal jos vertę */

public void setColor () {…}

/ * Įgauna plytelių spalvą */

public void getColor () {…}

4 žingsnis: susipažinkite su programa - žaidimas

Žaidimas

Aprašymas: „Game Class“yra pagrindinis metodas, dauguma GUI metodų ir pagrindinės sąveikos. Tai apima tiek plytelių, tiek lentos klases ir leidžia jiems dirbti kartu.

Konstruktoriai:

Nė vienas

Metodai:

/ * nustato tinkamo dydžio GUI ir prideda pagrindinį klausytoją */

public static void setUpGUI () {…}

/ * Tikrina, ar paspaustas „Wasd“ar rodyklių klavišas, ir atlieka atitinkamus veiksmus - atnaujina „JFrame“kiekvieną judesį */

public void keyPaspaustas („KeyEvent e“) {…}

/ * Nuspalvina GUI eilėmis, lenta, plytelėmis ir užtikrina, kad jos bus perdažytos žaidimui pasibaigus */

public void paint (grafika g) {…}

/ * piešia atskirą plytelę, vadinamą dažų metodu */

public void drawTiles (grafika g, plytelių plytelė, int x, int y) {…}

/ * Pagrindinis metodas - nustato GUI ir pradeda žaidimą */

public static void main (String args) {…}

5 žingsnis: svarbūs metodai - judėjimas

Svarbiausia suprasti judesio metodus, tačiau gera žinia yra tai, kad supratę vertikalius judesius, galite pritaikyti šį supratimą horizontaliems judesiams. Tiesą sakant, trys vertikalaus judėjimo metodai yra tokie patys kaip ir trys horizontalūs metodo judesiai, išskyrus vieną, kuris juda per eilutes, o kitas - per stulpelius. Dėl šios priežasties sutelkime dėmesį tik į vertikalaus judėjimo metodus.

private void verticalMove (eilutė, int col, eilutės kryptis)

{Plytelių inicialas = lenta [siena] [col]; Plytelių palyginimas = lenta [eilutė] [col]; if (initial.getValue () == 0 || initial.getValue () == palyginti.getValue ()) {jei (eilutė> kraštinė || (direction.equals ("žemyn") && (eilutė <kraštas))) {int addScore = initial.getValue () + palyginti.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); palyginti.setValue (0); }} else {if (direction.equals ("down")) {border--; } else {border ++; } verticalMove (eilutė, kolona, kryptis); }}

Aukščiau pateiktas metodas „verticalMove“vadinamas „aukštyn“ir „žemyn“metodais. Pažvelkime į „aukštyn“metodą.

viešas anuliavimas ()

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

Šis metodas eina per visą lentą ir iškviečia vertikalų judėjimą kiekvienai plytelei, kurios parametras yra „aukštyn“. verticalMove tada palygina plyteles, esančias „j“ir „i“padėtyse, su plytelėmis, esančiomis „pasienyje“ir „i“. Jei abu yra lygūs, jie sujungiami. Jei jų nėra, kraštinė plytelė padidinama 1 (nes vietoje esantis parametras yra „aukštyn“) ir vėl iškviečiamas vertikalus judėjimas.

Rekomenduojamas: