-
Notifications
You must be signed in to change notification settings - Fork 1
/
draw.c
154 lines (102 loc) · 2.81 KB
/
draw.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <curses.h>
#include "fcurses.h"
#include "draw.h"
#include "types.h"
/*
* Desenha uma linha de algo
* n é a quantidade de espaços
*/
void PrintLine(unsigned char y, unsigned char x, short int cor, short int n) {
move(y, x);
SetColor(COLOR_WHITE, cor, A_BOLD);
for (; n > 0; n--)
printw(" ");
}
/*
* Desenha uma coluna de algo
* n é a quantidade de espaços
*/
void PrintColumn(unsigned char y, unsigned char x, short int cor, short int n){
SetColor(COLOR_WHITE, cor, A_BOLD);
for( ; n > 0; n--){
move(y++, x);
printw(" ");
}
}
/*
* Desenha um buraco na tela inicial de tamanho n
*/
void PrintHole(unsigned char y, unsigned char x, short int cor, short int n){
short int w = (n / 2);
for (; w > 0; y++, w--)
PrintLine(y, x, cor, n);
}
/* Imprime uma quantidade i de Diamantes */
void PrintDiamond(short int i) {
for (; i > 0; i--)
mvaddch(21, 76 + 2 * i, ACS_DIAMOND);
}
/*
* Desenha as faixas da rua
*/
void DrawStreetLane(void) {
/* Faixa contínua de cima */
PrintLine(1, 2, COLOR_WHITE, 100);
/* Faixa do meio */
PrintLine(12, 8, COLOR_YELLOW, 10);
PrintLine(12, 28, COLOR_YELLOW, 10);
PrintLine(12, 48, COLOR_YELLOW, 10);
PrintLine(12, 68, COLOR_YELLOW, 10);
PrintLine(12, 88, COLOR_YELLOW, 10);
/* Faixa contínua de baixo */
PrintLine(23, 2, COLOR_WHITE, 100);
}
/*
* Desenha os pontos de vida restantes
*/
void DrawLifePoints(GameData* Game) {
SetColor(COLOR_WHITE, COLOR_BLACK, A_BOLD);
mvprintw(21, 70, "VIDAS = ");
SetColor(COLOR_RED, COLOR_BLACK, A_BOLD);
PrintDiamond(Game->Life);
}
/*
* Imprime o nível atual
*/
void DrawLevelIndicator(GameData* Game) {
SetColor(COLOR_WHITE, COLOR_BLACK, A_BOLD);
mvprintw(21, 87, "LEVEL = ");
SetColor(COLOR_CYAN, COLOR_BLACK, A_BOLD);
printw(" %d", Game->Level);
}
/*
* Desenha o Frata na tela, na posição y e x
*/
void DrawFrata(unsigned char y, unsigned char x) {
PrintLine(y + 2, x, COLOR_MAGENTA, 9);
/* Vidros */
PrintLine(y + 2, x + 9, COLOR_CYAN, 2);
PrintLine(y + 3, x, COLOR_MAGENTA, 13);
PrintLine(y + 3, x + 12, COLOR_YELLOW, 1);
PrintLine(y + 4, x, COLOR_BLUE, 13);
PrintLine(y + 5, x, COLOR_MAGENTA, 13);
/* Rodas */
PrintLine(y + 6, x + 1, COLOR_WHITE, 2);
PrintLine(y + 6, x + 9, COLOR_WHITE, 2);
}
/*
* Desenha os buracos
*/
void DrawHoles(GameData* Game) {
short int i;
for (i = 0; i < Game->nb; i++) {
/*
* Os buracos devem possuir x > frente do Frata para serem desenhados
*/
if (Game->Holes[i].x > FRATA_X) {
PrintLine(Game->Holes[i].y + 3, Game->Holes[i].x, COLOR_RED, 6);
PrintLine(Game->Holes[i].y + 4, Game->Holes[i].x, COLOR_RED, 6);
PrintLine(Game->Holes[i].y + 5, Game->Holes[i].x, COLOR_RED, 6);
}
}
}