Съдържание:
- Стъпка 1: Материали
- Стъпка 2: Запознайте се с програмата - съвет
- Стъпка 3: Запознайте се с програмата - Плочки
- Стъпка 4: Запознайте се с програмата - игра
- Стъпка 5: Важни методи - движение
Видео: Програмирайте своя собствена игра 2048 W/Java !: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:49
От PranP1My (непълен) SiteFollow Още от автора:
Обичам играта 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 се извиква отново.
Препоръчано:
Направете своя собствена аварийна Powerbank с ръчно коляно: 4 стъпки (със снимки)
Направете своя собствена аварийна Powerbank с ръчно коляно: В този проект ще ви покажа как да създадете генератор с ръчно коляно заедно с модифицирана powerbank. По този начин можете да заредите вашата powerbank в аварийна ситуация, без да е необходим контакт. По пътя ще ви кажа и защо BLDC е
Направете своя собствена преносима ретро конзола за игра! която също е таблет Win10!: 6 стъпки (със снимки)
Направете своя собствена преносима ретро конзола за игри! …… която също е таблет Win10 !: В този проект ще ви покажа как да създадете преносима ретро конзола за игри, която може да се използва и като таблет с Windows 10. Той ще се състои от 7 " HDMI LCD с тъчскрийн, LattePanda SBC, захранваща платка с USB тип C PD и още няколко допълващи се
Направете своя собствена сурова машина за коктейли: 5 стъпки (със снимки)
Направете своя собствена сурова машина за коктейли: В този проект ще ви покажа как комбинирах Arduino Nano, LCD, въртящ се енкодер, три перисталтични помпи с двигатели, натоварваща клетка и няколко парчета дърво, за да създам суров продукт, но функционална машина за коктейли. По пътя ще де
Направете своя собствена 1D игра в понг: 5 стъпки (със снимки)
Направете своя собствена 1D понг игра: За този проект ще ви покажа как комбинирах MDF плоча с бутони, светодиоди и Arduino Nano, за да създам 1D Pong игра, която е наистина забавна за игра. По пътя ще ви покажа как да създадете електронна схема и как се различават
Напишете своя собствена игра Tic Tac Toe в Java: 6 стъпки
Напишете своя собствена игра Tic Tac Toe в Java: Сигурен съм, че всички знаете за класическата игра на Tic Tic Toe. От началните си години Tic Tac Toe беше популярна игра, в която играех с приятелите си. Винаги съм бил очарован от простотата на играта. През първата година моят