English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Шаг за шагом реализация Tetris на C++

Введение в эксперимент

1.1 Содержание эксперимента

В этом разделе мы анализируем思路 перед дизайном Тетриса и介绍 способ использования библиотеки ncurses.

1.2 Знания по экспериментам

Основы программирования на C++
Использование библиотеки ncurses
Логический дизайн Tetris

1.3 Среда выполнения

терминал xface
компилятор g++
библиотека ncurses

1.4 Кто подходит для этого курса

Этот курс среднего уровня сложности, подходит для студентов с базовыми знаниями C++ и интересующихся разработкой игр и анализом логики.

1.5 Получение кода

git clone https://github.com/Gamerchen/game_zero.git

第二节:подготовка к разработке

2.1 Установка библиотеки ncurses

sudo apt-get update
sudo apt-get install libncurses5-dev

2.2 Компиляция программы

Команда компиляции должна включать опцию -l для включения библиотеки ncurses:

g++ main.c -l ncurses

Третий раздел: экспериментальная теория

3.1 Анализ перед разработкой

Прежде чем начать программирование, нам нужно сначала проанализировать, какие функции необходимо реализовать в программе, и как их можно разделить на модули. В случае с Tetris, первой мыслью должно быть отображение блоков, затем их падение, перемещение влево и вправо, вращение, и, наконец, удаление строк при заполнении уровня. Кроме того, базовая игра Tetris должна иметь функцию подсказки следующего блока.

Таким образом, в нашем программировании мы должны решить следующие проблемы:

Отображение блока
Реализация движения блока
Вращение блока
Удаление строк при заполнении уровня
Подсказка следующего блока

3.2 Основные графические элементы

Каждый блок состоит из четырех box, они падают из центра игры, и могут вращаться, если не сталкиваются с границами и другими блоками.


3.3 Использование библиотеки NCURSES

Проще говоря, NCURSES - это клон CURSES из System V Release 4.0 (SVr4), это библиотека, которую можно свободно конфигурировать, полная совместимость с старыми версиями CURSES, и библиотека, которая позволяет приложениям напрямую контролировать отображение на экране терминала. NCURSES обертывает базовые функции терминала, включает функции создания окон и расширения CURSES базовой библиотеки с помощью Menu, Panel и Form, позволяя создавать приложения, которые содержат одновременно несколько окон (multiple windows), меню (menus), панели (panels) и формы (forms). Окна могут быть управляемы независимо, например, их можно прокручивать (scrollability) или скрывать. Меню (Menus) позволяют пользователям создавать опции команд, что упрощает выполнение команд. А формы (Forms) позволяют пользователям создавать окна для простого ввода и отображения данных. Панели (Panels) являются расширением функции управления окнами NCURSES и могут использоваться для покрытия или堆积 окон.

3.3.1 NCURSES -- с программы "Hello World"

Пример:

#include <ncurses.h>
int main()
{
 initscr(); // Инициализация, вход в режим NCURSES
 printw("Hello World!"); // Вывод "Hello World!" на виртуальный экран
 refresh(); // Запись содержимого виртуального экрана на монитор и обновление
 getch(); // Ожидание ввода пользователя
 endwin(); // Выход из режима NCURSES
 return 0;
}

В данном примере мы介绍了 использование самых базовых функций библиотеки NCURSES, функции которых описаны в комментариях, поэтому мы не будем их повторять.

3.3.2 Механизм окон

При инициализации NCURSES автоматически создается окно с именем stdscr, размером обычно 80 столбцов и 25 строк (размер может варьироваться в зависимости от монитора или видеокарты), кроме того, вы можете создать свои собственные окна с помощью функций системы окон.

Пример: если вызвать следующую функцию:

printw("Hi!");
refresh();

Это выведет "Hi!" в текущей позиции курсора stdscr, вызов функции refresh() обновит только буфер stdscr.

Если вы уже создали окно с именем win и хотите выводить содержимое в этом окне, добавьте перед обычной функцией префикс w, а также измените параметры.

printw(string) // Вывод строки string в текущей позиции курсора stdscr
mvprintw(y, x, string) // Вывод строки string в координате (y, x)
wprintw(win,string)  //Напечатайте строку string в текущем положении курсора окна win
mvwprintw(win,y,x,string)  //Переместите курсор в положение (y,x) окна win и напечатайте строку string
Надеюсь, что после изучения примеров вы уже можете понять различия в функциях по их именам.

3.3.3 функции newwin и box

Создание окна начинается с функции newwin(), которая возвращает указатель на структуру окна, который может быть передан в функции, требующие параметр окна, такие как wprintw().

Однако, созданный нами окно мы не видим, поэтому для его видимости необходимо использовать функцию box() для рисования рамки вокруг уже определенного окна.

Пример:

WINDOW *create_newin(int height, int width, int starty, int startx)
{
 WINDOW *local_win;
 local_win = newin(height, width, starty, startx);
 box(local_win, 0, 0);
 wrefresh(local_win);
 return local_win;
}

Вот и все, что я хотел рассказать о базовом использовании библиотеки NUCRSES, при возникновении проблем в процессе использования все равно необходимо обращаться к соответствующей документации.

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, материал предоставлен пользователями Интернета в порядке добровольного сотрудничества и самостоятельной загрузки. Этот сайт не обладает правами собственности, не производит ручную редактуру и не несет ответственности за связанные с этим юридические последствия. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставления соответствующих доказательств. При подтверждении факта нарушения, этот сайт немедленно удалил涉嫌侵权的内容。

Вам может понравиться