CES-10 INTRODUÇÃO À
COMPUTAÇÃO
Aulas Práticas – 2014
Capítulo VI
Desenhos e Animação
Arquivos fornecidos para a aula:

CES10 Prat 6 2014.ppt: slides da aula

lab_6_ces10_2014.doc: proposta do Lab 6

conio2.zip: arquivos para a biblioteca conio2 a ser utilizada
no CodeBlocks (Aba Códigos da página do prof); contém:
–

conio2.h e libconio.a
winbgi.zip: arquivos com rotinas gráficas a serem utilizadas
no CodeBlocks (Aba Códigos da página do prof); contém:
–
winbgi.c e winbgi.h
Instruções para usar o conio2 no CodeBlocks:

Adaptação de documento do Prof. Paulo André Lima de
Castro
1. Copiar o arquivo conio2.h para C:\Arquivos de
Programas (x86) \CodeBlocks\MingW\include
2. Copiar o arquivo libconio.a para C:\ Arquivos de
Programas (x86) \CodeBlocks\MingW \lib
3. Abrir o CodeBlocks e entrar no menu Settings →
Compiler
Instruções para usar o conio2 no CodeBlocks:
4. Clicar no botão “Linker Settings”
5. Abaixo do quadro “Link libraries”, clicar no botão “Add”
6. Escrever na janelinha “Add library” o seguinte: libconio.a
7. No programa, colocar: #include <conio2.h>
textbackground () – Seta a cor de fundo
Algumas
funções do textcolor () – Seta a cor do texto
clrscr () – Limpa a tela
conio2:
gotoxy () – Coloca o cursor em uma posição da tela
Programa 6.1: Posicionamento do cursor no vídeo-texto
Copiar, salvar e
clrscr (conio2.h):
#include <stdio.h>
executar
limpa a tela
#include <conio.h>
#include <conio2.h>
\r: reescreve a 1ª
int main () {
linha da tela
int col, lin; char c;
Posiciona o cursor
printf ("Maximize a tela e digite algo: ");
nas coordenadas
getche (); clrscr ();
desejadas – digitar
printf ("Posicionar cursor? (s/n): ");
um caractere
Posiciona o cursor
c = getche();
na coluna e linha 1
while (c == 's' || c == 'S') {
printf ("\rDigite a coluna e a linha: ");
Limpa a 1ª linha
scanf ("%d%d", &col, &lin);
\r: reescreve a 1ª
gotoxy (col, lin); getche ();
linha da tela
gotoxy (1, 1);
printf ("
");
printf ("\rPosicionar cursor? (s/n): "); c = getche();}
return 0;
}
Programa 6.2: Determinação dos limites do gotoxy
Copiar, salvar e
#include <stdio.h>
executar
Colunas variam
#include <conio.h>
de 1 a 80
#include <conio2.h>
int main () {
int i, n;
printf ("TESTE DO LIMITE DE LINHAS DO GOTOXY");
printf ("\n\n\tDigite o numero de linhas: ");
Valores escritos
scanf ("%d", &n);
variam de 0 a 9
printf ("\nMaximize a tela e digite algo!");
getche (); clrscr ();
for (i=1; i<=n; i++) {
gotoxy ((i-1)%80+1, i); printf ("%d", i%10);
}
Experimentar os
printf ("\nDigite algo para encerrar: ");
seguintes valores
getch ();
para n:
Qual o limite de linhas atingidas
return 0;
40, 53, 60, 80, 200,
pelo gotoxy?
}
300, 400
Qual o número de linhas da tela
maximizada?
Limites
no
Borland
(n = 80):
Coluna 80
Linha 44
Programa 6.3: Passeio do ‘*’ pelo vídeo-texto
Copiar, salvar
#include <stdio.h>
e executar
#include <conio.h>
#include <conio2.h>
int main () {
int i, j, demora = 20000000;
printf ("Maximize a tela e digite algo: ");
getche (); clrscr ();
for (i = 10; i <= 60; i++) {
gotoxy (i, 5); printf (" *");
for (j = 1; j <= demora; j++);}
for (i = 6; i <= 40; i++) {
gotoxy (61, i-1); printf (" ");
gotoxy (61, i); printf ("*");
for (j = 1; j <= demora; j++);
}
printf ("\n\nDigite algo para encerrar: ");
getch (); return 0;
}
Programa 6.3: Passeio do ‘*’ pelo vídeo-texto
Para i = 10, na linha 5:
#include <stdio.h>
#include <conio.h>
Escreve ‘ ’ na coluna
#include <conio2.h>
10 e ‘*’ na coluna 11
int main () {
int i, j, demora = 20000000;
Para i = 11, na linha 5:
printf ("Maximize a tela e digite algo: ");
getche (); clrscr ();
Escreve ‘ ’ na coluna
for (i = 10; i <= 60; i++) {
11, apagando ‘*’
gotoxy (i, 5); printf (" *");
Escreve ‘*’ na coluna
for (j = 1; j <= demora; j++);}
12
for (i = 6; i <= 40; i++) {
gotoxy (61, i-1); printf (" ");
Dá a impressão de
gotoxy (61, i); printf ("*");
movimento do ‘*’ uma
for (j = 1; j <= demora; j++);
posição p/direita
}
printf ("\n\nDigite algo para encerrar: ");
Para i = 60, ‘*’ vai
getch (); return 0;
para a coluna 61
}
Programa 6.3: Passeio do ‘*’ pelo vídeo-texto
#include <stdio.h>
#include <conio.h>
#include <conio2.h>
int main () {
Faz ‘*’ permanecer
int i, j, demora = 20000000;
numa posição durante
printf ("Maximize a tela e digite algo: ");
um t perceptível
getche (); clrscr ();
for (i = 10; i <= 60; i++) {
O valor 20.000.000
gotoxy (i, 5); printf (" *");
para ‘demora’ é
for (j = 1; j <= demora; j++);}
experimental
for (i = 6; i <= 40; i++) {
Esse valor pode variar
gotoxy (61, i-1); printf (" ");
com o computador
gotoxy (61, i); printf ("*");
for (j = 1; j <= demora; j++);
}
printf ("\n\nDigite algo para encerrar: ");
getch (); return 0;
}
Programa 6.3: Passeio do ‘*’ pelo vídeo-texto
#include <stdio.h>
#include <conio.h>
#include <conio2.h>
int main () {
int i, j, demora = 20000000;
Para i = 6, na coluna
printf ("Maximize a tela e digite algo: ");
61:
getche (); clrscr ();
for (i = 10; i <= 60; i++) {
Escreve ‘ ’ na linha 5,
gotoxy (i, 5); printf (" *");
apagando ‘*’
for (j = 1; j <= demora; j++);}
Escreve ‘*’ na linha 6
for (i = 6; i <= 40; i++) {
gotoxy (61, i-1); printf (" ");
Dá a impressão de
gotoxy (61, i); printf ("*");
movimento do ‘*’ uma
for (j = 1; j <= demora; j++);
posição p/baixo
}
printf ("\n\nDigite algo para encerrar: ");
Para i = 40, ‘*’ vai
getch (); return 0;
para a linha 40
}
Programa 6.3: Passeio do ‘*’ pelo vídeo-texto
#include <stdio.h>
#include <conio.h>
#include <conio2.h>
int main () {
int i, j, demora = 20000000;
printf ("Maximize a tela e digite algo: ");
getche (); clrscr ();
for (i = 10; i <= 60; i++) {
gotoxy (i, 5); printf (" *");
for (j = 1; j <= demora; j++);}
for (i = 6; i <= 40; i++) {
gotoxy (61, i-1); printf (" ");
Também faz ‘*’
gotoxy (61, i); printf ("*");
permanecer numa
for (j = 1; j <= demora; j++);
posição durante um
}
printf ("\n\nDigite algo para encerrar: "); t perceptível
getch (); return 0;
}
Rotinas gráficas:

Rotinas gráficas são necessárias para vários programas
profissionais

A Linguagem C padrão não define rotinas gráficas

Foram criados independentemente vários conjuntos de rotinas
gráficas, tais como o Microsoft C/C++ para DOS e o
Borland Graphics Interface (BGI)

Nestas aulas será utilizado um conjunto de rotinas,
elaborado pelo Prof. Carlos Henrique Quartucci Forster,
conjunto esse que é uma imitação da BGI
Instalação das rotinas gráficas no CodeBlocks:

Arquivos necessários (compactados em winbgi.zip):



winbgi.h: copiá-lo em CodeBlocks\MingW\include
winbgi.c: guardá-lo em alguma pasta de sua biblioteca,
para depois adicioná-lo ao projeto do programa
Uso de projetos:


Para trabalhar em modo gráfico será necessário utilizar o
conceito de projeto
Projeto é um container que armazena todos os elementos
(arquivos) que compõem um programa
Criando um novo projeto no ambiente CodeBlocks:

Clicar no menu "File" e selecionar "New", "Project... "

Escolher “Win32 GUI project" e clicar em “Go”, “Next”,
“Next”

Escolher um título para o projeto
 Pode-se dar qualquer nome válido para um arquivo, por
exemplo, “FigurasGeometricas”
Criando um novo projeto no ambiente CodeBlocks:


Escolher uma pasta onde salvar o projeto clicar em “OK”
–
Dentro dessa pasta será criada uma pasta com o nome do
projeto (por exemplo, FigurasGeometricas)
–
Dentro dessa última será criado um arquivo com o nome
do projeto, com extensão .cbp (por exemplo,
FigurasGeometricas.cbp)
Em seguida, clicar em “Next”, “Finish”
Criando um novo projeto no ambiente CodeBlocks:

Na coluna “Management” do ambiente aparecerá o projeto

Expandir “Sources”

Clicar com o botão direito do
mouse em “main.cpp” e
removê-lo
Adicionando ao projeto arquivos existentes:

Duas formas:

Clicar no menu "Project" e selecionar “Add files...”

Ou então, na coluna “Management”, clicar com o botão
direito do mouse no nome do projeto e clicar com o
esquerdo em “Add files...”

É só procurar os arquivos a serem adicionados e clicar neles

Para adicionar um novo arquivo contendo código para o
programa, deve-se editá-lo, salvá-lo e adicioná-lo ao projeto
Usando a biblioteca gráfica no projeto:

Criado o projeto, deve-se adicionar a ele o arquivo
“winbgi.c”

Ao editar o programa colocar “include <winbgi.h>” e
também uma função int main com chamadas para funções
gráficas
Programa 6.4: Desenho simples no vídeo-gráfico
#include <stdio.h>
Pede o número de colunas e
#include <winbgi.h>
linhas da janela gráfica a ser
#include <conio.h>
aberta, abrindo a em seguida
int main () {
int left, top, bottom, right, i, j;
Limpa a janela criada,
start_graphics (); getch ();
colorindo-a com a cor de fundo
setbkcolor (LIGHTBLUE);
corrente (LIGHTBLUE)
cleardevice (); getch ();
left = 160; right = 400; top = 80; bottom = 320;
for (i = top; i <= bottom; i++)
- Criar projeto
for (j = left; j <= right; j++)
- Adicionar este arquivo
putpixel (j, i, RED);
ao projeto
getch ();
- Adicionar winbgi.c ao
closegraph ( );
Colore o pixel [j, i]
projeto
return 0;
com a cor RED
- Salvar e executar
}
Lista de cores disponíveis em winbgi.h:
DARKGRAY
GREEN
MAGENTA
CYAN
GRAY
WHITE
LIGHTGREEN
LIGHTMAGENTA
LIGHTCYAN
LIGHTBROWN
ORANGE
RED
BLUE
YELLOW
LIGHTGRAY
BLACK
LIGHTRED
LIGHTBLUE
LIGHTYELLOW
BROWN
DARKBROWN
LIGHTORANGE
Programa 6.5: Desenho de várias figuras
#include <stdio.h>
#include <winbgi.h>
#include <conio.h>
int main () {
int left, top, bottom, right, i, j;
/*
Abrir janela grafica
start_graphics(); getch ();
setbkcolor(LIGHTBLUE);
cleardevice();
*/
/*
Colorir uma area quadrada de pixels
*/
getch ();
left = 160; right = 400; top = 80; bottom = 320;
for (i = top; i <= bottom; i++)
for (j = left; j <= right; j++)
putpixel (j, i, RED);
/*
Desenhar as bordas de um quadrado
*/
getch ();
left = 160; right = 400; top = 80; bottom = 320;
setcolor (YELLOW); setlinestyle(SOLID_LINE,0,1);
rectangle (left, top, right, bottom);
/*
Preencher um circulo
*/
getch (); setcolor (YELLOW);
setfillstyle(SOLID_FILL,YELLOW);
fillcircle (280, 200, 120);
/*
Desenhar as bordas de um circulo
*/
getch (); setcolor (BLACK);
circle (280, 200, 120);
/*
Preencher uma elipse com eixos paralelos aos eixos
coordenados
*/
getch (); setcolor (LIGHTGRAY);
setfillstyle(SOLID_FILL,LIGHTGRAY);
fillelipse (680, 400, 200, 150);
/*
Desenhar as bordas de uma elipse com eixos paralelos
aos eixos coordenados
*/
getch (); setcolor (RED);
elipse (680, 400, 200, 150);
/*
Desenhar um segmento de reta
*/
getch ();
setcolor (WHITE);
line (40, 480, 640, 80);
/*
Preencher um retangulo com textura e cor
*/
getch ();
left = 80; right = 560; top = 400; bottom = 450;
setcolor (DARKGRAY);
setfillstyle(DOTTED_LINE, BROWN);
setlinestyle(DOTTED_LINE,0,1);
bar (left, top, right, bottom);
/*
Preencher outro retangulo com textura e cor
getch ();
left = 100; right = 700; top = 500;
setcolor (BLACK);
setfillstyle(SOLID_FILL, BROWN);
setlinestyle(SOLID_LINE,0,5);
bar (left, top, right, bottom);
/*
Escrever um texto
*/
getch ();
outtextxy(150, 515, "Teste");
/*
Fechar janela grafica
getch ();
closegraph ( );
return 0;
}
*/
*/
bottom = 550;
Estas rotinas têm alguns
defeitos:
outtextxy só escreve junto
com o próximo desenho
ou com o fechamento da
tela
setlinestyle só desenha
linha pontilhada com
espessura mínima
Mais detalhes sobre rotinas gráficas:
Abrir os arquivos winbgi.h e winbgi.c
Consultar a Internet
Download

CES-10 Prática Cap 6