Игра 2048 представляет собой поле 4*4, по которому нужно передвигать ячейки с цифрами. Одинаковые числа суммируются, цель — дойти до 2048. Создать 2048 можно самостоятельно, при этом, есть возможность изменить поле или добавить сложностей игроку. В любом случае, вы тренируете свои навыки game Java. В блоге студии web-разработки YuSMP Group привели пошаговое руководство, как это сделать.
Как создать игру на Java на примере 2048
Что понадобится:
- Ноутбук.
- Eclipse (или любая другая IDE на ваш выбор).
Нужен код? Его можно найти здесь.
Шаг 1: Board
Разделили игру на 3 класса: Board, Tile и Game.
Board: работает с игровым полем, настраивая массив элементов «Tile», получая текущий счет и самую высокую плитку, и помещая массив в строку (которая будет использоваться позже в «Game»). Большая часть логики также находится здесь, класс предоставляет методы для создания двойки и четверки в случайных местах, перемещения вверх, вниз, влево и вправо, а также сообщает игрокам, когда игра окончена.
Конструкторы:
/* Конструктор по умолчанию для Board - настраивает матрицу 4x4 */
общественная доска () {...}
/* Конструктор платы - настраивает матрицу с заданным размером сетки */
общественная доска (между сетками) {...}
Методы:
/* Метод получения, который возвращает плату */
публичная плитка[][] getBoard() {...}
/* Метод получения, который возвращает счет */
публичный int getScore () {...}
/* Находит самую высокую плитку на доске и возвращает ее */
публичный интервал getHighTile() {...}
/* Выводит плату на консоль — для тестирования */
public void print() {...}
/* Возвращает плату в виде строки — используется в графическом интерфейсе */
общедоступная строка toString() {...}
/* Порождает 2 (или 4) на пустом месте каждый раз, когда делается ход */
public void spawn() {...}
/* Проверяет, полностью ли затемнено игровое поле, и если да, то подталкивает игроков к перезапуску */
public boolean blackOut() {...}
/* Проверяет, окончена ли игра - когда игровое поле затемнено и ни одна из плиток не может быть объединена */
общественное логическое значение gameOver() {...}
/* Вызывается при нажатии 'w' или стрелки вверх - вызывает 'verticalMove' для каждой плитки на доске с параметром 'up' */
публичная пустота вверх() {...}
/* Вызывается при нажатии 's' или стрелки вниз - вызывает 'verticalMove' для каждой плитки на доске с параметром 'down' */
public void down() {...}
/* Вызывается при нажатии 'd' или стрелки вправо - вызывает 'horizontalMove' для каждой плитки на доске с параметром 'right' */
public void right() {...}
/* Вызывается при нажатии «a» или стрелки влево — вызывает «horizontalMove» для каждой плитки на доске с параметром «left» */
публичная пустота слева () {...}
/* Сравнивает значения двух тайлов вместе, и если они одинаковые или если одно из них равно 0 (простой тайл) - их значения складываются (при условии, что сравниваемые нами тайлы - это два разных тайла и они движутся в соответствующем направлении) - рекурсивно перемещается по строке */
public void horizontalMove (int row, int col, String direction) {...}
/* Сравнивает значения двух тайлов вместе, и если они одинаковые или если одно из них равно 0 (простой тайл) - их значения складываются (при условии, что сравниваемые нами тайлы - это два разных тайла и они движутся в соответствующем направлении) - рекурсивно перемещается по столбцу */
public void verticalMove (int row, int col, String direction) {...}
Да, методов много, но не волнуйтесь, большинство из них чрезвычайно просты для понимания. Кроме того, класс «Board» самый сложный, так что после него все будет относительно просто.
Шаг 2: Tile
Класс Tile при создании игры на java работает с отдельными плитками и является самым маленьким из всех. Каждая плитка имеет целочисленное значение и цвет. Он имеет два конструктора, которые создают плитки со значением 0 (по умолчанию) или значением #. Методы в основном говорят сами за себя, а методы «геттер» и «сеттер» составляют большую часть общего числа.
Конструкторы:
/* Создает базовую плитку со значением 0 */
общедоступная плитка () {...}
/* Создает плитку со значением числа */
общедоступная плитка (целое число) {...}
Методы:
/* Получает значение тайла */
публичный интервал getValue () {...}
/* Устанавливает значение тайла - используется при сложении двух тайлов вместе */
public void setValue (целое значение) {...}
/* Представляет плитку в виде строки — используется в графическом интерфейсе */
общедоступная строка toString() {...}
/* Устанавливает цвет тайла в зависимости от его значения */
публичная пустота setColor() {...}
/* Получаем цвет тайла */
публичная пустота getColor() {...}
Шаг 3: Game
Game содержит основной метод, большинство методов графического интерфейса и ключевые взаимодействия. Он принимает классы Tile и Board и позволяет им работать вместе.
Методы:
/* настраивает графический интерфейс с соответствующими размерами и добавляет Key Listener */
public static void setUpGUI() {...}
/* Проверяет, нажаты ли кнопки wasd или клавиши со стрелками, и выполняет соответствующие действия — обновляет JFrame при каждом перемещении */
public void keyPressed (KeyEvent e) {...}
/* Закрашивает графический интерфейс с набором строк, доски, тайлов и обеспечивает их перерисовку после окончания игры */
public void paint (Graphics g) {...}
/* рисует отдельный тайл - вызывается из метода рисования */
public void drawTiles (Graphics g, Tile tile, int x, int y) {...}
/* Основной метод - настраивает графический интерфейс и запускает игру */
public static void main(String[] args) {...}
Шаг 4: движение
Методы движения являются наиболее важными для понимания, но хорошая новость заключается в том, что как только вы поймете вертикальные движения, вы сможете применить это понимание к горизонтальным движениям. Фактически, три метода вертикального перемещения точно такие же, как и три метода горизонтального перемещения, за исключением того, что один перемещается по строкам, а другой — по столбцам. По этой причине давайте сосредоточимся только на методах вертикального движения.
Этот метод проходит по всей доске и вызывает verticalMove для каждого тайла с параметром «вверх». Затем verticalMove сравнивает плитку в позициях «j» и «i» с плиткой в позициях «граница» и «i». Если два равны, они объединяются. Если это не так, границы увеличивается на 1 (поскольку параметр на месте равен «вверх»), и снова вызывается verticalMove.
Шаг 5: игра окончена
Метод Game Over использует несколько операторов if, чтобы проверить, окончена ли игра. Операторы if/else казались самым простым способом сделать это. В результате метод очень длинный, но относительно простой для понимания.
Шаг 6: нажатия клавиш
Методы нажатия клавиш импортируются из keyListener.
По сути, этот метод проверяет, является ли keyEvent клавишей aw, a, s или d или клавишей вверх, вниз, влево или вправо. Как и в большинстве видеоигр, «w» и «вверх» служат одной и той же цели, «s» и «вниз» служат одной и той же цели, «a» и «left» служат одной и той же цели, а «d» и «right» служат одной и той же цели. Клавиша Enter предназначена для запуска игры, поэтому при каждом ее нажатии рисуется новая доска и случайным образом появляются два числа. Если нажата любая из других клавиш, игра перемещается вверх, вниз, влево или вправо в зависимости от того, какая из них нажата, и кадр перерисовывается.
Шаг 7: Готово!
Надеемся, это руководство дало представление о том, как написать игру на java, в частности — 2048. Если вам нужно создать более сложный продукт или систему для бизнеса — веб-услуги и разработка в YuSMP Group станут лучшим решением. Проекты, которые мы создали уже приносят и высокие показатели своим владельцам.
No comments.