s21_tetris/materials/library-specification_RUS.md
2025-06-16 09:04:18 +00:00

40 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Спецификация для библиотеки игры из коллекции игр BrickGame
Это задание является первым из серии BrickGame. Всего будет четыре проекта, в каждом — своя игра и свои технологии. Но помимо разработки новых проектов, необходимо будет поддерживать и старые игры, и добавлять поддержку новых игр в старые проекты. В этот раз интерфейс будет консольным, в следующем — десктопный, и так далее. Для того чтобы поддерживать старые и новые игры, необходимо заранее определиться, как будет устроено АПИ интерфейсов и библиотек, чтобы в дальнейшем не приходилось переписывать уже сданные проекты.
Игровое поле представляется, как матрица размерностью десять на двадцать. Каждый элемент матрицы соответствует «пикселю» игрового поля и может находиться в одном из двух состояний: пустой и заполненный. Кроме игрового поля, у каждой игры есть дополнительная информация, которая выводится в боковой панели справа от игрового поля. Для дополнительной информации, не используемой во время игры, следует предусмотреть заглушки.
Каждая библиотека с игрой должна иметь функцию, принимающую на вход пользовательский ввод. У консоли имеется восемь физических кнопок: начало игры, пауза, завершение игры, действие и четыре стрелочки.
Функция `userInput` принимает на вход пользовательское действие `action` и дополнительный параметр `hold`, который отвечает за зажатие клавиши.
Функция `updateCurrentState` предназначена для получения данных для отрисовки в интерфейсе. Она возвращает структуру, содержащую информацию о текущем состоянии игры. Например, для тетриса истечение таймера приводит к смещению фигуры вниз на один ряд. Эта функция должна вызываться из интерфейса с некоторой периодичностью для поддержания интерфейса в актуальном состоянии.
```c
typedef enum {
Start,
Pause,
Terminate,
Left,
Right,
Up,
Down,
Action
} UserAction_t;
typedef struct {
int **field;
int **next;
int score;
int high_score;
int level;
int speed;
int pause;
} GameInfo_t;
void userInput(UserAction_t action, bool hold);
GameInfo_t updateCurrentState();
```
Обрати внимание, что информация о текущем состоянии игры `GameInfo_t` может быть представлена внутри библиотеки игры статическим объектом.