Съдържание:

Програмирайте своя собствена игра 2048 W/Java !: 8 стъпки
Програмирайте своя собствена игра 2048 W/Java !: 8 стъпки

Видео: Програмирайте своя собствена игра 2048 W/Java !: 8 стъпки

Видео: Програмирайте своя собствена игра 2048 W/Java !: 8 стъпки
Видео: ТЕПЕРЬ У КАЖДОГО ЕСТЬ СВОЯ СОБСТВЕННАЯ МАШИНА! УГАР В THE LONG DRIVE 2024, Ноември
Anonim

От PranP1My (непълен) SiteFollow Още от автора:

Arduino CNC машина от спасени части за компютър
Arduino CNC машина от спасени части за компютър
Arduino CNC машина от спасени части за компютър
Arduino CNC машина от спасени части за компютър
Направи си сам модерни дървени пейки
Направи си сам модерни дървени пейки
Направи си сам модерни дървени пейки
Направи си сам модерни дървени пейки
Безконтактно отваряне на врати (vSTEM)
Безконтактно отваряне на врати (vSTEM)
Безконтактно отваряне на врати (vSTEM)
Безконтактно отваряне на врати (vSTEM)

Обичам играта 2048. И затова реших да програмирам своя собствена версия.

Тя е много подобна на действителната игра, но самото програмиране ми дава свободата да променя каквото си искам, когато пожелая. Ако искам игра 5x5 вместо типичната 4x4, проста промяна с помощта на конструктора „Board“ще ми позволи да го направя. Кажете, че искам да направя играта по -трудна, добавяйки фигури на позиции, които ще я направят най -сложна за играча, а не на случаен принцип. Използвайки прост алгоритъм, мога да направя точно това. Въпреки че няма да обхващам всички тези модификации в тази инструкция, планирам да добавя още, докато вървя.

Засега обаче ще програмираме типичната ви игра от 2048 г.

Да започваме!

(Странична бележка: Този Instructable изисква умерени познания по програмиране - особено с Java)

Стъпка 1: Материали

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

Няма да ви трябват много за този проект, тъй като това е просто програмиране.

Материали:

  • Лаптоп
  • Eclipse (или всяка друга IDE по ваш избор)

Мда. Това е.

Стъпка 2: Запознайте се с програмата - съвет

Качих целия си код в GitHub - проверете го тук:

Разделих играта на 3 класа: Board, Tile и Game.

Борд:

Описание: Класът Board се занимава с дъската за игри, настройване на масив от елементи „Tile“, получаване на текущия резултат и най -високата плочка и поставяне на масива в низ (който ще се използва по -късно в „Game“). По -голямата част от логиката също е тук, класът предоставя методи за хвърляне на хайвера 2 и 4 на произволни места, придвижване нагоре, надолу, наляво и надясно и уведомяване на играчите, когато играта приключи.

Конструктори:

/ * Конструктор по подразбиране за дъската - настройва матрица 4x4 */

обществен съвет () {…}

/ * Конструктор за дъската - настройва матрица с определен размер на мрежата */

обществен съвет (int grids) {…}

Методи:

/ * Getter метод, който връща платката */

обществена плочка getBoard () {…}

/ * Метод на получаване, който връща резултата */

public int getScore () {…}

/ * Намира най -високата плочка на дъската и я връща */

public int getHighTile () {…}

/ * Отпечатва дъската върху конзолата - за целите на тестването */

public void print () {…}

/ * Връща дъската като низ - използва се в GUI */

обществен String toString () {…}

/ * Появява 2 (или 4) на празно място много време, когато се направи ход */

public void spawn () {…}

/ * Проверява дали дъската е напълно затъмнена и ако е така, тя ще подтикне играчите да рестартират */

публично логическо blackOut () {…}

/ * Проверява дали играта е приключила - когато дъската е затъмнена и никоя от плочките не може да комбинира */

обществена булева играOver () {…}

/ * Извиква се при натискане на „w“или стрелка нагоре - извиква „verticalMove“за всяка плочка на дъската с параметър „нагоре“*/

public void up () {…}

/ * Извиква се при натискане на стрелка „s“или надолу - извиква „verticalMove“за всяка плочка на дъската с параметър „надолу“*/public void down () {…}

/ * Извиква се при натискане на „d“или стрелка надясно - извиква „horizontalMove“за всяка плочка на дъската с параметър „надясно“*/public void right () {…}

/ * Извиква се при натискане на „a“или стрелка наляво - извиква „horizontalMove“за всяка плочка на дъската с параметър „left“*/

public void left () {…}

/* Сравнява стойностите на две плочки заедно и ако те са еднакви или ако едната е равна на 0 (обикновена плочка) - техните стойности се добавят (при условие че плочките, които сравняваме, са две различни плочки и те се движат към подходящата посока) - рекурсивно се движи през реда */

public void horizontalMove (int ред, int col, посока на низ) {…}

/* Сравнява стойностите на две плочки заедно и ако те са еднакви или ако едната е равна на 0 (обикновена плочка) - техните стойности се добавят (при условие че плочките, които сравняваме, са две различни плочки и те се движат към подходящата посока) - рекурсивно се движи през колоната */

public void verticalMove (int ред, int col, посока на низ) {…}

Да, това са много методи - но не се притеснявайте, повечето са изключително лесни за разбиране. На всичкото отгоре класът „Board“е най -сложният, така че всичко след това ще бъде сравнително просто.

Стъпка 3: Запознайте се с програмата - Плочки

Плочки:

Описание: Класът Tile се занимава с отделните плочки и е най -малкият от всички класове. Всяка плочка има цяло число и цвят. Той има два конструктора, които създават плочки на стойност 0 (по подразбиране) или стойност #. Методите са предимно обясними, като методите "getter" и "setter" съставляват по -голямата част от общия брой.

Конструктори:

/ * Конструира основна плочка със стойност 0 */

обществена плочка () {…}

/ * Конструира плочка със стойност номер */

обществена плочка (int номер) {…}

Методи:

/ * Получава стойността на плочката */

public int getValue () {…}

/ * Задава стойността на плочката - използва се при добавяне на две плочки заедно */

public void setValue (int value) {…}

/ * Представя плочката като низ - използва се в GUI */

обществен String toString () {…}

/ * Задава цвета на плочката въз основа на нейната стойност */

public void setColor () {…}

/ * Получава цвета на плочката */

public void getColor () {…}

Стъпка 4: Запознайте се с програмата - игра

Игра

Описание: Класът на игрите съдържа основния метод, повечето от методите на графичния интерфейс и ключовите взаимодействия. Това отнема както класовете за плочки, така и за борда и им позволява да работят заедно.

Конструктори:

Нито един

Методи:

/ * настройва графичния интерфейс с подходящи размери и добавя слушател на ключове */

публична статична празнота setUpGUI () {…}

/ * Проверява дали са натиснати бутоните wasd или със стрелки и извършва съответните действия - актуализира JFrame с всяко движение */

public void keyPressed (KeyEvent e) {…}

/ * Оцветява GUI с поредица от низове, дъска, плочки и гарантира, че те са пребоядисани, когато играта приключи */

боя за публични празнини (Графика ж) {…}

/ * рисува отделна плочка - извиква се от метода на боя */

public void drawTiles (Графика g, Плочки, int x, int y) {…}

/ * Основен метод - настройва GUI и стартира играта */

обществена статична void main (String args) {…}

Стъпка 5: Важни методи - движение

Методите на движение са най -важните за разбиране, но добрата новина е, че след като разберете вертикалните движения, можете да приложите това разбиране към хоризонталните движения. Всъщност трите вертикални метода на движение са абсолютно същите като трите хоризонтални движения на метода, с изключение на това, че единият се движи през редове, а другият през колони. Поради тази причина нека се съсредоточим само върху методите за вертикално движение.

private void verticalMove (int ред, int col, посока на низ)

{Tile initial = board [border] [col]; Сравнение на плочки = дъска [ред] [колона]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (ред> граница || (посока.equals ("надолу") && (ред <граница))) {int addScore = initial.getValue () + compare.getValue (); if (initial.getValue ()! = 0) {score += addScore; } initial.setValue (addScore); сравни.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, "нагоре"); }}}}}

Този метод преминава през цялата дъска и извиква verticalMove за всяка плочка с параметър "нагоре". verticalMove след това сравнява плочката в позиция 'j' и 'i' с плочката в позиция 'border' и 'i'. Ако двете са равни, те се комбинират. Ако не са, граничната плочка се увеличава с 1 (тъй като параметърът е "нагоре"), и verticalMove се извиква отново.

Препоръчано: