/
Xakka
/
C7
Обзор
Документация
Войти
/
Xakka
/
C7
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/gui/cli/front.c
114 строк
4 KB
moshedur
master: release 1.0
04 янв 2025, 23:17
04 янв 2025, 23:17
43e8b0d
Код
Авторство
О чём код?
#include "front.h" /** * Печать основных экранных элементов игры */ void print_overlay(void) { print_rectangle(0, BOARD_N + 1, 3, BOARD_M + 4); // Рамка основного поля print_rectangle(0, BOARD_N + 1, BOARD_M + 5, BOARD_M + HUD_WIDTH + 6); // Рамка дополнительного поля print_rectangle(1, 4, BOARD_M + 6, BOARD_M + HUD_WIDTH + 5); // Рамка фигуры print_rectangle(5, 7, BOARD_M + 6, BOARD_M + HUD_WIDTH + 5); // Рамка очков print_rectangle(8, 10, BOARD_M + 6, BOARD_M + HUD_WIDTH + 5); // Рамка макс. очков print_rectangle(11, 13, BOARD_M + 6, BOARD_M + HUD_WIDTH + 5); // Рамка уровня MVPRINTW(1, BOARD_M + 10, "NEXT"); MVPRINTW(5, BOARD_M + 10, "SCORE"); MVPRINTW(8, BOARD_M + 8, "MAX SCORE"); MVPRINTW(11, BOARD_M + 10, "LEVEL"); } /** * Печать прямоугольной рамки * @param top_y верхняя y-координата * @param bottom_y нижняя y-координата * @param left_x левая x-координата * @param right_x правая x-координата */ void print_rectangle(int top_y, int bottom_y, int left_x, int right_x) { MVADDCH(top_y, left_x, ACS_ULCORNER); int i = left_x + 1; for (; i < right_x; i++) { MVADDCH(top_y, i, ACS_HLINE); } MVADDCH(top_y, i, ACS_URCORNER); for (int i = top_y + 1; i < bottom_y; i++) { MVADDCH(i, left_x, ACS_VLINE); MVADDCH(i, right_x, ACS_VLINE); } MVADDCH(bottom_y, left_x, ACS_LLCORNER); i = left_x + 1; for (; i < right_x; i++) { MVADDCH(bottom_y, i, ACS_HLINE); } MVADDCH(bottom_y, i, ACS_LRCORNER); } /** * Печать игровых данных * @param game_info указатель на структуру с игровой информацией */ void print_screen(GameInfo_t *game_info) { updateCurrentState(); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLUMNS; j++) { attrset(COLOR_PAIR(0)); if (game_info->field[i][j] == 0) { MVPRINTW(i + 1, j, "%c", '.'); } else if (game_info->field[i][j] == 9) { } else { attrset(COLOR_PAIR(game_info->field[i][j])); MVPRINTW(i + 1, j, "%c", '#'); } } } for (int i = 0; i < 2; i++) { for (int j = 0; j < 4; j++) { MVPRINTW(i + 2, j + 20, "%c", ' '); } } MVPRINTW(6, 18, " "); MVPRINTW(6, 18, "%d", game_info->score); MVPRINTW(9, 18, "%d", game_info->high_score); MVPRINTW(12, 18, " "); MVPRINTW(12, 18, "%d", game_info->level); print_figure(game_info->current, 0, 0); print_figure(game_info->next, 12, 1); if (game_info->state == START || game_info->state == GAMEOVER || game_info->state == PAUSE) { if (game_info->state == GAMEOVER || game_info->state == START) { if (game_info->state != START) { MVPRINTW(15, 16, "%s", " GAME OVER "); } else { MVPRINTW(15, 16, "%s", " "); } MVPRINTW(17, 16, "%s", " Press START "); } else { MVPRINTW(15, 16, "%s", " PAUSE "); MVPRINTW(17, 16, "%s", " Press PAUSE "); } MVPRINTW(18, 16, "%s", " to begin "); } else { MVPRINTW(15, 16, "%s", " "); MVPRINTW(17, 16, "%s", " "); MVPRINTW(18, 16, "%s", " "); } } /** * Печать фигуры * @param figure фигура * @param x x-координата * @param y у-координата */ void print_figure(Figure *figure, int x, int y) { for (int i = 0; i < F_SIZE; i++) { for (int j = 0; j < F_SIZE; j++) { attrset(COLOR_PAIR(0)); if (figure->matrix[i][j] != 0) { attrset(COLOR_PAIR(figure->matrix[i][j])); MVPRINTW(i + 1 + figure->y + y, j + 1 + figure->x + x, "%c", '#'); } } } }