null
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (1/18)
Привет! Сегодня начнем писать одну интересную и "залипательную" игру — 2048. Готов? Тогда поехали.
Правила игры:
Игровое поле имеет форму квадрата. Размер стандартного поля — 4x4 плитки. Цель игры — получить плитку номиналом 2048.
1. В каждом раунде появляется плитка номиналом 2 (с вероятностью 90
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (2/18)
Пробовал запускать свою программу? Игровое поле маленькое. Давай это исправим. Для этого нужно
переопределить метод initialize() родительского класса Game. Метод initialize() служит для того, чтобы ты
сам мог задать размер игрового поля, решить, отображать сетку или нет и т.д.
Чтобы задать размер
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (3/18)
Игровой движок мы будем использовать для отображения текущего состояния игры. А для хранения состояния отлично подойдет массив 4x4.
Поэтому создай поле int[][] gameField и инициализируй его при объявлении целочисленным массивом int[][] размером SIDEхSIDE.
По умолчанию ячейки целочисленного массива
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (4/18)
Черный экран как-то не очень смотрится, согласись. Давай это изменим.
В классе Game, а теперь и в классе Game2048, т.к. он унаследован от Game, есть специальный метод
setCellColor(int x, int y, Color color), который красит ячейку с координатами x, y в цвет color.
Список доступных цветов ты найдешь
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (5/18)
Согласно правилам, при запуске игры значения двух случайных клеток должны быть 2 либо 4 с вероятностью 90% и 10% соответственно.
Для выполнения этого условия, создай метод createNewNumber() и вызови его в методе createGame() 2 раза.
Метод createNewNumber():
1) случайным образом выбирает ячейку мат
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (6/18)
Уже намного лучше. Но, думаю, мы можем больше. Давай раскрасим клетки с одинаковыми значениями в одинаковые цвета.
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (7/18)
Исходя из правил игры, мы можем сдвинуть все плитки в одну из 4 сторон: вверх, вниз, вправо, влево.
При этом плитки со значением 2 и больше уходят в одну сторону (сторону сдвига), а пустые — в противоположную.
На данном этапе реализуем сдвиг влево. Для этого нам понадобится приватный метод boolean
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (8/18)
Ты уже умеешь передвигать плитки по полю. Но это не все, что ты можешь делать в данной игре :)
Если при сдвиге две плитки с одинаковым значением "налетают" друг на друга, они соединяются в одну,
а ее значение равно сумме соединившихся плиток. Давай реализуем это.
Условия задачи:
Создай приватный м
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (9/18)
Играть в игру можно используя клавиатуру, а именно — клавиши вверх, вниз, вправо, влево. По нажатию
определенной клавиши должно происходить соответствующее действие (сдвиг, слияние). Чтобы задать действие, необходимо
переопределить метод onKeyPress(Key key) класса Game, где параметром является нажа
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (10/18)
Какие методы вызывать по нажатию клавиш мы уже знаем. Поэтому приступим к их
реализации. Начнем с метода moveLeft().
В методе moveLeft() мы сдвигаем элементы каждой строки матрицы gameField
методом compressRow(int[]), после соединяем их значения с помощью метода mergeRow(int[]), а затем снова сдви
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (11/18)
Метод moveLeft() реализован, но есть еще 3. Предлагаем их реализовать таким способом: если нужно сдвинуть плитки
вниз, берем нашу матрицу gameField, поворачиваем ее на 90 градусов по часовой стрелке (низ становится слева),
сдвигаем влево и разворачиваем матрицу обратно (еще 3 раза поворачиваем матр
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (12/18)
Теперь можно приступать к реализации методов moveRight(), moveUp(), moveDown().
В методе moveRight() повернем матрицу gameFiled два раза по часовой стрелке, затем вызовем moveLeft(),
который уже написан, и снова повернем gameField еще два раза по часовой стрелке. Должно сработать.
В методе moveDo
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (13/18)
Основная логика игры реализована, но не до конца. Исходя из правил и названия игры, она заканчивается
выигрышем, когда значение одной из плиток будет равно 2048.
Поиск максимального значения на игровом поле нужно вынести в отдельный метод int getMaxTileValue(), который будет
возвращать его. Провер
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (14/18)
Отлично! В прошлой части мы выяснили условия, при которых игра выиграна и реализовали их.
Но есть и обратная сторона медали — проигрыш. Если на игровом поле нет плитки со
значением 2048 и нет возможности сделать ход, игроку засчитывается поражение.
Ход можно сделать, если есть хотя бы одна пустая
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (15/18)
Как и о выигрыше, о проигрыше нужно сообщить. Давай это сделаем в отдельном методе void gameOver(),
по аналогии с методом win(). Если игра проиграна, флагу isGameStopped также нужно установить значение true.
В начале метода onKeyPress(Key) выполни проверку, возможен ли ход. Если ход невозможен, вы
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (16/18)
Пришло время узнать, для чего нам нужен флаг isGameStopped. Он необходим для реализации механизма рестарта игры.
Если значение этого флага true — игра остановлена из-за выигрыша или проигрыша. При нажатии клавиши Key.SPACE можно делать рестарт игры.
Рестарт выполняется так же, как и старт новой игр
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (17/18)
Думаю, ты давно заметил строку внизу игрового поля Score: 0. Судя по названию, это подсчет очков :)
Согласно правилам игры, за каждое соединение плиток игровые очки увеличиваются на значение получившейся плитки.
Для реализации этой задачи заведем переменную private int score в классе Game2048.
Ее з
3
Задача
Games,
0 уровень,
2 лекция
Недоступна
Игра 2048 (18/18)
Квест "Games", игра "2048": наши поздравления: игра написана! Предлагаем запустить ее и посмотреть, что получилось. Если есть время и вдохновение, можешь улучшить игру, добавив некоторые "фичи" от себя. Например: изменить размер игрового поля, продолжать игру, даже если найдена плитка со значением 2048...
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ