Оглавление:
- Шаг 1: материалы
- Шаг 2. Познакомьтесь с программой - Доска
- Шаг 3. Знакомство с программой - плитка
- Шаг 4. Знакомство с программой - игра
- Шаг 5: важные методы - движение
Видео: Запрограммируйте свою игру 2048 с Java !: 8 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:47
Автор: PranP1Мой (Неполный) SiteFollow Еще от автора:
Я люблю игру 2048. И вот я решил запрограммировать свою версию.
Она очень похожа на настоящую игру, но собственное программирование дает мне свободу изменять все, что я хочу, когда захочу. Если мне нужна игра 5x5 вместо обычного 4x4, простое изменение с помощью конструктора Board позволит мне это сделать. Скажем, я хочу усложнить игру, добавляя фишки в положения, которые сделают ее наиболее сложной для игрока, а не случайным образом. Я могу это сделать с помощью простого алгоритма. Хотя я не буду описывать все эти модификации в этом Руководстве, я все же планирую добавлять новые по мере продвижения.
А пока мы запрограммируем вашу типичную игру 2048 года.
Давайте начнем!
(Примечание: для этого руководства требуется умеренное знание программирования - особенно с Java)
Шаг 1: материалы
Для этого проекта много не понадобится, это просто пошаговое руководство по программированию.
Материалы:
- Ноутбук
- Eclipse (или любая IDE по вашему выбору)
Ага. Вот и все.
Шаг 2. Познакомьтесь с программой - Доска
Я загрузил весь свой код на GitHub - посмотрите здесь:
Я разделил игру на 3 класса: Доска, Плитка и Игра.
Доска:
Описание: Класс Board имеет дело с игровым полем, настраивая массив элементов «Tile», получая текущий счет и наивысший тайл, а также помещая массив в строку (которая будет использоваться позже в «игре»). Большая часть логики также находится здесь, класс, предоставляющий методы для создания 2 и 4 в случайных местах, перемещения вверх, вниз, влево и вправо и сообщения игрокам, когда игра окончена.
Конструкторы:
/ * Конструктор по умолчанию для Board - устанавливает матрицу 4x4 * /
общественная доска () {…}
/ * Конструктор платы - устанавливает матрицу с заданным размером сетки * /
public Board (int grids) {…}
Методы:
/ * Метод получения, возвращающий плату * /
public Tile getBoard () {…}
/ * Метод получения, возвращающий счет * /
public int getScore () {…}
/ * Находит самый высокий тайл на доске и возвращает его * /
public int getHighTile () {…}
/ * Распечатываем плату на консоль - для тестирования * /
public void print () {…}
/ * Возвращает плату в виде строки - используется в графическом интерфейсе * /
общедоступная строка toString () {…}
/ * Создает 2 (или 4) на пустом месте в тот момент, когда делается ход * /
public void spawn () {…}
/ * Проверяет, полностью ли доска затемнена, и если да, то подталкивает игроков к перезагрузке * /
public boolean blackOut () {…}
/ * Проверяет, окончена ли игра - когда доска затемнена и ни одна из плиток не может объединиться * /
public boolean gameOver () {…}
/ * Вызывается при нажатии 'w' или стрелки вверх - вызывает 'verticalMove' для каждой плитки на доске с параметром 'up' * /
public void up () {…}
/ * Вызывается при нажатии 's' или стрелки вниз - вызывает 'verticalMove' для каждой плитки на доске с параметром 'down' * / public void down () {…}
/ * Вызывается при нажатии 'd' или стрелки вправо - вызывает 'horizontalMove' для каждой плитки на доске с параметром 'right' * / public void right () {…}
/ * Вызывается при нажатии 'a' или стрелки влево - вызывает 'horizontalMove' для каждой плитки на доске с параметром 'left' * /
public void left () {…}
/ * Сравнивает значения двух плиток вместе, и если они одинаковы или если одно из них равно 0 (обычная плитка) - их значения добавляются (при условии, что плитки, которые мы сравниваем, являются двумя разными плитками, и они движутся в соответствующем направлении) - рекурсивно перемещается по строке * /
public void horizontalMove (int row, int col, String direction) {…}
/ * Сравнивает значения двух плиток вместе, и если они одинаковы или если одно из них равно 0 (обычная плитка) - их значения добавляются (при условии, что плитки, которые мы сравниваем, являются двумя разными плитками, и они движутся в соответствующем направлении) - рекурсивно перемещается по столбцу * /
public void verticalMove (int row, int col, String direction) {…}
Да, методов много, но не волнуйтесь, большинство из них очень легко понять. Кроме того, класс Board - самый сложный, поэтому все будет относительно просто.
Шаг 3. Знакомство с программой - плитка
Плитка:
Описание: класс Tile работает с отдельными плитками и является самым маленьким из всех классов. Каждая плитка имеет целочисленное значение и цвет. Он имеет два конструктора, которые создают плитки со значением 0 (по умолчанию) или значением #. Эти методы в основном говорят сами за себя, причем большую часть составляют методы «получения» и «установщика».
Конструкторы:
/ * Строит базовый тайл со значением 0 * /
public Tile () {…}
/ * Строит плитку со значением числа * /
общедоступная плитка (целое число) {…}
Методы:
/ * Получает значение тайла * /
public int getValue () {…}
/ * Устанавливает значение плитки - используется при сложении двух плиток * /
public void setValue (целое значение) {…}
/ * Представляет плитку как строку - используется в графическом интерфейсе * /
общедоступная строка toString () {…}
/ * Устанавливает цвет тайла в зависимости от его значения * /
public void setColor () {…}
/ * Получает цвет плитки * /
public void getColor () {…}
Шаг 4. Знакомство с программой - игра
Игра
Описание: класс Game содержит основной метод, большинство методов графического интерфейса и взаимодействия клавиш. Он использует классы Tile и Board и позволяет им работать вместе.
Конструкторы:
Никто
Методы:
/ * настраивает графический интерфейс с соответствующими размерами и добавляет прослушиватель ключей * /
public static void setUpGUI () {…}
/ * Проверяет, нажаты ли клавиши wasd или стрелки, и выполняет соответствующие действия - обновляет JFrame при каждом движении * /
public void keyPressed (KeyEvent e) {…}
/ * Раскрашивает графический интерфейс серией строк, доской, плиток и обеспечивает их перекрашивание по окончании игры * /
public void paint (Графика g) {…}
/ * рисует отдельную плитку - вызывается из метода рисования * /
public void drawTiles (Graphics g, Tile tile, int x, int y) {…}
/ * Основной метод - настраиваем графический интерфейс и запускаем игру * /
public static void main (String args) {…}
Шаг 5: важные методы - движение
Методы движения являются наиболее важными для понимания, но хорошая новость заключается в том, что как только вы поймете вертикальные движения, вы сможете применить это понимание к горизонтальным движениям. Фактически, три метода вертикального перемещения точно такие же, как и три метода горизонтального перемещения, за исключением того, что один перемещается по строкам, а другой - по столбцам. По этой причине давайте сосредоточимся только на методах вертикального перемещения.
private void verticalMove (int row, int col, String direction)
{Плитка начальная = доска [граница] [столбец]; Сравнение плиток = доска [строка] [столбец]; if (initial.getValue () == 0 || initial.getValue () == compare.getValue ()) {if (строка> граница || (direction.equals ("вниз") && (строка <граница))) {int addScore = initial.getValue () + compare.getValue (); если (initial.getValue ()! = 0) {оценка + = addScore; } initial.setValue (addScore); compare.setValue (0); }} else {если (direction.equals ("вниз")) {border--; } else {border ++; } verticalMove (строка, столбец, направление); }}
Вышеупомянутый метод verticalMove вызывается методами «вверх» и «вниз». Давайте посмотрим на метод «вверх».
общественная пустота вверх ()
{для (int я = 0; я <сетки; я ++) {граница = 0; for (int j = 0; j <сетки; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "вверх"); }}}}}
Этот метод просматривает всю доску и вызывает verticalMove для каждой плитки с параметром «вверх». verticalMove затем сравнивает плитку в позициях 'j' и 'i' с плиткой в позициях 'border' и 'i'. Если они равны, они объединяются. Если это не так, плитка границы увеличивается на 1 (поскольку установленный параметр - «вверх»), и снова вызывается verticalMove.
Рекомендуемые:
Сделайте свою собственную одномерную игру в понг: 5 шагов (с изображениями)
Создайте свою собственную 1D-игру в понг: в этом проекте я покажу вам, как я объединил доску из МДФ с кнопками зуммера, светодиодами и Arduino Nano, чтобы создать 1D-игру в понг, в которую действительно интересно играть. Попутно я покажу вам, как создать схему электроники и как различать
Цифровые шахматы - отслеживайте свою игру в шахматы онлайн: 5 шагов
Цифровые шахматы - отслеживайте свою игру в шахматы онлайн: я много играл в шахматы с детства, и, поскольку в Интернете есть огромное количество веб-сайтов, на которых можно играть в шахматы против компьютеров или живых соперников, я ни разу не нашел веб-сайт который отслеживает вашу игру в шахматы, в которую вы на самом деле играете
Создайте свою первую гоночную игру: 10 шагов
Создайте свою первую гоночную игру: если вы написали код на Python и хотели написать игру, которая может быть у вас на Pygame Zero. В этом уроке мы напишем простую гоночную игру
Напишите свою игру в крестики-нолики на Java: 6 шагов
Напишите свою собственную игру в крестики-нолики на Java: я уверен, что все вы знаете о классической игре «Крестики-нолики». Крестики-нолики были популярной игрой, в которую я играл со своими друзьями с младших школьных лет. Меня всегда восхищала простота игры. На первом курсе мой
Запрограммируйте свой компьютер на автоматическое выключение, назначив время, в которое вы хотите это сделать: 4 шага
Запрограммируйте свой компьютер на автоматическое выключение, назначив, в какое время вы хотите, чтобы это сделать: эй, это еще одна инструкция из моей повседневной жизни … в прошлый раз мне пришлось загрузить много программного обеспечения на свой компьютер, и я должен был позволить ему загрузиться в течение ночи, я не хотел, чтобы мой компьютер оставался включенным всю ночь после завершения загрузки и в