147 lines
3.7 KiB
C
147 lines
3.7 KiB
C
#include "frog_frontend.h"
|
|
|
|
void print_overlay(void)
|
|
{
|
|
print_rectangle(0, BOARD_N + 1, 0, BOARD_M + 1);
|
|
print_rectangle(0, BOARD_N + 1, BOARD_M + 2, BOARD_M + HUD_WIDTH + 3);
|
|
|
|
print_rectangle(1, 3, BOARD_M + 3, BOARD_M + HUD_WIDTH + 2);
|
|
print_rectangle(4, 6, BOARD_M + 3, BOARD_M + HUD_WIDTH + 2);
|
|
print_rectangle(7, 9, BOARD_M + 3, BOARD_M + HUD_WIDTH + 2);
|
|
print_rectangle(10, 12, BOARD_M + 3, BOARD_M + HUD_WIDTH + 2);
|
|
|
|
MVPRINTW(2, BOARD_M + 5, "LEVEL");
|
|
MVPRINTW(5, BOARD_M + 5, "SCORE");
|
|
MVPRINTW(8, BOARD_M + 5, "SPEED");
|
|
MVPRINTW(11, BOARD_M + 5, "LIVES");
|
|
|
|
MVPRINTW(BOARD_N / 2, (BOARD_M - INTRO_MESSAGE_LEN) / 2 + 1, INTRO_MESSAGE);
|
|
}
|
|
|
|
void print_levelerror(void)
|
|
{
|
|
clear();
|
|
MVPRINTW(0, 0, "An error occured openning level file!");
|
|
MVPRINTW(2, 0, "Please check ./tests/ directory.");
|
|
MVPRINTW(3, 0, "There should be 5 level files named level_(1-5).txt.");
|
|
MVPRINTW(4, 0, "Also try to open the game nearby ./tests/ directory.");
|
|
MVPRINTW(6, 0, "Press any key to exit.");
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void print_stats(game_stats_t *stats)
|
|
{
|
|
MVPRINTW(2, BOARD_M + 12, "%d", stats->level);
|
|
MVPRINTW(5, BOARD_M + 12, "%d", stats->score);
|
|
MVPRINTW(8, BOARD_M + 12, "%d", stats->speed);
|
|
MVPRINTW(11, BOARD_M + 12, "%d", stats->lives);
|
|
}
|
|
|
|
void print_board(board_t *game, player_pos *frog)
|
|
{
|
|
print_cars(game);
|
|
PRINT_FROG(frog->x, frog->y);
|
|
}
|
|
|
|
void print_cars(board_t *game)
|
|
{
|
|
for(int i = MAP_PADDING + 1; i < BOARD_N - MAP_PADDING + 1; i++)
|
|
{
|
|
if (i % 2 == (MAP_PADDING + 1) % 2)
|
|
{
|
|
for (int j = 1; j < BOARD_M + 1; j++)
|
|
MVADDCH(i, j, ACS_BLOCK);
|
|
}
|
|
else
|
|
{
|
|
for (int j = 1; j < BOARD_M + 1; j++)
|
|
{
|
|
if (game->ways[i - MAP_PADDING - 1][j - 1] == '0')
|
|
MVADDCH(i, j, ' ');
|
|
else
|
|
MVADDCH(i, j, ']');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void print_finished(board_t *game)
|
|
{
|
|
for (int i = 0; i < BOARD_M; i++)
|
|
{
|
|
if (game->finish[i] == '0')
|
|
MVADDCH(1, i + 1, ACS_BLOCK);
|
|
else
|
|
MVADDCH(1, i + 1, ' ');
|
|
}
|
|
}
|
|
void print_banner(game_stats_t *stats)
|
|
{
|
|
banner_t banner;
|
|
|
|
memset(banner.matrix, 0, (BANNER_N + 1) * (BANNER_M + 1));
|
|
|
|
clear();
|
|
|
|
if (!(read_banner(stats, &banner)))
|
|
{
|
|
for (int i = 0; i < BANNER_N; i++)
|
|
for (int j = 0; j < BANNER_M; j++)
|
|
if (banner.matrix[i][j] == '#')
|
|
MVADDCH(i, j, ACS_BLOCK);
|
|
else
|
|
MVADDCH(i, j, ' ');
|
|
refresh();
|
|
napms(2000);
|
|
}
|
|
}
|
|
|
|
int read_banner(game_stats_t *stats, banner_t *banner)
|
|
{
|
|
int rc = SUCCESS;
|
|
FILE *file = NULL;
|
|
|
|
if (stats->lives)
|
|
file = fopen(YOU_WON, "r");
|
|
else
|
|
file = fopen(YOU_LOSE, "r");
|
|
|
|
if (file)
|
|
{
|
|
for (int i = 0; i < BANNER_N - 1 && !rc; i++)
|
|
{
|
|
if (fgets(banner->matrix[i], BANNER_M + 2, file) == NULL)
|
|
rc = ERROR;
|
|
else
|
|
banner->matrix[i][strcspn(banner->matrix[i], "\n")] = '\0';
|
|
}
|
|
|
|
fclose(file);
|
|
}
|
|
else
|
|
rc = ERROR;
|
|
|
|
return rc;
|
|
}
|