Содержание
- Краткое резюме
- Создание основы проекта и констант
- Класс вывода на экран
- Класс клеточки
- Игровое поле и инициализация
- Отображение и тесты игрового поля
- Механика перемещения чисел
- Управление ходами и однократное нажатие клавиш
- Объединение чисел и сложение
- Перемещение по всем направлениям
- Генерация новых чисел
- Логика одного хода
- Проверка завершения игры
- Итоги и запуск
Краткое резюме
- Создаётся консольная версия игры 2048 на C++ с использованием классов для игрового поля и клеточек.
- Реализованы базовые механики отображения, перемещения и объединения чисел по правилам игры.
- Добавлена генерация новых чисел в пустых клетках и проверка завершения игры.
- Обеспечена возможность начинать новую игру автоматически при отсутствии возможных ходов.
Создание основы проекта и констант
В начале создаётся консольный проект на C++ с необходимыми модулями. Задаются константы:
- Размер консольного окна (в символах).
- Размер клеточки по высоте и ширине.
- Размер игрового поля (4x4 клетки).
Используется собственный тип данных для вывода символов на экран, а также функция для перемещения курсора в заданные координаты консоли.
Класс вывода на экран
Создан класс, который содержит двумерный буфер символов для консольного вывода. Реализованы методы:
clear()
— заполняет массив пробелами.show()
— выводит буфер на экран, добавляя символ конца строки.
Проверка класса подтверждает корректное отображение заданных символов в нужных позициях.
Класс клеточки
Для визуализации клетки с числом реализован класс клетки:
- Метод
put()
рисует клеточку в буфере вывода, используя '+' на краях. - Если число в клетке не нулевое, оно выводится по центру клетки.
Тестирование показало правильное отображение клетки с числом на экране.
Игровое поле и инициализация
Создан класс игры с основными элементами:
- Буфер экрана
screen
для вывода. - Массив клеточек размером 4x4 — само игровое поле.
Инициализация происходит с установкой всех клеток в значение -1
(граница), чтобы клетки соседствовали корректно. Позиции клеточек рассчитываются и задаются.
Отображение и тесты игрового поля
Метод отображения (show
) простым перебором выводит все клетки на экран. В методе main
добавлен тест с постановкой чисел в некоторые клетки, что имитирует все три варианта поведения смещения цифр в игре 2048:
- Сдвиг в пустую клетку.
- Сдвиг на клетку с таким же числом (для объединения).
- Сдвиг на клетку с отличным числом.
Механика перемещения чисел
Добавлены функции для перемещения чисел внутри массива клеток:
move_val()
— перемещает числа в одномерном массиве клеток, сдвигая их в заданном порядке.- Флаг
moved
показывает, был ли сделан ход (числа изменились).
При реализации сдвига влево, проходится по строкам, а затем вызывается функция сдвига элементов.
Управление ходами и однократное нажатие клавиш
В классе игры добавлен метод work()
для обработки ходов. Для предотвращения многократного срабатывания сделана функция, проверяющая однократное нажатие на кнопку.
В тестах сдвиг влево работает корректно: числа смещаются на пустые позиции.
Объединение чисел и сложение
Усовершенствована функция перемещения:
- Если две соседние клетки содержат одинаковые числа, они складываются.
- Если числа разные, просто происходит сдвиг без объединения.
Таким образом реализуются все три ситуации перемещения в игре.
Перемещение по всем направлениям
Реализовано перемещение чисел не только влево, но и вправо, а также вертикально — вверх и вниз:
- При сдвиге вправо массивы клеток обходятся в обратном порядке.
- Аналогично для вертикальных сдвигов формируются массивы по столбцам.
Тестирование показало корректное движение чисел и сложение во всех четырёх направлениях.
Генерация новых чисел
Добавлены функции генерации чисел:
get_free_cell()
считает количество пустых клеток.get_new_land()
выбирает случайную пустую клетку и ставит туда 2 или 4 (4 с вероятностью 10%).
При старте игры на поле случайно появляются два числа, а после каждого хода — новое число.
Логика одного хода
В конце функции move
добавлен вызов генерации числа, если произошёл ход.
Таким образом игрок видит прогресс и новые цифры появляются в пустых клетках после каждого перемещения.
Проверка завершения игры
Реализована проверка конца игры:
- Если есть пустые клетки — игра продолжается.
- Если нет пустых, проверяется, есть ли пары соседних одинаковых чисел по горизонтали или вертикали.
- Если таких пар нет — игра завершается.
При попытке сделать ход, если ход невозможен, игра автоматически начинается заново.
Итоги и запуск
Игра 2048 полностью реализована в консольном варианте на C++. Игрок может двигать цифры в четыре стороны, числа складываются, появляются новые числа, и реализована проверка на завершение игры.
Это позволяет наслаждаться классической игрой в простом консольном приложении.
«И наконец то мне это удалось — игра работает как задумано, можно играть без проблем и наслаждаться логикой 2048!» 🎮
Основной код и ссылки на остальные уроки автор оставил в описании видео.