00:00 Введение в тетрис Демонстрация игры в тетрис с помощью командной строки. Объяснение функций: вращение фигур обнаружение столкновений подсчет очков. Подчёркивание важности игрового движка для понимания программирования игр. 00:56 Основы игрового движка Игровой движок содержит логику правила и сложные задачи игры. Графика это лишь поверхность которую можно изменить позже. Фокус на игровом цикле обнаружении столкновений и механизме подсчёта очков. 01:53 Создание ресурсов Создание семи фигур тетрамино для игры. Использование одномерных массивов вместо многомерных для представления фигур. Визуализация фигур в виде нитей для наглядности. 03:09 Индексация массивов Объяснение индексации одномерных массивов для вращения фигур. Пример вычисления индекса для поворота на 90 градусов. Уравнения для других углов поворота: 180 и 270 градусов. 07:24 Функция поворота Реализация функции поворота с параметрами x y и r. Возврат индекса с учётом уравнений поворота. 08:20 Создание игрового поля Определение ширины и высоты игрового поля. Использование массива символов без знака для хранения картографической информации. Инициализация массива для игрового поля с условием для границ. 09:19 Рисование в командной строке Использование командной строки как экранного буфера. Установка переменных ширины и высоты экрана. Создание массива символов и захват дескриптора буфера консоли. 10:17 Введение в игровые циклы Игровые циклы основа игрового движка определяющая последовательность событий. Простой игровой цикл для Тетриса включает управление временем пользовательским вводом обновлением игровой логики и отображением на экране. Реализация игрового цикла с флагом окончена для управления состоянием игры. 11:14 Рисование на игровом поле Смещение рисунков на два пикселя для создания границы. Использование массива строк для отображения фигур тетриса и пустого пространства. Индексация массива строк по значениям в массиве полей. 12:59 Основные этапы игрового цикла Управление временем для обеспечения постоянного игрового опыта. Обработка пользовательского ввода без использования событий. Реализация игровой логики: падение фигур определение столкновений подсчёт очков. Отображение результата на экране. 13:23 Обнаружение столкновений в Тетрисе Простота механизма обнаружения столкновений из-за перемещения фигур на одну клетку за раз. Проверка соответствия ячеек массива полей и фигур тетриса. Создание функции для проверки совместимости фигур. 16:11 Реализация функции проверки совместимости Передача идентификатора тетромино текущей ротации и местоположения в массив. Вложенный цикл для проверки совместимости фигур. Преобразование массива тетромино в массив полей для проверки столкновений. 18:05 Проверка подпрограмм перед написанием игры Проверка работы подпрограмм перед реализацией игры. Отображение текущей активной фигуры на экране. Компенсация смещения игрового поля и настройка ширины экрана. 19:30 Настройка ширины экрана Установка ширины экрана на текущее значение плюс 65. Объяснение добавления 65 для корректного отображения фигур тетриса. 19:54 Имитация игрового поля тетриса Использование ASCII для отображения букв a b c d e f и g. Проверка работы программы: тетромино не падает но программа рисует символы. Установка задержки в 50 миллисекунд для имитации игрового тика. 20:56 Ввод данных и управление клавишами Использование getasynckeystate для получения состояния клавиш. Определение четырёх клавиш: влево вправо вниз и Z. Проверка состояния клавиш через массив логических значений. 21:53 Проверка перемещения фигур Проверка положения фрагмента при нажатии левой клавиши. Обновление переменной x при перемещении влево или вправо. Аналогичная проверка для перемещения вниз. 23:42 Оптимизация кода Замена вложенных если на логическое и. Добавление кода для управления поворотом фигуры при нажатии Z. 24:31 Фиксация поворота Установка флажка для определения удерживает ли пользователь клавишу поворота. Ограничение поворота до 90 градусов за раз. 26:14 Управление скоростью падения фигур Настройка скорости падения фигур в зависимости от уровня сложности. Подсчёт игровых тиков и перемещение фигуры вниз при достижении заданной скорости. 28:05 Завершение игры и выбор следующего фрагмента Фиксация текущей фигуры на поле и проверка наличия горизонтальных линий. Выбор следующего фрагмента псевдослучайным образом. Завершение игры если следующий фрагмент не помещается. 30:08 Визуальное вознаграждение за линии 30:50 Цикл и проверка границ 31:46 Присвоение номера элементам 31:54 Использование вектора для линий 32:23 Обновление буфера отображения 32:51 Перемещение фигур 33:21 Проверка работы системы 33:48 Увеличение сложности игры 34:32 Подсчёт очков 35:30 Отображение результата 35:30 Заключение
Источник: rutube.ru