Мазмұны:

Java -мен жеке 2048 ойынын бағдарламалаңыз: 8 қадам
Java -мен жеке 2048 ойынын бағдарламалаңыз: 8 қадам

Бейне: Java -мен жеке 2048 ойынын бағдарламалаңыз: 8 қадам

Бейне: Java -мен жеке 2048 ойынын бағдарламалаңыз: 8 қадам
Бейне: что же лучше 8х8 или 128х128 2024, Шілде
Anonim

By PranP1My (Аяқталмаған) SiteFollow Автордың толығырақ:

Arduino CNC машинасы құтқарылған компьютер бөлшектерінен
Arduino CNC машинасы құтқарылған компьютер бөлшектерінен
Arduino CNC машинасы құтқарылған компьютер бөлшектерінен
Arduino CNC машинасы құтқарылған компьютер бөлшектерінен
DIY қазіргі заманғы ағаш орындықтар
DIY қазіргі заманғы ағаш орындықтар
DIY қазіргі заманғы ағаш орындықтар
DIY қазіргі заманғы ағаш орындықтар
Контактісіз есік ашқыш (vSTEM)
Контактісіз есік ашқыш (vSTEM)
Контактісіз есік ашқыш (vSTEM)
Контактісіз есік ашқыш (vSTEM)

Маған 2048 ойыны ұнайды. Сондықтан мен өз нұсқамды бағдарламалауды шештім.

Бұл нақты ойынға өте ұқсас, бірақ оны өзім бағдарламалау маған қалаған нәрсені өзгертуге еркіндік береді. Егер мен әдеттегі 4x4 орнына 5х5 ойын алғым келсе, «Board» конструкторын қолданатын қарапайым өзгеріс маған мұны жасауға мүмкіндік береді. Мен ойынды кездейсоқ емес, ойыншы үшін ең күрделі ететін позицияға бөлшектерді қосып, ойынды қиындатқым келеді деп айтыңыз. Қарапайым алгоритмді қолдана отырып, мен мұны істей аламын. Мен осы нұсқаулықта осы өзгерістердің барлығын қамтымайтын болсам да, мен барған сайын көбірек қосуды жоспарлап отырмын.

Әзірше, біз сіздің 2048 жылғы әдеттегі ойыныңызды бағдарламалаймыз.

Бастайық!

(Қосымша ескерту: Бұл нұсқаулық бағдарламалау бойынша орташа білімді талап етеді - әсіресе Java -де)

1 -қадам: материалдар

Материалдар
Материалдар

Бұл жобаға көп нәрсе қажет емес, себебі бұл жай ғана бағдарламалау.

Материалдар:

  • Ноутбук
  • Eclipse (немесе сіз таңдаған кез келген IDE)

Иә. Міне бітті.

2 -қадам: Бағдарламамен танысыңыз - тақта

Мен барлық кодты GitHub -ға жүктедім - мына жерден қараңыз:

Мен ойынды 3 сыныпқа бөлдім: тақта, плитка және ойын.

Тақта:

Сипаттама: Тақта тақтасы ойын тақтасы, 'Tile' элементтерінің жиынын орнату, ағымдағы ұпай мен ең жоғарғы тақтайшаны алу және массивті жолға қоюмен айналысады (кейінірек «Ойында» қолданылады). Логиканың көп бөлігі осында, 2 және 4 топтарын кездейсоқ жерлерде, жоғары, төмен, солға және оңға жылжыту әдістерін ұсынатын және ойын аяқталған кезде ойыншыларға хабар беретін класс.

Конструкторлар:

/ * Тақтаның әдепкі конструкторы - 4х4 матрицаны орнатады */

қоғамдық кеңес () {…}

/ * Тақта конструкторы - тор өлшемі көрсетілген матрицаны орнатады */

қоғамдық кеңес (int grids) {…}

Әдістер:

/ * Тақтаны қайтаратын Getter әдісі */

жалпы тақта getBoard () {…}

/ * Балды қайтаратын Getter әдісі */

public int getScore () {…}

/ * Тақтадағы ең биік тақтайшаны тауып, қайтарады */

public int getHighTile () {…}

/ * Тақтаны консольге басып шығарады - тестілеу мақсатында */

public void print () {…}

/ * Тақтаны жол ретінде қайтарады - GUI -де қолданылады */

public String toString () {…}

/ * Қозғалыс кезінде бос кеңістікте 2 (немесе 4) туады */

жалпыға бірдей жарамсыздық () {…}

/ * Тақта толығымен қараңғыланғанын тексереді және егер ол ойыншыларды қайта жүктеуге итермелейді */

public boolean blackOut () {…}

/ * Ойынның аяқталғанын тексереді - тақта қараңғыланған кезде және плиткалардың ешқайсысы біріктірілмейді */

қоғамдық логикалық ойынOver () {…}

/ * 'W' немесе жоғары көрсеткі басылған кезде шақырылады - 'жоғары' параметрі бар тақтадағы әр тақта үшін 'verticalMove' шақырады */

public void up () {…}

/ * 'S' немесе төмен көрсеткі басылған кезде шақырылады - 'down' */public void down () {…} параметрі бар тақтаның әр тақтасы үшін 'verticalMove' шақырады.

/ * 'D' немесе оң жақ көрсеткі басылған кезде шақырылады - 'оңға' */public void right () {…} параметрі бар тақтаның әр тақтасы үшін 'horizontalMove' шақырады.

/ * 'A' немесе сол жақ көрсеткі басылғанда шақырылады - 'солға' параметрі бар тақтадағы әр тақта үшін 'horizontalMove' шақырады */

public void left () {…}

/* Екі тақтайшаның мәндерін бірге салыстырады және егер олар бірдей болса немесе біреуі 0 -ге тең болса (қарапайым плитка) - олардың мәндері қосылады (егер біз салыстырып отырған тақтайшалар екі түрлі плитка болса және олар тиісті бағытқа қарай жылжып кетсе). - рекурсивті жол бойымен қозғалады */

public void horizontalMove (int қатар, int col, Жол бағыты) {…}

/* Екі тақтайшаның мәндерін бірге салыстырады және егер олар бірдей болса немесе біреуі 0 -ге тең болса (қарапайым плитка) - олардың мәндері қосылады (егер біз салыстыратын тақтайшалар екі түрлі плитка болса және олар тиісті бағытқа қарай жылжып кетсе). - баған бойынша рекурсивті қозғалады */

public void verticalMove (int қатар, int col, Жол бағыты) {…}

Иә, бұл көптеген әдістер - бірақ алаңдамаңыз, олардың көпшілігін түсіну өте оңай. Оның үстіне, 'Board' класы - ең күрделі, сондықтан бұдан кейінгі барлығы салыстырмалы түрде қарапайым болады.

3 -қадам: Бағдарламамен танысыңыз - плитка

Плитка:

Сипаттама: Tile класы жеке тақтайшалармен айналысады және барлық сыныптардың ішіндегі ең кішісі болып табылады. Әр плиткада бүтін сан мен түс бар. Онда 0 (әдепкі) немесе #мәнді тақтайшаларды жасайтын екі конструктор бар. Әдістер көбінесе өздігінен түсіндіріледі, «гетер» және «орнатушы» әдістері жалпы санның көп бөлігін құрайды.

Конструкторлар:

/ * 0 * мәні бар негізгі тақтайшаны салады/

қоғамдық плитка () {…}

/ * Сан мәні бар тақтайша құрастырады */

жалпы тақта (int нөмірі) {…}

Әдістер:

/ * Плитканың мәнін алады */

public int getValue () {…}

/ * Плитканың мәнін орнатады - екі плитканы бірге қосқанда қолданылады */

public void setValue (int мәні) {…}

/ * Тақтайшаны жол ретінде көрсетеді - GUI пайдаланылады */

public String toString () {…}

/ * Плитканың түсін оның мәніне қарай орнатады */

public void setColor () {…}

/ * Плитканың түсін алады */

public void getColor () {…}

4 -қадам: Бағдарламамен танысу - Ойын

Ойын

Сипаттама: Ойын класы негізгі әдісті, GUI әдістерінің көпшілігін және негізгі өзара әрекеттестікті қамтиды. Бұл Tile және Board сабақтарының екеуін де алады және олардың бірлесіп жұмыс істеуіне мүмкіндік береді.

Конструкторлар:

Ешқайсысы

Әдістер:

/ * тиісті өлшемдегі GUI орнатады және кілт тыңдаушыны қосады */

public static void setUpGUI () {…}

/ * Жою немесе көрсеткі пернелердің басылғанын тексереді және сәйкес әрекеттерді орындайды - 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, Жол бағыты)

{Tile initial = board [border] [col]; Tile салыстыру = тақта [қатар] [col]; if (initial.getValue () == 0 || initial.getValue () == салыстыру.getValue ()) {if (жол> шекара || (бағыт. тең («төмен») && (жол <шекара))) {int addScore = initial.getValue () + müqayisə.getValue (); if (initial.getValue ()! = 0) {балл += addScore; } initial.setValue (addScore); müqayisə.setValue (0); }} else {if (direction.equals («down»)) {border--; } else {border ++; } 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' позициясындағы тақтайшаны 'border' және 'i' позициясындағы плиткамен салыстырады. Егер екеуі тең болса, олар біріктіріледі. Егер олар болмаса, жиек тақтасы 1 -ге көбейтіледі (себебі орнындағы параметр «жоғары»), және verticalMove қайтадан шақырылады.

Ұсынылған: