Video Thumbnail

Язык С++ - Урок 26 - Пишем игру 2048.

Begin End14:05
https://www.youtube.com/watch?v=kxjj89Sf45M

Содержание

Краткое резюме

  • Создаётся консольная версия игры 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!» 🎮


Основной код и ссылки на остальные уроки автор оставил в описании видео.