Conheça a iniciativa da Biblioteca dos Desenvolvedores  
Índice da Biblioteca  
Área dos Usuários  
Fórum de Discussão  
Forúm
 
 

FUNÇÃO int makecol(int,int,int)

Durante a declaração de algumas funções no Allegro você vai perceber que existe um argumento responsável por identificar a cor. Dependendo do argumento a função altera a cor do fundo da imagem, do fundo do texto ou do próprio texto.

Todas as funções que pedirem a definição de uma cor no argumento nós iremos utilizar o a função makecol e seguir a tabela de cores RGB.

É importante saber que se você quiser um fundo transparente ao invés de usar a função makecol utilize o valor -1 no argumento.

Dessa forma você pode usar qualquer cor na fonte e para a cor do fundo da fonte você poderá utilizar a transparência (-1).


Essa função transforma o valor RGB em um valor inteiro responsável por identificar a cor que queremos utilizar. As cores RGB são formadas por uma combinação de 3 valores. Como você pode notar, ela é composta de 3 trios de valores separados por uma vírgula.

Exemplo: makecol( 000, 000, 000 );

O primeiro trio significa a "quantidade" de vermelho colocada nesta cor, o "R", de "Red".
O segundo trio é a “quantidade” de verde, "G", de "Green".
O terceiro trio é a “quantidade” de azul, "B" de "Blue".
Por isso este tipo de "colorido" é chamado RGB.

Você pode criar sua própria cor, variando estes valores. Em cada trio o valor mínimo é de 000 e o valor máximo de acordo com a tabela RGB é de 255.

Quanto maior o número mais clara é a cor que você está criando. Deste modo, makecol(000,000,000) representa preto e makecol(255,255,255), branco.

Para um melhor entendimento veremos em seguida um exemplo simples da função makecol.


CÓDIGO...

#include <allegro.h>

int main()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   // Texto em Vermelho com fundo transparente
   textprintf_ex(screen,font,0,0,makecol(255,0,0),-1, "VERMELHO");

   // Texto em Verde com fundo transparente
   textprintf_ex(screen,font,0,10,makecol(0,255,0),-1,"VERDE");

   // Texto em Azul com fundo transparente
   textprintf_ex(screen,font,0,20,makecol(0,0,255),-1,"AZUL");

   while(!key[KEY_ESC])
   {
      //Código
   }

   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO

O exemplo acima imprime 3 textos na tela. Cada texto corresponde a cor da fonte.
A única coisa que interessa para nós na função textprintf_ex por enquanto é o argumento de definição de cores.

void textprintf_ex(BITMAP *bmp, const FONT *f, int x, int y, int color, int bg, const char *fmt, ...);

int color: Altera a cor da fonte
int bg: Altera a cor do fundo da fonte.

Nesse exemplo usamos a cor do fundo transparente, -1. Poderiamos usar a função makecol novamente sem nenhum problema.

Para o texto em VERMELHO: Lembre-se que o primeiro trio corresponde a cor vermelha da tabela RGB (R = Red (Vermelho)). Como eu quero uma cor do tipo vermelho claro eu setei o valor do trio que corresponde o vermelho no máximo (255). Para escurecer diminua o valor do trio correspondente a cor.

Para o texto em VERDE: Lembre-se que o segundo trio corresponde a cor verde da tabela RGB (G = Green (Verde)). Como eu quero uma cor do tipo verde claro eu setei o valor do trio que corresponde o verde no máximo (255). Para escurecer diminua o valor do trio correspondente a cor.

Para o texto em AZUL: Lembre-se que o terceiro trio corresponde a cor azul da tabela RGB (B = Blue (Azul)). Como eu quero uma cor do tipo azul claro eu setei o valor do trio que corresponde o azul no máximo (255). Para escurecer diminua o valor do trio correspondente a cor.




VARIAÇÕES DA FUNÇÃO int makecol(int,int,int)

Existem outros tipos de variações da função makecol. Por exemplo:

int makecol8(int r, int g, int b);
int makecol15(int r, int g, int b);
int makecol16(int r, int g, int b);
int makecol24(int r, int g, int b);
int makecol32(int r, int g, int b);
int makecol_depth(int color_depth, int r, int g, int b);


Todas elas funcionam exatamente como a função makecol. No entanto, cada uma dessas funções deixa claro que serve apenas para um tipo de profundidade de cores, um tipo de pallet. 8, 15, 16, 24 e 32 bits.

Pallet é a paleta de cores ou nome que é dado a profundidade de cores que você está utilizando no jogo. No caso do exemplo acima usamos pallet de 32 bits. Nesse caso poderíamos usar o makecol32 ao invés de makecol. Mas como makecol32 trata-se de uma função muito especifica utilizamos somente o makecol porque é uma função mais genérica e funciona para todos os tipos de pallets.

Imagine o seu jogo com centenas de códigos usando a função makecol8 em todas as funções. Agora você quer melhorar os gráficos para 32 bits. Você terá que alterar linha por linha a função para makecol32 ou makecol.

MASSSS....... nós temos a função makecol_depth como uma segunda solução.

Diferença da função makecol para makecol_depth:
makecol_depth: Você precisa especificar o pallet de cores antes de especificar as cores RGB.

Exemplo:
int makecol_depth(32, 255, 000, 000);

32 bits de profundidade e a cor do texto será vermelho.

makecol: Você não precisa especificar a profundidade de cores porque a função identifica automaticamente.

Abaixo segue um exemplo da função makecol_depth.


CÓDIGO...
#include <allegro.h>

//Definição da profundidade de cores
const int iPallet = 32;

int main()
{
   allegro_init();
   install_keyboard();
   set_color_depth(iPallet); //Seta a profundidade de cores do video

   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
   
   // Texto em Vermelho com fundo transparente
   textprintf_ex(screen,font,0,0,makecol_depth(iPallet,255,0,0),-1, "VERMELHO");

   // Texto em Verde com fundo transparente
   textprintf_ex(screen,font,0,10,makecol_depth(iPallet,0,255,0),-1,"VERDE");

   // Texto em Azul com fundo transparente
   textprintf_ex(screen,font,0,20,makecol_depth(iPallet,0,0,255),-1,"AZUL");

   while(!key[KEY_ESC])
   {
      //Código
   }

   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO...

O resultado do exemplo acima é exatamente igual ao exemplo anterior com a função makecol. O que muda é a forma que utilizamos a função no código.

Note que utilizamos uma variável global constante do tipo inteiro para definir a profundidade de cores que iremos utilizar durante o desenvolvimento do jogo. Se eventualmente precisarmos alterar a qualidade das imagens é só alterar o valor da variável. Dessa forma, a função torna-se genérica.

Para facilitar a visualização e o aprendizado segue abaixo uma tabela de cores RGB.


TABELA DE CORES RGB

Snow 255 250 250   NavajoWhite4 139 121 94   Gold4 139 117 0
GhostWhite 248 248 255   LemonChiffon1 255 250 205   Goldenrod1 255 193 37
WhiteSmoke 245 245 245   LemonChiffon2 238 233 191   Goldenrod2 238 180 34
Gainsboro 220 220 220   LemonChiffon3 205 201 165   Goldenrod3 205 155 29
FloralWhite 255 250 240   LemonChiffon4 139 137 112   Goldenrod4 139 105 20
OldLace 253 245 230   Cornsilk1 255 248 220   DarkGoldenrod1 255 185 15
Linen 250 240 230   Cornsilk2 238 232 205   DarkGoldenrod2 238 173 14
AntiqueWhite 250 235 215   Cornsilk3 205 200 177   DarkGoldenrod3 205 149 12
PapayaWhip 255 239 213   Cornsilk4 139 136 120   DarkGoldenrod4 139 101 8
BlanchedAlmond 255 235 205   Ivory1 255 255 240   RosyBrown1 255 193 193
Bisque 255 228 196   Ivory2 238 238 224   RosyBrown2 238 180 180
PeachPuff 255 218 185   Ivory3 205 205 193   RosyBrown3 205 155 155
NavajoWhite 255 222 173   Ivory4 139 139 131   RosyBrown4 139 105 105
Moccasin 255 228 181   Honeydew1 240 255 240   IndianRed1 255 106 106
Cornsilk 255 248 220   Honeydew2 224 238 224   IndianRed2 238 99 99
Ivory 255 255 240   Honeydew3 193 205 193   IndianRed3 205 85 85
LemonChiffon 255 250 205   Honeydew4 131 139 131   IndianRed4 139 58 58
Seashell 255 245 238   LavenderBlush1 255 240 245   Sienna1 255 130 71
Honeydew 240 255 240   LavenderBlush2 238 224 229   Sienna2 238 121 66
MintCream 245 255 250   LavenderBlush3 205 193 197   Sienna3 205 104 57
Azure 240 255 255   LavenderBlush4 139 131 134   Sienna4 139 71 38
AliceBlue 240 248 255   MistyRose1 255 228 225   Burlywood1 255 211 155
lavender 230 230 250   MistyRose2 238 213 210   Burlywood2 238 197 145
LavenderBlush 255 240 245   MistyRose3 205 183 181   Burlywood3 205 170 125
MistyRose 255 228 225   MistyRose4 139 125 123   Burlywood4 139 115 85
White 255 255 255   Azure1 240 255 255   Wheat1 255 231 186
Black 0 0 0   Azure2 224 238 238   Wheat2 238 216 174
DarkSlateGray 47 79 79   Azure3 193 205 205   Wheat3 205 186 150
DimGrey 105 105 105   Azure4 131 139 139   Wheat4 139 126 102
SlateGrey 112 128 144   SlateBlue1 131 111 255   Tan1 255 165 79
LightSlateGray 119 136 153   SlateBlue2 122 103 238   Tan2 238 154 73
Grey 190 190 190   SlateBlue3 105 89 205   Tan3 205 133 63
LightGray 211 211 211   SlateBlue4 71 60 139   Tan4 139 90 43
MidnightBlue 25 25 112   RoyalBlue1 72 118 255   Chocolate1 255 127 36
NavyBlue (Navy) 0 0 128   RoyalBlue2 67 110 238   Chocolate2 238 118 33
CornflowerBlue 100 149 237   RoyalBlue3 58 95 205   Chocolate3 205 102 29
DarkSlateBlue 72 61 139   RoyalBlue4 39 64 139   Chocolate4 139 69 19
SlateBlue 106 90 205   Blue1 0 0 255   Firebrick1 255 48 48
MediumSlateBlue 123 104 238   Blue2 0 0 238   Firebrick2 238 44 44
LightSlateBlue 132 112 255   Blue3 0 0 205   Firebrick3 205 38 38
MediumBlue 0 0 205   Blue4 0 0 139   Firebrick4 139 26 26
RoyalBlue 65 105 225   DodgerBlue1 30 144 255   Brown1 255 64 64
Blue 0 0 255   DodgerBlue2 28 134 238   Brown2 238 59 59
DodgerBlue 30 144 255   DodgerBlue3 24 116 205   Brown3 205 51 51
DeepSkyBlue 0 191 255   DodgerBlue4 16 78 139   Brown4 139 35 35
SkyBlue 135 206 235   SteelBlue1 99 184 255   Salmon1 255 140 105
LightSkyBlue 135 206 250   SteelBlue2 92 172 238   Salmon2 238 130 98
SteelBlue 70 130 180   SteelBlue3 79 148 205   Salmon3 205 112 84
LightSteelBlue 176 196 222   SteelBlue4 54 100 139   Salmon4 139 76 57
LightBlue 173 216 230   DeepSkyBlue1 0 191 255   LightSalmon1 255 160 122
PowderBlue 176 224 230   DeepSkyBlue2 0 178 238   LightSalmon2 238 149 114
PaleTurquoise 175 238 238   DeepSkyBlue3 0 154 205   LightSalmon3 205 129 98
DarkTurquoise 0 206 209   DeepSkyBlue4 0 104 139   LightSalmon4 139 87 66
MediumTurquoise 72 209 204   SkyBlue1 135 206 255   Orange1 255 165 0
Turquoise 64 224 208   SkyBlue2 126 192 238   Orange2 238 154 0
Cyan 0 255 255   SkyBlue3 108 166 205   Orange3 205 133 0
LightCyan 224 255 255   SkyBlue4 74 112 139   Orange4 139 90 0
CadetBlue 95 158 160   LightSkyBlue1 176 226 255   DarkOrange1 255 127 0
MediumAquamarine 102 205 170   LightSkyBlue2 164 211 238   DarkOrange2 238 118 0
Aquamarine 127 255 212   LightSkyBlue3 141 182 205   DarkOrange3 205 102 0
DarkGreen 0 100 0   LightSkyBlue4 96 123 139   DarkOrange4 139 69 0
DarkOliveGreen 85 107 47   SlateGray1 198 226 255   Coral1 255 114 86
DarkSeaGreen 143 188 143   SlateGray2 185 211 238   Coral2 238 106 80
SeaGreen 46 139 87   SlateGray3 159 182 205   Coral3 205 91 69
MediumSeaGreen 60 179 113   SlateGray4 108 123 139   Coral4 139 62 47
LightSeaGreen 32 178 170   LightSteelBlue1 202 225 255   Tomato1 255 99 71
PaleGreen 152 251 152   LightSteelBlue2 188 210 238   Tomato2 238 92 66
SpringGreen 0 255 127   LightSteelBlue3 162 181 205   Tomato3 205 79 57
LawnGreen 124 252 0   LightSteelBlue4 110 123 139   Tomato4 139 54 38
Green 0 255 0   LightBlue1 191 239 255   OrangeRed1 255 69 0
Chartreuse 127 255 0   LightBlue2 178 223 238   OrangeRed2 238 64 0
MediumSpringGreen 0 250 154   LightBlue3 154 192 205   OrangeRed3 205 55 0
GreenYellow 173 255 47   LightBlue4 104 131 139   OrangeRed4 139 37 0
LimeGreen 50 205 50   LightCyan1 224 255 255   Red1 255 0 0
YellowGreen 154 205 50   LightCyan2 209 238 238   Red2 238 0 0
ForestGreen 34 139 34   LightCyan3 180 205 205   Red3 205 0 0
OliveDrab 107 142 35   LightCyan4 122 139 139   Red4 139 0 0
DarkKhaki 189 183 107   PaleTurquoise1 187 255 255   DeepPink1 255 20 147
Khaki 240 230 140   PaleTurquoise2 174 238 238   DeepPink2 238 18 137
PaleGoldenrod 238 232 170   PaleTurquoise3 150 205 205   DeepPink3 205 16 118
LightGoldenrodYellow 250 250 210   PaleTurquoise4 102 139 139   DeepPink4 139 10 80
LightYellow 255 255 224   CadetBlue1 152 245 255   HotPink1 255 110 180
Yellow 255 255 0   CadetBlue2 142 229 238   HotPink2 238 106 167
Gold 255 215 0   CadetBlue3 122 197 205   HotPink3 205 96 144
LightGoldenrod 238 221 130   CadetBlue4 83 134 139   HotPink4 139 58 98
goldenrod 218 165 32   Turquoise1 0 245 255   Pink1 255 181 197
DarkGoldenrod 184 134 11   Turquoise2 0 229 238   Pink2 238 169 184
RosyBrown 188 143 143   Turquoise3 0 197 205   Pink3 205 145 158
IndianRed 205 92 92   Turquoise4 0 134 139   Pink4 139 99 108
SaddleBrown 139 69 19   Cyan1 0 255 255   LightPink1 255 174 185
Sienna 160 82 45   Cyan2 0 238 238   LightPink2 238 162 173
Peru 205 133 63   Cyan3 0 205 205   LightPink3 205 140 149
Burlywood 222 184 135   Cyan4 0 139 139   LightPink4 139 95 101
Beige 245 245 220   DarkSlateGray1 151 255 255   PaleVioletRed1 255 130 171
Wheat 245 222 179   DarkSlateGray2 141 238 238   PaleVioletRed2 238 121 159
SandyBrown 244 164 96   DarkSlateGray3 121 205 205   PaleVioletRed3 205 104 137
Tan 210 180 140   DarkSlateGray4 82 139 139   PaleVioletRed4 139 71 93
Chocolate 210 105 30   Aquamarine1 127 255 212   Maroon1 255 52 179
Firebrick 178 34 34   Aquamarine2 118 238 198   Maroon2 238 48 167
Brown 165 42 42   Aquamarine3 102 205 170   Maroon3 205 41 144
DarkSalmon 233 150 122   Aquamarine4 69 139 116   Maroon4 139 28 98
Salmon 250 128 114   DarkSeaGreen1 193 255 193   VioletRed1 255 62 150
LightSalmon 255 160 122   DarkSeaGreen2 180 238 180   VioletRed2 238 58 140
Orange 255 165 0   DarkSeaGreen3 155 205 155   VioletRed3 205 50 120
DarkOrange 255 140 0   DarkSeaGreen4 105 139 105   VioletRed4 139 34 82
Coral 255 127 80   SeaGreen1 84 255 159   Magenta1 255 0 255
LightCoral 240 128 128   SeaGreen2 78 238 148   Magenta2 238 0 238
Tomato 255 99 71   SeaGreen3 67 205 128   Magenta3 205 0 205
OrangeRed 255 69 0   SeaGreen4 46 139 87   Magenta4 139 0 139
Red 255 0 0   PaleGreen1 154 255 154   Orchid1 255 131 250
HotPink 255 105 180   PaleGreen2 144 238 144   Orchid2 238 122 233
DeepPink 255 20 147   PaleGreen3 124 205 124   Orchid3 205 105 201
Pink 255 192 203   PaleGreen4 84 139 84   Orchid4 139 71 137
LightPink 255 182 193   SpringGreen1 0 255 127   Plum1 255 187 255
PaleVioletRed 219 112 147   SpringGreen2 0 238 118   Plum2 238 174 238
Maroon 176 48 96   SpringGreen3 0 205 102   Plum3 205 150 205
MediumVioletRed 199 21 133   SpringGreen4 0 139 69   Plum4 139 102 139
VioletRed 208 32 144   Green1 0 255 0   MediumOrchid1 224 102 255
Magenta 255 0 255   Green2 0 238 0   MediumOrchid2 209 95 238
Violet 238 130 238   Green3 0 205 0   MediumOrchid3 180 82 205
Plum 221 160 221   Green4 0 139 0   MediumOrchid4 122 55 139
Orchid 218 112 214   Chartreuse1 127 255 0   DarkOrchid1 191 62 255
MediumOrchid 186 85 211   Chartreuse2 118 238 0   DarkOrchid2 178 58 238
DarkOrchid 153 50 204   Chartreuse3 102 205 0   DarkOrchid3 154 50 205
DarkViolet 148 0 211   Chartreuse4 69 139 0   DarkOrchid4 104 34 139
BlueViolet 138 43 226   OliveDrab1 192 255 62   Purple1 155 48 255
Purple 160 32 240   OliveDrab2 179 238 58   Purple2 145 44 238
MediumPurple 147 112 219   OliveDrab3 154 205 50   Purple3 125 38 205
Thistle 216 191 216   OliveDrab4 105 139 34   Purple4 85 26 139
Snow1 255 250 250   DarkOliveGreen1 202 255 112   MediumPurple1 171 130 255
Snow2 238 233 233   DarkOliveGreen2 188 238 104   MediumPurple2 159 121 238
Snow3 205 201 201   DarkOliveGreen3 162 205 90   MediumPurple3 137 104 205
Snow4 139 137 137   DarkOliveGreen4 110 139 61   MediumPurple4 93 71 139
Seashell1 255 245 238   Khaki1 255 246 143   Thistle1 255 225 255
Seashell2 238 229 222   Khaki2 238 230 133   Thistle2 238 210 238
Seashell3 205 197 191   Khaki3 205 198 115   Thistle3 205 181 205
Seashell4 139 134 130   Khaki4 139 134 78   Thistle4 139 123 139
AntiqueWhite1 255 239 219   LightGoldenrod1 255 236 139   grey11 28 28 28
AntiqueWhite2 238 223 204   LightGoldenrod2 238 220 130   grey21 54 54 54
AntiqueWhite3 205 192 176   LightGoldenrod3 205 190 112   grey31 79 79 79
AntiqueWhite4 139 131 120   LightGoldenrod4 139 129 76   grey41 105 105 105
Bisque1 255 228 196   LightYellow1 255 255 224   grey51 130 130 130
Bisque2 238 213 183   LightYellow2 238 238 209   grey61 156 156 156
Bisque3 205 183 158   LightYellow3 205 205 180   grey71 181 181 181
Bisque4 139 125 107   LightYellow4 139 139 122   gray81 207 207 207
PeachPuff1 255 218 185   Yellow1 255 255 0   gray91 232 232 232
PeachPuff2 238 203 173   Yellow2 238 238 0   DarkGrey 169 169 169
PeachPuff3 205 175 149   Yellow3 205 205 0   DarkBlue 0 0 139
PeachPuff4 139 119 101   Yellow4 139 139 0   DarkCyan 0 139 139
NavajoWhite1 255 222 173   Gold1 255 215 0   DarkMagenta 139 0 139
NavajoWhite2 238 207 161   Gold2 238 201 0   DarkRed 139 0 0
NavajoWhite3 205 179 139   Gold3 205 173 0   LightGreen 144 238 144


Caro leitor, chegamos ao fim do entendimento da função makecol.
Se você encontrou alguma dificuldade no entendimento desse artigo favor entrar em contato pelo forum.

Abraço - BDJogos



Contribuidor
Bruno A. Rovela
19/06/2007

Voltar

 
 

01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com a Lei Brasileira de Direitos Autorais.