Բովանդակություն:

Programրագրեք ձեր սեփականը 2048 խաղ W/Java !: 8 քայլ
Programրագրեք ձեր սեփականը 2048 խաղ W/Java !: 8 քայլ

Video: Programրագրեք ձեր սեփականը 2048 խաղ W/Java !: 8 քայլ

Video: Programրագրեք ձեր սեփականը 2048 խաղ W/Java !: 8 քայլ
Video: SKR 1.4 - Ender3 Dual Extrusion upgrade 2024, Նոյեմբեր
Anonim

Ըստ PranP1 Իմ (Թերի) SiteFollow Ավելին հեղինակի կողմից.

Arduino CNC մեքենա ՝ փրկված համակարգչի մասերից
Arduino CNC մեքենա ՝ փրկված համակարգչի մասերից
Arduino CNC մեքենա ՝ փրկված համակարգչի մասերից
Arduino CNC մեքենա ՝ փրկված համակարգչի մասերից
DIY ժամանակակից փայտե նստարաններ
DIY ժամանակակից փայտե նստարաններ
DIY ժամանակակից փայտե նստարաններ
DIY ժամանակակից փայտե նստարաններ
Կոնտակտային դռների բացիչ (vSTEM)
Կոնտակտային դռների բացիչ (vSTEM)
Կոնտակտային դռների բացիչ (vSTEM)
Կոնտակտային դռների բացիչ (vSTEM)

Ես սիրում եմ 2048 խաղը: Եվ ես որոշեցի ծրագրավորել իմ սեփական տարբերակը:

Այն շատ նման է իրական խաղին, բայց ինքս այն ծրագրավորելը ինձ ազատություն է տալիս փոխելու այն, ինչ ուզում եմ, երբ ուզում եմ: Եթե ես ուզում եմ 5x5 խաղ տիպիկ 4x4- ի փոխարեն, ապա «Տախտակ» կոնստրուկտորի միջոցով օգտագործվող պարզ փոփոխությունը թույլ կտա դա անել: Ասեք, որ ես ուզում եմ խաղը ավելի բարդացնել ՝ ավելացնելով կտորներ այն դիրքերում, որոնք խաղացողի համար կդարձնեն այն առավել բարդ, քան պատահական: Օգտագործելով պարզ ալգորիթմ, ես կարող եմ դա անել: Թեև ես չեմ լուսաբանի այս հրահանգի այս բոլոր փոփոխությունները, բայց ես մտադիր եմ ավելի շատ ավելացնել:

Սակայն առայժմ մենք ծրագրելու ենք ձեր տիպիկ 2048 թվականի խաղը:

Եկեք սկսենք!

(Կողքի նշում. Այս հրահանգը պահանջում է ծրագրավորման չափավոր իմացություն `մասնավորապես Java- ի հետ)

Քայլ 1: Նյութեր

Նյութեր
Նյութեր

Այս նախագծի համար ձեզ շատ բան պետք չի լինի, քանի որ այն պարզապես ծրագրավորման քայլ է:

Նյութեր:

  • Նոթբուք
  • Խավարում (կամ ձեր ընտրած ցանկացած IDE)

Այո. Վերջ:

Քայլ 2. Getանոթացեք ծրագրին - խորհուրդ

Ես իմ ամբողջ ծածկագիրը վերբեռնեցի GitHub - ստուգեք այն այստեղ ՝

Ես խաղը բաժանեցի 3 դասի ՝ տախտակ, սալիկ և խաղ:

Տախտակ:

Նկարագրություն. Տախտակի դասը զբաղվում է խաղատախտակով, ստեղծելով «Կղմինդր» տարրերի զանգված, ստանալով ընթացիկ հաշիվը և ամենաբարձր սալիկը և զանգվածը դնելով տողի մեջ (հետագայում օգտագործվելու է «Խաղ» -ում): Տրամաբանության մեծ մասը նույնպես այստեղ է, դասը տրամադրում է մեթոդներ 2 -րդ և 4 -երը ձվադրելու պատահական վայրերում, վեր, վար, ձախ և աջ տեղաշարժվելու և խաղացողներին տեղյակ պահելու, երբ խաղն ավարտված է:

Կոնստրուկտորներ

/ * Լռելյայն կոնստրուկտոր խորհրդի համար - ստեղծում է 4x4 մատրիցա */

հանրային խորհուրդ () {…}

/ * Board for Constructor - ստեղծում է մատրիցա `նշված ցանցի չափսերով */

հանրային խորհուրդ (int grids) {…}

Մեթոդներ

/ * Getter մեթոդը, որը վերադարձնում է խորհուրդը */

հրապարակային սալիկ getBoard () {…}

/ * Getter մեթոդը, որը վերադարձնում է հաշիվը */

public int getScore () {…}

/ * Գտնում է գրատախտակի ամենաբարձր սալիկը և վերադարձնում այն */

public int getHighTile () {…}

/ * Տախտակը տպում է վահանակի վրա `փորձարկման նպատակով */

հրապարակային դատարկ տպագիր () {…}

/ * Վերադարձնում է տախտակը որպես տող - օգտագործվում է GUI- ում */

public String toString () {…}

/ * Ձգում է 2 (կամ 4) դատարկ տարածության վրա, երբ շարժում է կատարվում */

public void spawn () {…}

/ * Ստուգում է, թե արդյոք տախտակն ամբողջությամբ մթագնել է, և եթե այն այդպես է, դա խաղացողներին կխթանի վերսկսել */

հանրային բուլյան blackOut () {…}

/ * Ստուգում է, արդյոք խաղը ավարտված է, երբ տախտակը մթագնում է, և սալիկներից ոչ մեկը չի կարող համատեղվել */

հանրային բուլյան gameOver () {…}

/ * Calանգահարվում է «w» կամ վերև սլաքը սեղմելիս ՝ «վեր» պարամետրով տախտակի յուրաքանչյուր սալիկի համար կանչում է «verticalMove» */

հանրային դատարկություն () {…}

/ * Ledանգահարվում է «s» կամ ներքև սլաքը սեղմելու դեպքում - կանչում է «verticalMove» տախտակի յուրաքանչյուր սալիկի համար «down» */public void down () {…}

/ * Ledանգահարվում է 'd' կամ աջ սլաքը սեղմելիս `կանչում է 'horizontalMove' տախտակի յուրաքանչյուր սալիկի համար 'right' * պարամետրով/public void right () {…}

/ * Calանգահարվում է 'a' կամ ձախ սլաքը սեղմելիս `կանչում է 'horizontalMove' տախտակի յուրաքանչյուր սալիկի համար 'ձախ' պարամետրով */

public void left () {…}

/* Համեմատում է երկու սալիկների արժեքները միասին, և եթե դրանք նույնն են կամ եթե մեկը հավասար է 0 -ի (պարզ սալիկ) - դրանց արժեքները գումարվում են (պայմանով, որ մեր համեմատած սալիկները երկու տարբեր սալիկներ են և շարժվում են համապատասխան ուղղությամբ) - ռեկուրսիվ կերպով շարժվում է շարքով */

public void horizontalMove (int տող, int col, String direction) {…}

/* Համեմատում է երկու սալիկների արժեքները միասին, և եթե դրանք նույնն են կամ եթե մեկը հավասար է 0 -ի (պարզ սալիկ) - դրանց արժեքները գումարվում են (պայմանով, որ մեր համեմատած սալիկները երկու տարբեր սալիկներ են և շարժվում են համապատասխան ուղղությամբ) - ռեկուրսիվ շարժվում է սյունակում */

public void verticalMove (int տող, int col, լարային ուղղություն) {…}

Այո, դա շատ մեթոդներ են, բայց մի անհանգստացեք, շատերը շատ հեշտ է հասկանալ: Բացի այդ, «Տախտակ» դասը ամենաբարդն է, ուստի դրանից հետո ամեն ինչ համեմատաբար պարզ կլինի:

Քայլ 3. Getանոթացեք ծրագրին `սալիկ

Սալիկ:

Նկարագրություն. Սալիկների դասը վերաբերում է առանձին սալիկներին և ամենափոքրն է բոլոր դասերից: Յուրաքանչյուր սալիկ ունի ամբողջ արժեք և գույն: Այն ունի երկու կոնստրուկտոր, որոնք ստեղծում են 0 արժեքի սալիկներ (կանխադրված) կամ #արժեք: Մեթոդները հիմնականում ինքնաբացատրվող են, իսկ «հավաքող» և «սեթեր» մեթոդները կազմում են ընդհանուրի մեծ մասը:

Կոնստրուկտորներ

/ * Կառուցում է 0 * արժեքով հիմնական սալիկ

հանրային սալիկ () {…}

/ * Կառուցում է սալիկ ՝ թվի արժեքով */

հանրային սալիկ (int համար) {…}

Մեթոդներ

/ * Ստանում է սալիկի արժեքը */

public int getValue () {…}

/ * Սահմանում է սալիկի արժեքը - օգտագործվում է երկու սալիկ միասին ավելացնելիս */

public void setValue (int value) {…}

/ * Ներկայացնում է կղմինդրը որպես տող - օգտագործվում է GUI- ում */

public String toString () {…}

/ * Սահմանում է սալիկի գույնը `ելնելով դրա արժեքից */

public void setColor () {…}

/ * Ստանում է սալիկի գույնը */

public void getColor () {…}

Քայլ 4: Getանոթացեք --րագիրը - խաղ

Խաղ

Խաղերի դասը ներառում է հիմնական մեթոդը, GUI մեթոդների մեծ մասը և հիմնական փոխազդեցությունները: Այն տևում է ինչպես սալիկի, այնպես էլ խորհրդի դասերը և հնարավորություն է տալիս նրանց աշխատել միասին:

Կոնստրուկտորներ

Ոչ ոք

Մեթոդներ

/ * տեղադրում է GUI- ն համապատասխան չափերով և ավելացնում է հիմնական ունկնդիրը */

հանրային ստատիկ դատարկություն setUpGUI () {…}

/ * Ստուգում է ՝ արդյոք wasd կամ arrow ստեղները սեղմված են և կատարում է համապատասխան գործողություններ. Թարմացնում է JFrame- ը ամեն քայլափոխի */

public void keyPressed (KeyEvent e) {…}

/ * Ներկում է GUI- ն մի շարք լարերով, տախտակով, սալիկներով և ապահովում, որ դրանք վերաներկվեն, երբ խաղը ավարտվի */

հանրային դատարկ ներկ (գրաֆիկա g) {…}

/ * նկարում է առանձին սալիկ `կոչված ներկի մեթոդից */

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

/ * Հիմնական մեթոդը - ստեղծում է GUI և սկսում խաղը */

public static void main (String args) {…}

Քայլ 5. Կարևոր մեթոդներ. Շարժում

Շարժման մեթոդներն ամենակարևորն են հասկանալու համար, բայց լավ նորությունն այն է, երբ դուք հասկանում եք ուղղահայաց շարժումները, կարող եք այդ հասկացողությունը կիրառել հորիզոնական շարժումների վրա: Իրականում, ուղղահայաց շարժման երեք մեթոդները ճիշտ նույնն են, ինչ երեք հորիզոնական մեթոդների շարժումները, բացառությամբ մեկի `տողերի, մյուսը` սյուների միջև: Այդ պատճառով եկեք կենտրոնանանք միայն ուղղահայաց շարժման մեթոդների վրա:

private void verticalMove (int տող, int col, լարային ուղղություն)

{Սալիկի սկզբնական = տախտակ [եզրագիծ] [col]; Սալիկի համեմատում = տախտակ [տող] [սյուն]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (տող> սահման || (ուղղություն.հավասար («ներքև») && (տող <սահման))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {միավոր += addScore; } initial.setValue (addScore); compare.setValue (0); }} այլ {if (direction.equals ("down")) {border--; } else {սահման ++; } verticalMove (տող, սյուն, ուղղություն); }}

Վերը նշված մեթոդը ՝ verticalMove, կոչվում է «վեր» և «վար» մեթոդներով: Եկեք նայենք «վեր» մեթոդին:

հանրային դատարկություն ()

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

Այս մեթոդը անցնում է ամբողջ տախտակի միջով և յուրաքանչյուր սալիկի համար անվանում է verticalMove «վեր» պարամետրով: verticalMove- ն այնուհետև համեմատում է «j» և «i» դիրքում գտնվող սալիկը սալիկի հետ «եզր» և «i» դիրքերում: Եթե երկուսը հավասար են, դրանք համակցված են: Եթե դրանք չլինեն, եզրագծի սալիկն ավելանում է 1 -ով (քանի որ տեղում պարամետրը «վեր» է), և verticalMove- ը կրկին կանչվում է:

Խորհուրդ ենք տալիս: