{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Prof.: José Eustáquio Rangel de Queiroz
[email protected]
[email protected]
Carga Horária: 60 horas
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Tela de
Texto

25 linhas e 80 colunas de caracteres
textuais

80 colunas x 25 linhas = 2.000 posições

Tela consistindo de pixels (picture
elements) para a representação de
caracteres textuais e símbolos
2
Utilização do Modo
Gráfico
DSC/CCT/UFCG

Passos para uso no Turbo C++ 3.0 DOS
 Indicação para o compilador dos comandos
gráficos a serem usados
 Identificação do tipo de placa gráfica em uso no
computador
 Inicialização do modo gráfico (Tela Gráfica)
{joseana, rangel}@dsc.ufcg.edu.br
 Indicação para o sistema do local no qual estão
os drivers e fontes gráficas (BGI)
 Encerramento do modo gráfico após a finalização
do traçado gráfico
3
DSC/CCT/UFCG

Utilização do Modo Gráfico
Indicação
para
o
compilador
comandos gráficos a serem usados
dos
 Inclusão da diretiva de compilação
#include <graphics.h>
{joseana, rangel}@dsc.ufcg.edu.br

Identificação do tipo de placa gráfica em
uso no computador
 Declaração de duas variáveis do tipo
integer
int gdriver = DETECT, gmodo;
4
DSC/CCT/UFCG

Utilização do Modo Gráfico
Inicialização do modo gráfico (Tela Gráfica)
e indicação para o sistema do local no qual
se encontram os drivers e fontes gráficas
(BGI)
 Invocação
{joseana, rangel}@dsc.ufcg.edu.br
da função
função main( )
initgraph()
pela
initgraph(&gdriver, &gmodo, “C:\\tc\\bgi”);
5
DSC/CCT/UFCG

Utilização do Modo Gráfico
Encerramento do modo gráfico após a
finalização do traçado gráfico
 Uso recomendado da função getch()
{joseana, rangel}@dsc.ufcg.edu.br
após a(s) chamada(s) à(s) função(ões)
gráfica(s) de interesse

Manutenção
(Pressionar
continuar)
do
traçado
na
qualquer
tecla

Necessidade de inclusão da diretiva
tela
para
#include <conio.h>
6
DSC/CCT/UFCG

Utilização do Modo Gráfico
Encerramento do modo gráfico após a
finalização do traçado gráfico
 Invocação da função closegraph() para
{joseana, rangel}@dsc.ufcg.edu.br
encerramento do modo gráfico
7
DSC/CCT/UFCG

Utilização do Modo Gráfico
Possíveis dificuldades
 Não funcionamento de funções gráficas
por conta da dependência de hardware do
ambiente
gráfico
(Limitações
na
portabilidade do software escrito em C
para processamento gráfico)
{joseana, rangel}@dsc.ufcg.edu.br
 Insucesso no processo de “atrelagem” da
biblioteca gráfica
programas
à
codificação
de
8
DSC/CCT/UFCG

Utilização do Modo Gráfico
Não funcionamento de funções gráficas
por conta da dependência de hardware
 Análise cuidadosa das funções gráficas
usadas em programas escritos por outros
programadores e passíveis de uso para
processamento gráfico de interesse
{joseana, rangel}@dsc.ufcg.edu.br
 Inspeção
tanto das configurações do
hardware gráfico a ser emulado pelos
programas quanto da compatibilidade do
código (léxica, sintática, estrutural) com o
Turbo C++ 3.0
9
DSC/CCT/UFCG

Utilização do Modo Gráfico
Não funcionamento de funções gráficas
por conta da dependência de hardware
 Codificação com instruções, sempre que
{joseana, rangel}@dsc.ufcg.edu.br
possível, de identificação automática de
equipamentos instalados e modos de
funcionamento do hardware emulado pela
aplicação
10
DSC/CCT/UFCG

Utilização do Modo Gráfico
Insucesso no processo de “atrelagem” da
biblioteca gráfica à codificação de
programas
 Verificação passo-a-passo da execução
correta de todos os procedimentos
anteriormente explicitados
{joseana, rangel}@dsc.ufcg.edu.br
 Adoção
de
outra
estratégia
inicialização do modo gráfico
de
11
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Verificação
da localização da biblioteca
gráfica
 Se a biblioteca gráfica se encontrar no
diretório-padrão
{joseana, rangel}@dsc.ufcg.edu.br

Introdução
instrução
na
linha
de
comando
da
tcc nome_do_programa.ext graphics.lib
12
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Distribuição do código criado com o Turbo
C++ 3.0 sem necessidade de inclusão do
arquivo extras à aplicação (I)

Necessidade de conversão do arquivo
EGAVGA.BGI em um arquivo-objeto (.OBJ)
{joseana, rangel}@dsc.ufcg.edu.br
C:\TC\BGI>BGIOBJ EGAVGA
A criação correta implica a indicação do
nome público do driver (EGAVGA_driver)
13
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Distribuição do código criado com o Turbo
C++ 3.0 sem necessidade de inclusão do
arquivo extras à aplicação (II)
{joseana, rangel}@dsc.ufcg.edu.br

Necessidade de conversão do(s) arquivo(s)
de fonte(s) de texto (e.g. GOTH.CHR) em
arquivo(s)-objeto(s) (.OBJ)
C:\TC\BGI>BGIOBJ GOTH
A criação correta implica a indicação do
nome público da fonte (GOTHIC_font)
14
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Distribuição do código criado com o Turbo
C++ 3.0 sem necessidade de inclusão do
arquivo extras à aplicação (III)

Necessidade de criação de um projeto
{joseana, rangel}@dsc.ufcg.edu.br

Inclusão da aplicação, do arquivo-objeto
do driver (e.g. EGAVGA.OBJ) e do(s)
arquivo(s)-objeto(s) da(s) fonte(s) de texto
(e.g. GOTH.OBJ) necessário(s) ao contexto
da aplicação
15
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Distribuição do código criado com o Turbo
C++ 3.0 sem necessidade de inclusão do
arquivo extras à aplicação (IV)

Registro dos dispositivos e fontes ANTES
da inicialização do modo gráfico
{joseana, rangel}@dsc.ufcg.edu.br

Inclusão das linhas de código (à aplicação)
registerbgidriver(nomepublico_driver);
registerbgifont(nomepublico_fonte);
detectgraph(&gdriver, &gmodo); (opcional)
initgraph(& gdriver, &gmodo, "");
16
DSC/CCT/UFCG

Utilização do Modo Gráfico
Estratégia sugerida pela Borland
 Distribuição do código criado com o Turbo
C++ 3.0 sem necessidade de inclusão do
{joseana, rangel}@dsc.ufcg.edu.br
arquivo extras à aplicação (V)

Compilação do projeto

Execução da aplicação

Verificação do funcionamento satisfatório
da aplicação

Distribuição da aplicação SEM inclusão de
arquivos adicionais
17
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Fundamentos de
Gráficos

Tela Gráfica

Opções de Cores

Modo Gráfico

Traçado de Linhas

Estilos de Linhas

Apagamento da Tela

Traçado de Pontos
18
Tela Gráfica
DSC/CCT/UFCG

Existência de uma placa gráfica VGA ou
superior no computador
 Tela Gráfica com (640 x 480) pixels (pelo
menos)
{joseana, rangel}@dsc.ufcg.edu.br

640 X 480 = 307.200 pixels

Posição
do
esquerdo  (0, 0)

Posição
do
canto
direito  (639, 479)
canto
superior
inferior
19
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
(0, 0)
(0, 479)
Dimensões da Tela Gráfica
(639, 0)
(639, 479)
20
DSC/CCT/UFCG
Opções de Cor de Fundo
 Possibilidade de seleção da cor do fundo
da tela (background color)
 Função para a seleção da cor do fundo da
tela
{joseana, rangel}@dsc.ufcg.edu.br
setbkcolor(numero)
numero  constante numérica entre 0 e
15 ou constante simbólica representante
da cor (e.g. BLACK)
21
DSC/CCT/UFCG

Opções de Cores
Número de cores  Modo gráfico
selecionado usando o Turbo C++
 Paleta default  16 opções de cores

Função para a seleção de uma cor para o
traçado gráfico (foreground color)
{joseana, rangel}@dsc.ufcg.edu.br
setcolor(number)
numero  Similar
função setbkcolor
ao argumento da
22
DSC/CCT/UFCG
Números e Nomes de Cores
#
Nome da Cor
Cor
0 Black
1 Blue
2 Green
3 Cyan
4 Red
5 Magenta
6 Brown
7 Light Gray
8 Dark Gray
{joseana, rangel}@dsc.ufcg.edu.br
9 Light Blue
10 Light Green
11 Light Cyan
12 Light Red
13 Light Magenta
14 Yellow
15 White
23
DSC/CCT/UFCG
Nomes de Cores – paleta16.c
1
{joseana, rangel}@dsc.ufcg.edu.br
#include
#include
#include
#include
#include
<graphics.h>
<stdio.h>
<stdlib.h>
<process.h>
<conio.h>
main(){
char s1[10], s2[10];
char mcol[5];
char dcolor[10], bkcolor[10];
char *nomedriver;
char logcor[16][15] = {"Preto","Azul","Verde","Ciano",
"Vermelho","Magenta","Marrom","Cinza-claro",
"Cinza-escuro","Azul-claro","Verde-claro","Ciano-claro",
"Vermelho-claro","Magenta-claro","Amarelo","Branco"};
int gdriver=DETECT, gmode, errorcode;
int xasp, yasp, maxx, maxy, ptam, i, dy, dx;
double razao;
24
DSC/CCT/UFCG
Nomes de Cores – paleta16.c
2
errorcode=registerbgidriver(EGAVGA_driver);
{joseana, rangel}@dsc.ufcg.edu.br
initgraph(&gdriver, &gmode, "");
errorcode=graphresult();
if(errorcode != grOk){
printf("Erro de funcao grafica: %s\n",
grapherrormsg(errorcode));
printf("Pressione uma tecla para parar!");
getch();
exit(1);
}
setbkcolor(BLACK);
setcolor(WHITE);
maxx=getmaxx();
maxy=getmaxy();
dy=maxy/24;
dx=maxx/2;
/* impressao do nome do driver grafico */
outtextxy(0,dy,"Driver Grafico:");
outtextxy(dx,dy,getdrivername());
25
Nomes de Cores – paleta16.c
3
/* Determinacao da proporcao */
DSC/CCT/UFCG
getaspectratio(&xasp, &yasp);
itoa(xasp, s1, 10);
itoa(yasp, s2, 10);
outtextxy(0,dy*2,"Proporcao (x:y):");
outtextxy(dx,dy*2,s1);
outtextxy(dx+40,dy*2, ":” );
outtextxy(dx+50,dy*2,s2);
{joseana, rangel}@dsc.ufcg.edu.br
/* Aquisicao do modo grafico */
outtextxy(0,dy*3,"O modo de video eh:");
outtextxy(dx,dy*3,getmodename(gmode));
/* Determinacao da cor de fundo corrente */
outtextxy(0, dy*4, "A cor de fundo corrente eh:");
outtextxy(dx, dy*4, logcor[getbkcolor()]);
/* Determinacao da cor de desenho corrente */
outtextxy(0, dy*5, "A cor de desenho corrente eh:");
outtextxy(dx, dy*5, logcor[getcolor()]);
ptam=getpalettesize();
itoa(ptam, mcol, 10);
26
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Nomes de Cores – paleta16.c
4
outtextxy(0, dy*6, "Numero maximo de cores de desenho:");
outtextxy(dx, dy*6, mcol);
outtextxy(0, dy*7, "Paleta de 16 cores VGA/EGA:");
for(i=0; i<16; i++){
setfillstyle(SOLID_FILL, i);
bar(dx, dy*(i+7), dx+10, dy*(i+7)+10);
moveto(dx+15, dy*(i+7));
outtext(logcor[i]);
}
getch();
closegraph();
return(0);
}
27
DSC/CCT/UFCG
Entidades Geométricas
 Pontos e Linhas
 Retângulos
 Arcos
 Círculos e Elipses
{joseana, rangel}@dsc.ufcg.edu.br
 Sólidos geométricos
28
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
1
/* Demonstracao do uso da linguagem C para o tracado
de graficos. Exemplo de tracado da curva da funcao
cossenoidal modulada em amplitude (AM)
y=(a*cos(b*3.1415*x/360)*c*sin(b*3.1415*x*50/360))
{joseana, rangel}@dsc.ufcg.edu.br
com possibilidade de alteracao dos valores de a, b e c
e efeitos de deslocamento para a esquerda/direita e
para cima/baixo (pan) e reducao/ampliacao (zoom
in/out) da curva durante a visualizacao. */
#include
#include
#include
#include
#include
#include
<graphics.h>
<stdlib.h>
<string.h>
<stdio.h>
<conio.h>
<math.h>
29
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
2
/* Possibilidade de alteracao de valores da resolucao de
tela */
#define MAXX 640
#define MAXY 480
/* Prototipos e declaracoes de funcoes de conversao de
coordenadas */
float tela_y(float, float, float);
float tela_y(float, float, float);
{joseana, rangel}@dsc.ufcg.edu.br
/* Possibilidade de definicao da funcao a ser tracada */
float matfunc(float);
/* Possibilidade de uso de todos os parametros a seguir
como coeficientes para qualquer funcao cujo tracado
se deseja. Quaisquer atribuicoes em main() e
definicao da funcao em matfunc() */
30
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
3
float a,b,c,d,e,f,g,h,i,j;
float tela_x(float xb, float x, float xe)
{
return ((x-xb)/(xe-xb)*MAXX);
}
{joseana, rangel}@dsc.ufcg.edu.br
float tela_y(float yb, float y, float ye)
{
return (MAXY-(y-yb)/(ye-yb)*MAXY);
}
float matfunc(float x)
{
/* Definicao da funcao cujo tracado se deseja */
return (a*c*cos(b*3.1415*x/360)*sin(b*3.1415*x*50/360));
}
31
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
4
/* Armazenamento das instrucoes de visualizacao do
grafico */
{joseana, rangel}@dsc.ufcg.edu.br
char *menu[] = {"a - AUMENTO da amplitude",
"r - REDUCAO da amplitude",
"e - deslocamento do eixo p/ a ESQUERDA",
"d - deslocamento do eixo p/ a DIREITA",
"c - deslocamento do eixo p/ CIMA",
"b - deslocamento do eixo p/ BAIXO",
"- - REDUCAO no eixo das ordenadas",
"+ - AMPLIACAO no eixo das ordenadas",
"< - REDUCAO no eixo das abcissas",
"> - AMPLIACAO no eixo das abcissas",
"z - ZOOM default (inicial)"};
void main(void)
{
/* Possibilidade de alteracao dos valores de 'drv' e
'modo' em funcao da alteracao de MAXX e MAXY */
32
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
5
int m,drv=VGA, modo=VGAHI;
float xb,xe,yb,ye,x,y,potx,poty;
char tecla;
{joseana, rangel}@dsc.ufcg.edu.br
char estilostr[50], estilostr1[50];
/* Configuracao de parametros de contexto */
a = 1;
b = 1;
c = 2;
xb = -360;
xe = 360;
yb = -10;
ye = 10;
/* Inicializacao do modo grafico */
initgraph(&drv,&modo,"");
33
Pontos e Linhas – tracgraf.c
6
DSC/CCT/UFCG
/* Tracado dos eixos X e Y */
setcolor(1);
line(0,tela_y(yb,0,ye),MAXX,tela_y(yb,0,ye));
line(tela_x(xb,0,xe),0,tela_x(xb,0,xe),MAXY);
setcolor(15);
for(m=0;m<=10;m++)
{
/* Conversao das opcoes de menu em strings */
{joseana, rangel}@dsc.ufcg.edu.br
strcpy(estilostr, menu[m]);
}
/* Apresentacao do menu */
outtextxy(330, 20 + 12*m, estilostr);
setcolor(14);
moveto(0,tela_y(yb,matfunc(xb),ye));
34
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
7
{joseana, rangel}@dsc.ufcg.edu.br
for(x=xb;x<=xe;x+=(xe-xb)/MAXX)
{
y = matfunc(x);
lineto(tela_x(xb,x,xe),tela_y(yb,y,ye));
}
while((tecla=getch())!=27) /* Repeticao do laco
ate ativacao de ESC */
{
potx = xb;
poty = yb;
switch(tecla)
{
case 'a': /* Aumento da amplitude */
++a;
break;
35
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
8
case 'r': /* Reducao da amplitude */
--a;
break;
case 'd': /* Deslocamento do eixo para a direita */
xb -= (xe-xb)/4.0;
xe -= (xe-potx)/4.0;
break;
case 'e': /* Deslocamento do eixo para a esquerda */
xb += (xe-xb)/4.0;
xe += (xe-potx)/4.0;
break;
case 'b': /* Deslocamento do eixo para baixo */
yb += (ye-yb)/4.0;
ye += (ye-poty)/4.0;
break;
case 'c': /* Deslocamento do eixo para cima */
yb -= (ye-yb)/4.0;
ye -= (ye-poty)/4.0;
break;
36
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
9
case '+': /* Ampliacao do eixo Y */
yb -= (yb-ye)/4.0;
ye += (poty-ye)/4.0;
break;
case '-': /* Reducao do eixo Y */
yb += (yb-ye)/4.0;
ye -= (poty-ye)/4.0;
break;
case '[': /* Reducao do eixo X */
xb += (xb-xe)/4.0;
xe -= (potx-xe)/4.0;
break;
case ']': /* Ampliacao do eixo X */
xb -= (xb-xe)/4.0;
xe += (potx-xe)/4.0;
break;
37
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
9
case '+': /* Ampliacao do eixo Y */
yb -= (yb-ye)/4.0;
ye += (poty-ye)/4.0;
break;
case '-': /* Reducao do eixo Y */
yb += (yb-ye)/4.0;
ye -= (poty-ye)/4.0;
break;
case '[': /* Reducao do eixo X */
xb += (xb-xe)/4.0;
xe -= (potx-xe)/4.0;
break;
case ']': /* Ampliacao do eixo X */
xb -= (xb-xe)/4.0;
xe += (potx-xe)/4.0;
break;
38
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
10
case ‘z': /* Visualizacao inicial */
xb = -360;
xe = 360;
yb = 10;
ye = -10;
break;
default:
continue;
}
cleardevice();
{joseana, rangel}@dsc.ufcg.edu.br
setcolor(1);
/* Tracado dos eixos */
line(0,tela_y(yb,0,ye),MAXX,tela_y(yb,0,ye));
line(tela_x(xb,0,xe),0,tela_x(xb,0,xe),MAXY);
39
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
11
/* Teste de teclas */
if((tecla=='e')||(tecla=='[')||(tecla==']')||
(tecla=='/')||(tecla=='r'))
{
setcolor(15);
for(m=0;m<=8;m++)
{
/* Conversao das opcoes de menu em strings */
{joseana, rangel}@dsc.ufcg.edu.br
strcpy(estilostr, menu[m]);
}
/* Apresentacao do menu */
outtextxy(330, 20 + 12*m, estilostr);
}
40
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
12
else if(tecla=='d')
{
setcolor(15);
for(m=0;m<=10;m++)
{
strcpy(estilostr, menu[m]);
{joseana, rangel}@dsc.ufcg.edu.br
outtextxy(30, 20 + 12*m, estilostr);
}
}
else if(tecla=='b')
{
setcolor(15);
for(m=0;m<=10;m++)
{
strcpy(estilostr, menu[m]);
}
outtextxy(30, 20 + 12*m, estilostr);
}
41
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
13
else if(tecla=='c')
{
setcolor(15);
for(m=0;m<=10;m++)
{
strcpy(estilostr, menu[m]);
outtextxy(330, 290 + 12*m, estilostr);
}
{joseana, rangel}@dsc.ufcg.edu.br
}
setcolor(14);
/* Retracado dos eixos */
moveto(0,tela_y(yb,matfunc(xb),ye));
for(x=xb;x<=xe;x+=(xe-xb)/MAXX)
{
y = matfunc(x);
lineto(tela_x(xb,x,xe),tela_y(yb,y,ye));
}
42
DSC/CCT/UFCG
Pontos e Linhas – tracgraf.c
14
setcolor(14);
moveto(0,tela_y(yb,matfunc(xb),ye));
for(x=xb;x<=xe;x+=(xe-xb)/MAXX)
{
y = matfunc(x);
lineto(tela_x(xb,x,xe),tela_y(yb,y,ye));
}
{joseana, rangel}@dsc.ufcg.edu.br
}
}
closegraph(); /*Encerramento do modo grafico */
return;
43
Traçado de Linhas I
DSC/CCT/UFCG
 Apontador Corrente
 Entidade
de apontamento invisível
Rastreio da posição corrente do pixel

 Equivalente ao cursor visível no modo texto
{joseana, rangel}@dsc.ufcg.edu.br
 Função para o deslocamento do apontador
para uma locação no gráfico (sem traçado
algum)
void far moveto (int x, int y);
44
DSC/CCT/UFCG
Traçado de Linhas II
 Função para o traçado de linhas da posição
corrente do apontador até outro ponto no
gráfico
void far lineto(int x, int y);
{joseana, rangel}@dsc.ufcg.edu.br

Possibilidade de substituição de moveto e
lineto pela função
void far line(int x1, int y1, int x2, int y2);
 (x1, y1)
 início da linha
 (x2, y2)
 término da linha
45
DSC/CCT/UFCG
Rectângulos I
 Série
de funções para traçado de
retângulos (de diferentes modos)
void far lineto(int x, int y);
void far moveto(int x, int y);
void far moverel(int dx, int dy);
{joseana, rangel}@dsc.ufcg.edu.br
void far linerel(int dx, int dy);
46
Rectângulos II
DSC/CCT/UFCG
 Função
para traçado direto de um
retângulo na cor e estilo de linha default
{joseana, rangel}@dsc.ufcg.edu.br
void far rectangle(int x1, int y1,
int x2, int y2);
(x1, y1)
 canto superior esquerdo
(x2, y2)
 canto inferior direito
(x1, y1)
(x2, y2)
47
Círculos
DSC/CCT/UFCG
 Função para traçado de um círculo na
cor e estilo de linha default
void far circle(int x, int y, int r);
(x, y)
{joseana, rangel}@dsc.ufcg.edu.br
r
 centro do círculo
 raio do círculo
(x, y)
r
48
Arcos
DSC/CCT/UFCG
 Função para traçado de um arco na cor
e estilo de linha default
void
far
arc(int
int af, int r);
{joseana, rangel}@dsc.ufcg.edu.br
(x, y)
x, int
 centro do arco
ai
 ângulo inicial
af
 ângulo final
xr
 raio do arco
y, int
ai,
90
af
ai
180
270
0
49
Elipses
DSC/CCT/UFCG
 Função para traçado de uma elipse na
cor e estilo de linha default
void far ellipse(int x, int y, int ai,
int af, int xr, int yr);
{joseana, rangel}@dsc.ufcg.edu.br
(x, y)
 centro da elipse
ai
 ângulo inicial
af
 ângulo final
xr
 raio da elipse na direção horizontal
yr
 raio da elipse na direção vertical
50
DSC/CCT/UFCG
Traçado de Pontos (Pixels)
 Funções
para a determinação dos
máximos valores de x e y para o traçado
de um ponto (x, y)
int far getmaxx(void)
{joseana, rangel}@dsc.ufcg.edu.br
int far getmaxy(void)
 Função para o traçado de um ponto de
coordenadas (x, y) em um dada cor
void far putpixel (int x, int y, int cor);
51
DSC/CCT/UFCG

Configuração de Atributos de
Linhas
Configuração de uma Linha
 TODAS as linhas são traçadas no Turbo
C++ 3.0 no modo default de linha
{joseana, rangel}@dsc.ufcg.edu.br
 Possibilidade de especificação de três
atributos pelo usuário: estilo, padrão e
espessura
 Sintaxe da função para configuração de
atributos de linhas
void
far
unsigned
setlinestyle
(int
style,
pattern, int thickness);
52
Estilos de Linhas
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
#
Nome
Descrição
0
SOLID_LINE
Linha cheia
1
DOTTED_LINE
Linha pontilhada
2
CENTER_LINE
Linha tracejada pontilhada
3
DASHED_LINE
Linha tracejada
4
USERBIT_LINE
Linha definida pelo usuário
Efeito
53
Padrões de Linhas
DSC/CCT/UFCG

Padrão
 Palavra de 16 bits aplicável APENAS se o
estilo da linha for USERBIT_LINE (4)
 Caso o seja, SEMPRE que um bit na palavra
do padrão for 1, o pixel correspondente na
{joseana, rangel}@dsc.ufcg.edu.br
linha é traçado na cor corrente
 Caso contrário, MESMO QUE um valor seja
atribuído ao parâmetro padrão, este não
terá NENHUM efeito no traçado da linha
54
Padrões de Linhas
DSC/CCT/UFCG

Exemplos
 Uma linha sólida corresponde a um padrão
de 0xFFFF (TODOS os pixels traçados)
 Uma linha tracejada poderá corresponder a
um padrão de 0x3333 (
) ou 0x0F0F
{joseana, rangel}@dsc.ufcg.edu.br
(
)
55
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
#
Espessuras de Linhas
Nome
Descrição
1
NORM_WIDTH
Espessura de 1 pixel
3
THICK_WIDTH
Espessura de 3 pixels
Efeito
56
DSC/CCT/UFCG
#include
#include
#include
#include
#include
Entidades Geométricas –
entgeo1.c 1
<graphics.h>
<stdlib.h>
<string.h>
<stdio.h>
<conio.h>
{joseana, rangel}@dsc.ufcg.edu.br
/* Armazenamento de nomes de estilos de linha aceitos */
char *lnome[] =
{"SOLID_LINE","DOTTED_LINE","CENTER_LINE",
"DASHED_LINE","USERBIT_LINE"};
/* Armazenamento de nomes de USERBIT_LINES */
char *lnome1[] =
{"USERBIT_LINE1","USERBIT_LINE2","USERBIT_LINE3",
"USERBIT_LINE4","USERBIT_LINE5"};
57
DSC/CCT/UFCG
Entidades Geométricas –
entgeo1.c 2
int main(void)
{ /* Solicitacao de auto-detecao e declaracao de variaveis
locais*/
int gdriver = DETECT, gmodo, coderro;
int i, estilo, midx, midy, padrao;
char estilostr[40], estilostr1[40];
{joseana, rangel}@dsc.ufcg.edu.br
/* Inicialização do modo gráfico */
initgraph(&gdriver, &gmodo, "");
/* Leitura do resultado do processo de inicializacao */
coderro = graphresult();
if (coderro != grOk) /* Ocorrencia de erro */
{
printf("Erro: %s\n", grapherrormsg(coderro));
printf("Pressione qualquer tecla para sair:");
getch();
exit(1); /* Finalizacao com erro */
}
58
Entidades Geométricas –
entgeo1.c
DSC/CCT/UFCG
3
midx = getmaxx() / 2;
midy = getmaxy() / 2;
{joseana, rangel}@dsc.ufcg.edu.br
/* Variação da cor e extensão de uma linha */
for(i=1;i<=15;i++){
setcolor(i);
line(5,5,20*i,20*i);
delay(500);
cleardevice();
}
/* Variação da cor e dimensões de um retangulo vazio */
for(i=1;i<=15;i++){
setcolor(i);
rectangle(5,5,15*i,15*i);
delay(500);
cleardevice();
}
59
DSC/CCT/UFCG
Entidades Geométricas –
entgeo1.c 4
{joseana, rangel}@dsc.ufcg.edu.br
/* Variação da cor e extensão de uma elipse vazada*/
for(i=1;i<=15;i++){
setcolor(i);
setlinestyle(estilo, padrao, 1);
ellipse(300,200,i,25*i,15*i,8*i);
delay(300);
cleardevice();
}
/* Variação das cores de borda e de preenchimento de um
retângulo 3D */
for(i=1;i<=15;i++){
setcolor(i);
setfillstyle(SOLID_FILL, 16-i);
bar3d(200,200,400,400,50,50);
outtextxy(280,300, "TESTE");
delay(500);
cleardevice();
}
60
DSC/CCT/UFCG
Entidades Geométricas –
entgeo1.c 5
/* Definicao do padrao de uma linha pelo usuario */
padrao = 0x8888;
for (estilo=SOLID_LINE; estilo<=USERBIT_LINE; estilo++)
{ /* Selecao do estilo da linha */
setlinestyle(estilo, padrao, 1);
/* Conversao do estilo em string */
strcpy(estilostr, lnome[estilo]);
setcolor(3*estilo); /* Alteracao da cor do tracado */
{joseana, rangel}@dsc.ufcg.edu.br
line(0, 0, midx-10, midy); /* Tracado da linha */
/* Apresentacao de mensagem */
outtextxy(midx, midy, estilostr);
}
delay(500); /* Retencao do tracado na tela */
cleardevice();
61
DSC/CCT/UFCG
Entidades Geométricas –
entgeo1.c 6
/* Definicao do estilo de uma linha pelo usuario */
estilo=SOLID_LINE;
while(estilo<=USERBIT_LINE)
{ /* Selecao do estilo da linha */
setlinestyle(estilo, padrao, 1);
/* Conversao do estilo em string */
strcpy(estilostr, lnome[estilo]);
setcolor(3*(estilo+1)); /* Alteracao da cor do tracado */
{joseana, rangel}@dsc.ufcg.edu.br
/* Tracado de linha */
line(midx-100, midy-100 + 20*estilo, midx-40,
midy-100 + 20*estilo);
}
/* Apresentacao de mensagem */
outtextxy(midx, midy-105+20*estilo, estilostr);
estilo++;
delay(100);
62
DSC/CCT/UFCG
Entidades Geométricas –
entgeo1.c 7
delay(2000);
cleardevice();
padrao = 0xFFFF;
for (i=1; i<=5; i++)
{ /* Definicao do padrao de uma linha */
if(i<3) setlinestyle(USERBIT_LINE, padrao<<3*i,1);
else setlinestyle(USERBIT_LINE, padrao<<3*i,3);
/* Conversao do estilo em string */
strcpy(estilostr1, lnome1[i-1]);
{joseana, rangel}@dsc.ufcg.edu.br
setcolor(2*i+4); /* Alteracao da cor do tracado */
/* Tracado da linha */
line(midx-240, midy+20*(i-5),midx-30, midy+20*(i-5));
}
/* Apresentacao de mensagem */
outtextxy(midx, midy-103+20*i, estilostr1);
delay(100);
63
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
}
Entidades Geométricas – entgeo.c
8
getch();
closegraph(); /* Encerramento do modo grafico */
return 0;
64
DSC/CCT/UFCG
Padrões de
Preenchimento
 Seleção de Padrões e Cores
 Preenchimento de Regiões
{joseana, rangel}@dsc.ufcg.edu.br
 Aquisição de Pixels
65
Seleção de Padrões e
Cores
DSC/CCT/UFCG
 Função para a configuração do padrão e
da cor de um objeto a ser preenchido
graficamente
void far setfillstyle(int padrao, int cor);
 Função para a configuração de um padrão
{joseana, rangel}@dsc.ufcg.edu.br
de preenchimento definido pelo usuário

NÃO atribuir o valor 12 (USER_FILL) ao
parâmetro padrao da função setfillstyle

Invocar
void
far
setfillpattern(char
*upadrao, int cor);
far
66
Padrões de
Preenchimento
DSC/CCT/UFCG
{joseana, rangel}@dsc.ufcg.edu.br
#
Nome
Preenchimento
0 EMPTY_FILL
Cor de fundo
1 SOLID_FILL
Sólido
2 LINE_FILL
-------
3 LTSLASH_FILL
/
4 SLASH_FILL
/ (linhas espessas)
5 BKSLASH_FILL
\ (linhas espessas)
6 LTBKSLASH_FILL
\
7 HATCH_FILL
Cruzado fino
8 XHATCH_FILL
Cruzado espesso
9 INTERLEAVE_FILL
Linhas entrelaçadas
10 WIDE_DOT_FILL
Pontos muito espaçados
11 CLOSE_DOT_FILL
Pontos pouco espaçados
12 Nome
Padrão definido pelo usuário
67
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
1
#include
#include
#include
#include
<stdlib.h>
<string.h>
<stdio.h>
<conio.h>
{joseana, rangel}@dsc.ufcg.edu.br
/* Armazenamento de nomes de preenchimento de linha
aceitos */
char *fnome[] = {"EMPTY_FILL","SOLID_FILL",
"LINE_FILL","LTSLASH_FILL","SLASH_FILL",
"BKSLASH_FILL",LTBKSLASH_FILL","HATCH_FILL",
"XHATCH_FILL","INTERLEAVE_FILL","WIDE_DOT_FILL",
"CLOSE_DOT_FILL","USER_FILL"};
char *fnome1[] = {"EMPTY_FILL P25","SOLID_FILL P25",
"LINE_FILL P25","LTSLASH_FILL P25","SLASH_FILL P25",
"BKSLASH_FILL P25","LTBKSLASH_FILL P25",
"HATCH_FILL P25","XHATCH_FILL P25",
"INTERLEAVE_FILL P25","WIDE_DOT_FILL P25",
"CLOSE_DOT_FILL P25","USER_FILL P25"};
68
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
2
int main(void)
{
/* Solicitacao de auto-detecao e declaracao de variaveis
locais*/
int gdriver = DETECT, gmodo, coderro;
int i, j, estilo, midx, midy, padrao;
/* Padrao de preenchimento definido pelo usuario */
char padrao1[8] = {0x00,0x00,0x00,0x00,0xF0,0xF0,
0xF0,0xF0};
{joseana, rangel}@dsc.ufcg.edu.br
char estilostr[40], estilostr1[40];
/* Inicialização do modo gráfico */
initgraph(&gdriver, &gmodo, "");
/* Leitura do resultado do processo de inicializacao */
coderro = graphresult();
69
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
3
if (coderro != grOk) /* Ocorrencia de erro */
{
printf("Erro: %s\n", grapherrormsg(coderro));
printf("Pressione qualquer tecla para sair:");
getch();
exit(1); /* Finalizacao com erro */
}
{joseana, rangel}@dsc.ufcg.edu.br
midx = getmaxx() / 2;
midy = getmaxy() / 2;
/* Definicao do padrao de preenchimento */
for (estilo = EMPTY_FILL; estilo < USER_FILL; estilo++)
{
/* Selecao de estilo de linha */
setfillstyle(estilo, estilo+3);
/* Conversao do padrao de preenchimento em string */
strcpy(estilostr, fnome[estilo]);
70
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
4
/* Configuracao da cor da borda do desenho */
setcolor(estilo+3);
/* Preenchimento do retangulo 2D*/
bar3d(50, 50, midx-10, midy, 0, 0);
{joseana, rangel}@dsc.ufcg.edu.br
/* Apresentacao de mensagem */
outtextxy(midx, midy, estilostr);
}
delay(1000); /* Retencao do tracado na tela */
cleardevice(); /* Apagamento da tela */
71
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
5
/* Definicao do padrao de preenchimento */
for (estilo = EMPTY_FILL; estilo < USER_FILL; estilo++)
{ /* Selecao de estilo de linha */
setfillstyle(estilo, estilo+3);
/* Conversao do padrao de preenchimento em string */
strcpy(estilostr1, fnome1[estilo]);
/* Configuracao da cor da borda do desenho */
setcolor(estilo+3);
{joseana, rangel}@dsc.ufcg.edu.br
/* Preenchimento do retangulo 3D*/
bar3d(50, 50, midx-10, midy, 25, 1);
/* Apresentacao de mensagem */
outtextxy(midx, midy, estilostr1);
}
delay(1000); /* Retencao do tracado na tela */
cleardevice(); /* Apagamento da tela */
72
DSC/CCT/UFCG
Estilos de Linhas – padpreen.c
6
for (i = 1; i < 15; i++) {
/* Configuracao da cor da borda do desenho */
setcolor(15-i);
for(j=0; j < 8; j++){
padrao1[j] =
padrao1[j]^padrao1[j]<<1^padrao1[j]>>2;
}
/* Selecao de um padrao de preenchimento definido
pelo usuario */
setfillpattern(padrao1, 15-i);
{joseana, rangel}@dsc.ufcg.edu.br
/* Preenchimento com o padrao selecionado*/
bar3d(50, 50, midx-10, midy, 25, 1);
delay(2000); /* Retencao do tracado na tela */
cleardevice(); /* Apagamento da tela */
}
}
getch();
closegraph(); /* Encerramento do modo grafico */
return 0;
73
Preenchimento de
Regiões I
DSC/CCT/UFCG
 Função para o preenchimento de uma
região com um padrão e uma cor
{joseana, rangel}@dsc.ufcg.edu.br
void floodfill (int x, int y, int cor);

(x, y)  ponto “semente” situado no
interior da região a ser “inundada” por
uma dada cor

cor  cor da borda da região
74
Preenchimento de
Regiões II
DSC/CCT/UFCG
 Função para o preenchimento de uma
região com um padrão e uma cor
{joseana, rangel}@dsc.ufcg.edu.br

Recomendação

Uso da função fillpoly ao invés de
floodfill SEMPRE que possível 
Manutenção da compatibilidade de
código com versões mais recentes

floodfill NÃO é compatível com o driver
IBM-8514
75
Preenchimento de
Regiões III
DSC/CCT/UFCG
 Função para o preenchimento de uma
região com um padrão e uma cor

Sintaxe da função fillpoly
{joseana, rangel}@dsc.ufcg.edu.br
void far fillpoly(int np, int far *pp);

np  número de pontos da borda do
polígono a ser preenchido

pp  apontador para uma seqüência de
np*2 inteiros, na qual cada par de
inteiros fornece as coordenadas x e y de
um ponto do polígono
76
DSC/CCT/UFCG
Estilos de Linhas – preenpol.c
1
#include
#include
#include
#include
<graphics.h>
<stdlib.h>
<stdio.h>
<conio.h>
{joseana, rangel}@dsc.ufcg.edu.br
int main(void)
{
int gdriver = DETECT, gmodo, coderro;
int i, maxx, maxy;
int poligono[4]; /* Array do poligono */
initgraph(&gdriver, &gmodo, "");
coderro = graphresult();
if (coderro != grOk) {
printf("Erro: %s\n",grapherrormsg(errorcode));
printf(“Pressione qualquer tecla para encerrar!");
getch();
exit(1);
}
77
DSC/CCT/UFCG
Estilos de Linhas – preenpol.c
2
maxx = getmaxx();
maxy = getmaxy();
poligono[0]
poligono[1]
poligono[2]
poligono[3]
poligono[4]
poligono[5]
poligono[6]
=
=
=
=
=
=
=
100; /* Primeiro vertice */
maxy/2;
maxx-200; /* Segundo vertice */
200;
maxx/2; /* Terceiro vertice */
maxy/3;
maxx/4; /* Quarto vertice, preenchimento
{joseana, rangel}@dsc.ufcg.edu.br
automatico */
poly[7] = maxy/3; /* Fechamento do poligono */
/* Laco para configuracao de padroes de preenchimento */
for (i=EMPTY_FILL; i<USER_FILL; i++) {
setcolor(i);
setfillstyle(i, i)
78
DSC/CCT/UFCG
Estilos de Linhas – preenpol.c
3
fillpoly(4, poligono); /* Tracado de um poligono
preenchido */
delay(1000);
cleardevice();
{joseana, rangel}@dsc.ufcg.edu.br
}
}
getch();
closegraph();
return 0;
79
Preenchimento de
Regiões IV
DSC/CCT/UFCG
 Função para o traçado e preenchimento de
uma elipse
{joseana, rangel}@dsc.ufcg.edu.br
void fillellipse(int x, int y, int xr, int yr);

(x, y)  ponto central da elipse

xr  raio horizontal da elipse

yr  raio vertical da elipse
yr
xr
(x, y)
80
DSC/CCT/UFCG
Estilos de Linhas – prelipse.c 1
#include
#include
#include
#include
<graphics.h>
<stdlib.h>
<stdio.h>
<conio.h>
int main(void)
{
int gdriver = DETECT, gmodo, coderro;
int xradius = yradius = 40;
int midx, midy, i;
{joseana, rangel}@dsc.ufcg.edu.br
initgraph(&gdriver, &gmodo, "");
}
coderro = graphresult();
if (coderro != grOk){
printf("Erro: %s\n", grapherrormsg(coderro));
printf("Pressione qualquer tecla para sair:");
getch();
exit(1);
81
DSC/CCT/UFCG
Estilos de Linhas – prelipse.c 2
midx = getmaxx()/8;
midy = getmaxy()/8;
for (i = EMPTY_FILL; i < USER_FILL; i++) {
setcolor(i);
setfillstyle(i,i);
{joseana, rangel}@dsc.ufcg.edu.br
/* Tracado de uma elipse preenchida*/
fillellipse(midx*i/2, midy*i/2, xradius*i*i/(3+2*i),
yradius*i*i/(4+i*i));
delay(1000);
cleardevice();
}
getch();
closegraph();
}
return 0;
82
DSC/CCT/UFCG
Preenchimento de
Regiões V
 Função para o traçado e preenchimento de
uma “fatia de pizza” (pieslice)
{joseana, rangel}@dsc.ufcg.edu.br
void pieslice(int x, int y, int ai, int af, int r);

(x, y)  ponto central da “fatia de pizza”

ai  ângulo inicial da fatia

af  ângulo final da fatia

r  raio da fatia
af
ai
(x, y) r
83
DSC/CCT/UFCG
Estilos de Linhas – fatpizza.c 1
#include
#include
#include
#include
#include <graphics.h>
<stdlib.h>
<stdio.h>
<conio.h>
int main(void)
{
int gdriver = DETECT, gmodo, coderro;
int midx, midy;
int ai = 0, af = 0, i = 0, j = 0, raio = 100, cor = 1;
{joseana, rangel}@dsc.ufcg.edu.br
initgraph(&gdriver, &gmodo, "");
coderro = graphresult();
if (coderro != grOk)
{
printf("Erro: %s\n", grapherrormsg(coderro));
printf("Pressione qualquer tecla para encerrar!");
getch();
exit(1);
}
84
DSC/CCT/UFCG
Estilos de Linhas – fatpizza.c 2
midx = getmaxx()/2;
midy = getmaxy()/2;
while(i<6)
{
for(af=0;af<360;af+=2)
{
setcolor(cor);
setfillstyle(SOLID_FILL, cor);
{joseana, rangel}@dsc.ufcg.edu.br
/* Tracado de uma “fatia de pizza” */
pieslice(midx, midy, ai, af, raio);
delay(2);
}
for(j=0;j<4;j++)
{
setcolor(15-cor);
line(midx, midy,midx+100,midy+j);
}
85
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
}
Estilos de Linhas – fatpizza.c 3
for(af=360;af>=0;af-=2)
{
setcolor(15-cor);
setfillstyle(SOLID_FILL, 15-cor);
pieslice(midx, midy, 359, af, raio);
delay(2);
}
i++;
cor++;
}
getch();
closegraph();
return 0;
86
DSC/CCT/UFCG
Preenchimento de
Regiões VI
 Função para o traçado e preenchimento de
uma barra retangular
{joseana, rangel}@dsc.ufcg.edu.br
void bar(int e, int c, int d, int b);

(e, c)  coordenadas do pixel do canto
superior esquerdo da barra

(d, b)  coordenadas do pixel do canto
inferior direito da barra
(e, c)
(d, b)
87
DSC/CCT/UFCG
Preenchimento de
Regiões VII
 Função para o traçado e preenchimento de
uma barra retangular tridimensional
{joseana, rangel}@dsc.ufcg.edu.br
void bar3d(int e, int c, int d, int b, int p, int t);

(e, c)  coordenadas do pixel do canto
superior esquerdo da barra

(d, b)  coordenadas do pixel do canto
inferior direito da barra

p  profundidade da barra

t  topflag (controla se um topo 3D será
incorporado à barra)
88
Apresentação de Texto na tela
Gráfica
DSC/CCT/UFCG

Função para a escrita de expressões
literais na tela gráfica, a partir de uma
locação especificada por um par de
coordenadas
void outtextxy (int x, int y, char *string);
{joseana, rangel}@dsc.ufcg.edu.br
 Manutenção da compatibilidade do código
em face do uso de várias fontes de texto

Uso das funções textwidth e textheight
para a determinação das dimensões da
string
89
Configuração de Texto
DSC/CCT/UFCG

Função para a configuração de valores
para os atributos do texto visualizado
em tela gráfica
{joseana, rangel}@dsc.ufcg.edu.br
void settextstyle(int fnt, int dir, int tc);

fnt  estilo da fonte de texto

dir  direção da fonte  Horizontal (da
esquerda para a direita) e Vertical
(rotacionada 90° no sentido anti-horário)

tc  tamanho do caractere visualizado
em tela
90
DSC/CCT/UFCG
#
Estilo e Direção de Texto
Nome
Fonte de texto
0 DEFAULT_FONT
Mapa de bits 8x8
1 TRIPLEX_FONT
Triplex
2 SMALL_FONT
Small
3 SANS_SERIF_FONT
Sans-Serif
4 GOTHIC_FONT
Gothic
5 SCRIPT_FONT
Script
6 SIMPLEX_FONT
Simplex Scrip
{joseana, rangel}@dsc.ufcg.edu.br
7 TRIPLEX_SCR_FONT Triplex Script
8 COMPLEX_FONT
Complex
9 EUROPEAN_FONT
European
10 BOLD_FONT
Bold
#
Nome
Direção
0 HORIZ_DIR Esquerda para direita
1 VERT_DIR
Baixo para cima
91
Tamanho de Caracteres
{joseana, rangel}@dsc.ufcg.edu.br
DSC/CCT/UFCG
Valor de tc
Efeito em outtext/ outtextxy
0
Ampliação da fonte (stroked) usando fator de
ampliação default de caracteres (4) ou o
tamanho do caractere definido pelo usuário
(dado por setusercharsize)
1
Visualização de caracteres da fonte 8x8 (bitmapped) em um retângulo da tela contendo 8x8
pixels
2
Visualização de caracteres da fonte 8x8 (bitmapped) em um retângulo da tela contendo
16x16 pixels
3
..
.
10
Visualização de caracteres da fonte 8x8 (bitmapped) em um retângulo da tela contendo
24x24 pixels
..
.
Visualização de caracteres da fonte 8x8 (bitmapped) em um retângulo da tela contendo
80x80 pixels
92
Apagamento da Tela
DSC/CCT/UFCG

Estratégias de apagamento da tela
 Modo gráfico em uso
void far cleardevice(void);
 Fora do modo gráfico
{joseana, rangel}@dsc.ufcg.edu.br
void clrscr(void);

Apagamento da tela de texto, NÃO da tela
gráfica!!!
93
DSC/CCT/UFCG

Aquisição e Traçado de
Pixels
Função para a aquisição da cor de um pixel
localizado nas coordenadas (x, y)
unsigned getpixel(int x, int y);

Função para o traçado de um pixel de uma
dada cor nas coordenadas (x, y)
{joseana, rangel}@dsc.ufcg.edu.br
void putpixel(int x, int y, int cor);
94
DSC/CCT/UFCG

Funções Não Gráficas Úteis
int kbhit(void); /* include <conio.h> */
 Verificação a existência de um caractere no
{joseana, rangel}@dsc.ufcg.edu.br
buffer de entrada pronto para leitura

Em caso afirmativo  Retorno de um
inteiro não nulo (V)

Caso contrário  Retorno de zero (F)
95
DSC/CCT/UFCG

Funções Não Gráficas Úteis
int getch(void); /* include <conio.h> */
 Leitura de um caractere do teclado e retorno
{joseana, rangel}@dsc.ufcg.edu.br
de seu valor ASCII (sem espera de um
ENTER)
96
DSC/CCT/UFCG
Joseana Macêdo Fechine
José Eustáquio Rangel de Queiroz
{joseana, rangel}@dsc.ufcg.edu.br
{joseana, rangel}@dsc.ufcg.edu.br
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIA
DEPARTAMENTO DE SISTEMAS E
COMPUTAÇÃO
Download

Informática na Educação - Computação UFCG