Update from 6
This commit is contained in:
parent
a2bd5533ea
commit
8bd653d363
4 changed files with 314 additions and 114 deletions
|
|
@ -1,14 +1,14 @@
|
|||
# Спецификация для библиотеки игры из коллекции игр BrickGame
|
||||
# Specification for the game library from the BrickGame game collection
|
||||
|
||||
Это задание является первым из серии BrickGame. Всего будет четыре проекта, в каждой - своя игра и свои технологии. Но помимо разработки новых проектов, необходимо будет поддерживать и старые игры, и добавлять поддержку новых игр в старые проекты. В этот раз интерфейс будет консольным, в следующем - десктопный, и так далее. Для того чтобы поддерживать старые и новые игры необходимо заранее определиться как будет устроено АПИ интерфейсов и библиотек, чтобы в дальнейшем не приходилось переписывать уже сданные проекты.
|
||||
This task is the first in the BrickGame series. There will be four projects, each with its own game and technology. But in addition to developing new projects, you will also need to support old games and add support for new games to old projects. This time the interface will be console, next time - desktop, and so on. In order to support old and new games, it is necessary to determine in advance how the API of interfaces and libraries will be organized, so that in the future you don't have to rewrite already completed projects.
|
||||
|
||||
Игровое поле представляется как матрица размерностью десять на двадцать. Каждый элемент матрицы соответствует "пикселю" игрового поля и может находится в одном из двух состояний: пустой и заполненный. Кроме игрового поля у каждой игры есть дополнительная информация, которая выводится в боковой панели справа от игрового поля. Для дополнительной информации, не используемой во время игры, предусмотреть заглушки.
|
||||
The game field is a matrix of ten by twenty dimension. Each element of the matrix corresponds to a "pixel" of the game field and can be in one of two states: empty or filled. In addition to the game field, each game has additional information that is displayed in the sidebar to the right of the game field. Provide stubs for additional information that is not used during the game.
|
||||
|
||||
Каждая библиотека с игрой должна иметь функцию, принимающую на вход пользовательский ввод. У консоли имеется восемь физических кнопок: начало игры, пауза, завершение игры, действие и четыре стрелочки.
|
||||
Each game library must have a function that accepts user input. The console has eight physical buttons: start game, pause, end game, action, and four arrows.
|
||||
|
||||
Функция `userInput` принимает на вход пользовательское действие `action` и дополнительный параметр `hold`, который отвечает за зажатие клавиши.
|
||||
The `userInput` function takes as input the user `action` and an additional parameter `hold`, which is responsible for pressing the button.
|
||||
|
||||
Функция `updateCurrentState` предназначена для получения данных для отрисовки в интерфейсе. Она возвращает структуру, содержащую информацию о текущем состоянии игры. Например, для тетриса истечение таймера приводит к смещению фигуры вниз на один ряд. Эта функция должна вызываться из интерфейса с некоторой периодичностью для поддержания интерфейса в актуальном состоянии.
|
||||
The `updateCurrentState` function is intended to get data for rendering in the interface. It returns a structure containing information about the current state of the game. For example, for Tetris, the expiration of the timer causes the piece to move down one row. This function should be called from the interface at some intervals to keep the interface up to date.
|
||||
|
||||
```c
|
||||
typedef enum {
|
||||
|
|
|
|||
38
materials/library-specification_RUS.md
Normal file
38
materials/library-specification_RUS.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Спецификация для библиотеки игры из коллекции игр 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();
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue