CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VI Desenhos e Animação Arquivos fornecidos para a aula: CES10 Prat 6 2013.ppt: Slides da aula lab_6_ces10_2013.doc: proposta do Lab 6 Graficos_DevCpp.pdf: instruções do Prof. Paulo André para utilização do modo gráfico (Aba Artigos da página do prof) Graficos_DevCpp.zip: arquivos com código de rotinas gráficas para incluir no Dev (Aba Códigos da página do prof) Instrucoes_CONIO2.pdf: instruções do Prof. Paulo André para controle do cursor no modo texto do Dev (Aba Artigos da página do prof) conio2.zip: arquivos para a biblioteca conio2 a ser utilizada no Dev (Aba Códigos da página do prof) Programa 6.1: Posicionamento do cursor no vídeo-texto Copiar, salvar e clrscr (conio.h): #include <stdio.h> executar no apaga a tela #include <conio.h> Borland void main () { \r: reescreve a 1ª int col, lin; char c; linha da tela printf ("Maximize a tela e digite algo: "); Posiciona o cursor getche (); nas coordenadas 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: "); Apaga 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(); } Para executar no Dev, devem ser copiados os arquivos referentes ao conio2.h } Programa 6.2: Desenho de segmentos de retas com ‘*’ Copiar, salvar e #include <stdio.h> executar no #include <conio.h> Borland void main () { int a, b, i; printf ("Maximize a tela e digite algo!"); getche (); clrscr (); for (a=1, b=1, i=1; i<=10; a+=8, b+=2, i++) { gotoxy (a, b); printf ("********"); } printf ("\n\nDigite algo para encerrar: "); getch (); Sempre posiciona o cursor } Na tela na posição [a, b] Inicialmente [a, b] = [1, 1] A cada repetição a+=8 e b+=2 Programa 6.3: Determinação dos limites do gotoxy Copiar, salvar e #include <stdio.h> executar no #include <conio.h> Borland void main () { int i; printf ("Maximize a tela e digite algo!"); getche (); clrscr (); for (i=1; i<=80; i++) { gotoxy (i, i); printf ("%d", i%10); } printf ("\n\nDigite algo para encerrar: "); getch (); } O programa vai tentar escrever o valor de i%10 na diagonal de uma tela 80x80 Ver resultado a seguir Limites: Coluna 80 Linha 44 Programa 6.4: Passeio do ‘*’ pelo vídeo-texto Copiar, salvar e #include <stdio.h> executar no #include <conio.h> Borland void main () { int i, j, demora = 100000000; 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 (); } Programa 6.4: Passeio do ‘*’ pelo vídeo-texto Para i = 10, na linha 5: #include <stdio.h> #include <conio.h> Escreve ‘ ’ na coluna void main () { 10 e ‘*’ na coluna 11 int i, j, demora = 100000000; printf ("Maximize a tela e digite algo: "); Para i = 11, na linha 5: getche (); clrscr (); for (i = 10; i <= 60; i++) { Escreve ‘ ’ na coluna gotoxy (i, 5); printf (" *"); 11, apagando ‘*’ for (j = 1; j <= demora; j++); Escreve ‘*’ na coluna } 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 (); para a coluna 61 } Programa 6.4: Passeio do ‘*’ pelo vídeo-texto #include <stdio.h> #include <conio.h> void main () { int i, j, demora = 100000000; Faz ‘*’ permanecer printf ("Maximize a tela e digite algo: "); numa posição durante getche (); clrscr (); um t perceptível for (i = 10; i <= 60; i++) { gotoxy (i, 5); printf (" *"); O valor 100.000.000 for (j = 1; j <= demora; j++); para ‘demora’ é } 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 (); } Programa 6.4: Passeio do ‘*’ pelo vídeo-texto #include <stdio.h> #include <conio.h> void main () { int i, j, demora = 100000000; printf ("Maximize a tela e digite algo: "); Para i = 6, na coluna getche (); clrscr (); 61: for (i = 10; i <= 60; i++) { gotoxy (i, 5); printf (" *"); Escreve ‘ ’ na linha 5, for (j = 1; j <= demora; j++); apagando ‘*’ } 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 (); para a linha 40 } Programa 6.4: Passeio do ‘*’ pelo vídeo-texto #include <stdio.h> #include <conio.h> void main () { int i, j, demora = 100000000; 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 (); } 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á utilizada a BGIm, que é uma versão da BGI para o ambiente Dev C++ Instalação da Biblioteca BGI no ambiente Dev C++: Arquivos necessários (compactados em Graficos_DevCpp.zip): graphics.h: copiar em C:\Dev-Cpp\include libbgi.a: copiar em C:\Dev-Cpp\lib 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 Dev-C++: Clicar no menu "File" e selecionar "New", "Project... " Escolher "Empty Project" e certificar-se de que a opção "C++ project" está selecionada Escolher um nome para o projeto Pode-se dar qualquer nome válido para um arquivo O nome do projeto será o nome do executável a ser gerado Após escolher o nome, clicar "OK " O Dev-C++ irá perguntar onde salvar o projeto: Escolher um diretório apropriado e salvar o projeto Criando ou adicionando arquivos ao projeto: Duas formas: Clicar no menu "File" e selecionar "New Source File" ou Clicar no menu "Project" e selecionar "New File" Então é só editar o arquivo com o programa e salvar Configuração do uso da biblioteca gráfica no projeto: Criado o projeto, é preciso mandar o Dev-C++ utilizar a biblioteca BGIm (que implementa a BGI para o Dev-C++) Isto é feito através da janela "Project Options" A seguir, um conjunto de passos para realizar essa tarefa Passos para a configuração do uso da BGIm: Clicar no menu "Project" e escolher "Project Options" Clicar na tab "Geral" e selecione "Win32 GUI" Clicar na tab "Parameters" No campo "Linker", digite o seguinte texto: -lbgi -lgdi32 Clicar OK -lcomdlg32 -luuid -loleaut32 -lole32 Programa 6.5: Desenho simples no vídeo-gráfico #include <stdio.h> #include <graphics.h> int main () { int i, j, left, top, bottom, right; initwindow (700, 500, "Primeiro Programa Grafico"); getch (); left = 10; right = 600; top = 10; bottom = 200; for (i = top; i <= bottom; i++) - Criar projeto for (j = left; j <= right; j++) - Adicionar este arquivo putpixel (j, i, MAGENTA); ao projeto - Configurar o projeto getch (); para o uso da BGI closegraph ( ); - Salvar e executar } Programa 6.5: Desenho simples no vídeo-gráfico #include <stdio.h> Abre uma janela com título, #include <graphics.h> de 700 colunas e 500 linhas int main () { int i, j, left, top, bottom, right; initwindow (700, 500, "Primeiro Programa Grafico"); getch (); left = 10; right = 600; top = 10; bottom = 200; for (i = top; i <= bottom; i++) for (j = left; j <= right; j++) putpixel (j, i, MAGENTA); getch (); closegraph ( ); Colore o pixel [j, i] com } a cor MAGENTA Lista de cores disponíveis na BGI: Programa 6.6: Desenho de várias figuras #include #include int main int i, /* <stdio.h> <graphics.h> () { j, left, top, bottom, right; Abrir janela grafica */ initwindow (700, 500, "Varias Figuras"); /* 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 (); setcolor (YELLOW); rectangle (left, top, right, bottom); /* Desenhar as bordas de um circulo */ getch (); setcolor (LIGHTBLUE); circle (280, 200, 120); /* 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 = 420; setfillstyle(11, LIGHTBLUE); bar (left, top, right, bottom); /* Escrever um texto */ getch (); setbkcolor(BROWN); outtextxy(50, 250, "Teste"); /* Fechar janela grafica getch (); closegraph ( ); } */ Mais detalhes sobre rotinas gráficas: Manual do Prof. Paulo André Castro Sites da Internet