Programação de Jogos com C++ e DirectX. André Santee



Documentos relacionados
Linguagem de Programação I

Conceitos básicos da linguagem C

5 Apresentando a linguagem C

O Primeiro Programa em Visual Studio.net

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Introdução à Programação

Algoritmos e Técnicas de

LINGUAGEM C UMA INTRODUÇÃO

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Algoritmos e Programação Estruturada

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Programação de Computadores Primeiros Passos Práticos em C++

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

Criando um script simples

Superintendência Regional de Ensino de Ubá - MG Núcleo de Tecnologia Educacional NTE/Ubá. LibreOffice Impress Editor de Apresentação

BR DOT COM SISPON: MANUAL DO USUÁRIO

Criar as tabelas para um banco de dados

TUTORIAL PARA PREPARAÇÃO E IMPORTAÇÃO DE DADOS PARA. Os dados de suas coletas devem ser organizados em uma planilha eletrônica, de modo

Guia e Utilização do Visual Studio 6.0

Usando o do-file editor Automatizando o Stata

Linguagem de Programação

Implementando uma Classe e Criando Objetos a partir dela

Portal do Projeto Tempo de Ser

Algoritmos e Programação

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

1 Code::Blocks Criação de projetos

Disciplina: INF Programação I. 1 a aula prática Introdução ao ambiente do Microsoft Visual Studio 2010

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

LASERTECK SOFTECK FC MANUAL DO USUÁRIO

INTRODUÇÃO À LINGUAGEM C++

O QUE É A CENTRAL DE JOGOS?

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Manual de Instalação SIM/SINASC

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Para o OpenOffice Impress, assim como para vários softwares de apresentação, uma apresentação é um conjunto de slides.

Programação: Tipos, Variáveis e Expressões

Componentes da linguagem C++

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

1 Funções básicas de implementação de arquivos

DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR

Windows Live Movie Maker

Algoritmos e Programação. Curso de Engenharia de Produção Prof. Ms. Rogério Cardoso rogerio.cardoso@aedu.com professor@rogeriocardoso.com.

Organização de programas em Python. Vanessa Braganholo

Para o PowerPoint, assim como para vários softwares de apresentação, uma apresentação é um conjunto de slides.

Migrando para o Word 2010

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Resumo da Matéria de Linguagem de Programação. Linguagem C

Curso de Programação Computadores

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Como Gerar documento em PDF com várias Imagens

Esse produto é um produto composto e tem subprodutos

Atualizações de Software Guia do Usuário

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

Convertendo Algoritmos para a Linguagem C

Curso destinado à preparação para Concursos Públicos e Aprimoramento Profissional via INTERNET INFORMÁTICA AULA 11

SISTEMA MEDLINK E-TISS PASSO-A-PASSO (USE JUNTO COM A VÍDEO AULA)

Curso Online A Escola no Combate ao Trabalho Infantil Plataforma de Educação à Distância

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Projeto ECA na Escola - Plataforma de Educação à Distância

MANUAL WEBDRIVE. webdrive.whirlpool.com.br

MANUAL DA SECRETARIA

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

9 Comandos condicionais

ÍNDICE. Tela de Configuração Dados de Etiqueta Configuração da Impressora Configuração do Papel Itens para Inserção...

WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Guia Site Empresarial

Capítulo 2: Introdução à Linguagem C

Manual do Usuário. Protocolo

Gráficos. Incluindo gráficos

Notas de Cálculo Numérico

Informática básica Telecentro/Infocentro Acessa-SP

Atualização, Backup e Recuperação de Software. Número de Peça:

ROBERTO OLIVEIRA CUNHA

Apostilas OBJETIVA Atendente Comercial / Carteiro / Op. Triagem e Transbordo CORREIOS - Concurso Público º CADERNO. Índice

,QWURGXomRDR(GLWRUGH $SUHVHQWDo}HV3RZHU3RLQW

Manual do KGeography. Anne-Marie Mahfouf Kushal Das Tradução: Luiz Fernando Ranghetti

Como usar as Instruções de Embarque avançadas em PDF

MAIS CONTROLE SOFTWARE Controle Financeiro / Fluxo de Caixa (MCS Versão ) Índice

Programando em C++ Histórico da Linguagem C

Unidade 3: Personalizando o Excel *

Aula 4 Estatística Conceitos básicos

Criação e execução a partir do Dev-C... 1 Erros de compilação... 4 Executar programa no DOS... 4 Ajustando o programa para executar no DOS...

O Sistema foi inteiramente desenvolvido em PHP+Javascript com banco de dados em MySQL.

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos.

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Estatística no EXCEL

Neo Solutions Manual do usuário Net Contábil. Índice

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Transcrição:

Programação de Jogos com C++ e DirectX André Santee

21 Capítulo 1 Introdução à linguagem C++ O primeiro capítulo apresentará a linguagem C++ e indicará as diferenças entre C e C++. Aprenderemos como utilizar o compilador Microsoft Visual C++, além de constatar como é o funcionamento dos operadores matemáticos e de alguns conceitos de entrada e saída de dados. Histórico A linguagem C foi criada em 1972, por Dennis M. Ritchie e Brian W. Kernighan, do Bell Labs Innovations, baseando-se na linguagem B, proveniente da antiga BCPL. B foi renomeado com a primeira letra de BCPL e a linguagem C, com a segunda. C tornou-se rapidamente popular, pois une leveza, poder e velocidade em códigos bem legíveis e de fácil interpretação, sem a necessidade de entender instruções complexas como os códigos escritos em linguagem Assembly. C/C++ é utilizada no desenvolvimento de mais de 90% dos jogos profissionais, de Tetris a jogos que utilizam avançados motores como Doom III, da Idsoftware. A linguagem C++ foi introduzida por Bjarne Stroustrup, em meados de 1983, com novos e poderosos elementos e novas propostas para a programação, que contribuem para o reuso, manutenção e adição ao código. C++ possui extensas bibliotecas-padrão que utilizam em grande quantidade as características exclusivas da linguagem em relação à C. Códigos escritos em C/C++ são de fácil leitura, pois a linguagem permite separar seu código em partes e arquivos para que seja mais bem estruturado. Com C++, o programador cria bons hábitos na programação, sabendo organizar seu código de maneira legível e tornando-o mais veloz. Compilador Um compilador é um tipo de tradutor utilizado para que o desenvolvedor possa comunicarse com a máquina sem a necessidade de utilizar a própria linguagem de máquina. No caso de um compilador de C/C++, essa ferramenta traduz um código escrito em linguagem C/C++ para linguagem de máquina e gera um arquivo EXE, que pode ser executado pelo sistema operacional.

22 Programação de Jogos com C++ e DirectX Um compilador inicia o processo lendo a primeira instrução do início do programa, escrito em linhas de comando, e confere se existem erros. Se não existirem, o compilador avança para a próxima linha, sempre seguindo este processo, até a última linha (caso não haja mudanças de fluxo no código). Caso o compilador encontre algum erro no código, este será apontado de maneira que o programador saiba do que se trata. Um erro pode variar desde uma palavra desconhecida até uma falha em determinada expressão. Se nenhum erro for encontrado pelo compilador, este irá gerar um arquivo com extensão OBJ, com todas as linhas de código traduzidas, e logo em seguida será gerado um arquivo com extensão EXE, podendo ser executado pelo sistema operacional. Neste livro será utilizado o compilador Microsoft Visual C++, por ser o melhor e mais popular atualmente. Mas pode-se optar por outros compiladores gratuitos, como o Dev-C++, da Bloodshed. Todos os códigos de lições desta primeira parte do livro funcionarão tanto com o Visual C++ como com o Dev-C++, com algumas mínimas alterações. No momento em que este texto foi escrito, a página oficial do compilador Dev-C++ era http://www.bloodshed.net/devcpp.html, onde este pôde ser obtido gratuitamente. Todos os compiladores de C/C++ são semelhantes, qualquer código pode ser escrito para o compilador Visual C++ 6.0 e funcionar perfeitamente com o Dev-C++, fazendo apenas algumas modificações dependendo de quais bibliotecas foram utilizadas no código, pois nenhum compilador é idêntico a outro, principalmente no modo em que os programas são compilados. Tipos de compiladores Existem dois tipos de compiladores, os chamados compiladores simples e os compiladores com interface de desenvolvimento: Compiladores simples: compiladores cuja única função é compilar o código e indicar possíveis erros. Não possuem editor de código, ou seja, o código deve ser escrito em algum editor de texto simples, como o Bloco de Notas (Notepad) do Windows. Após escrever o código, o programador deve digitar uma linha de comando via console para compilar certo arquivo com determinado nome, que deve estar em formato C (linguagem C) ou CPP (linguagem C++). Um exemplo de compilador simples é o DJGPP, que não será utilizado para compilar os códigos neste livro, a não ser que se decida utilizá-lo. Os compiladores simples estão cada dia sendo menos utilizados, em virtude da falta de recursos fundamentais que os softwares da atualidade exigem. Não há nada melhor que programar em um compilador com ambiente de desenvolvimento especial para C/C++, com indicadores coloridos, em que basta um simples clique para compilar o programa, como ocorre com os compiladores com ambiente de desenvolvimento.

Capítulo 1 Introdução à linguagem C++ 23 Compiladores com ambiente de desenvolvimento: como característica básica apresentam um editor de texto interno, e o programador só precisa escrever os códigos e compilá-los. A maioria desses compiladores possui várias opções e preferências para facilitar a compilação e vários outros métodos de depuração. Um exemplo de indicadores de cor no código: Exemplo: #define oi Oi mundo,\n // início float pi=3.1415f; cout << pi << \n ; cout << Oi mundo!\n ; Como se pode ver, o código possui identificadores com formatação diferenciada, indicando o que cada um deles representa, o que facilita muito esta tarefa. Não se preocupe em entender esse código por enquanto. Um fator extremamente importante da linguagem C/C++ é que, por padrão, uma letra minúscula é diferente de uma letra maiúscula, por exemplo: Nome é diferente de nome, QuEiJo é diferente de Queijo, ou seja, X é diferente de x. Esta característica é conhecida como case sensitivity. C ou C++? Apesar de semelhantes, C e C++ não são e não podem ser tratadas como se fossem a mesma linguagem. C++ é uma nova linguagem que reaproveita a sintaxe e palavras-chave de C e adiciona diversos recursos extras, diferenças na estrutura do código e também de sintaxe em alguns casos. Por enquanto, vamos evitar abordar os mais profundos fundamentos de orientação a objetos da linguagem C++. Entenda C++ como uma melhoria e extensão da C. Todos os compiladores de C++ compilam perfeitamente códigos escritos completamente em C, tendo alguns cuidados e diretivas de pré-processamento inicialmente, mas os compiladores de C não podem compilar códigos com os recursos de C++. Visual C++ Visual C++ é um compilador extenso que pode parecer um pouco assustador a princípio. Antes de abordar os detalhes de seus recursos, mencionaremos um pouco as funcionalidades básicas do compilador. Essa famosa ferramenta para programação C/C++ em ambiente

24 Programação de Jogos com C++ e DirectX 32-bit (Win32), com um ambiente de trabalho baseado na interface do Windows, modo também conhecido como IDE (Integrated Development Environment). Oi mundo! Vamos criar nosso primeiro projeto no Visual C++. Abra o programa, clique File, no canto superior esquerdo da tela, como mostra a figura 1.1, e, em seguida, clique New. Figura 1.1 Tela do Visual C++. Quando você clicar New, surgirá uma janela semelhante à mostrada na figura 1.2. Figura 1.2 Tipo de arquivo.

Capítulo 1 Introdução à linguagem C++ 25 Em seguida, clique a aba Projects, como mostrado na figura 1.3. Figura 1.3 Seleção do tipo de projeto. Escolha a opção Win32 Console Application (Figura1.4), no campo Project Name, que determinará o nome do projeto, escreva Oi mundo e, em seguida, clique OK. Figura 1.4 Tipos de aplicação. Após clicar OK, será exibida outra janela (Figura 1.4), escolha An empty project e, finalmente, clique Finish. Uma nova janela surgirá e clique OK. Está tudo pronto para começarmos a escrever. Aparecerá no canto de seu editor algo parecido com o que é exibido na figura 1.5.Clique FileView no canto inferior e, em seguida, o símbolo + que está localizado ao lado do nome do projeto (Oi mundo files). A exibição ficará como ilustra a figura 1.6.

26 Programação de Jogos com C++ e DirectX Figura 1.5 Componentes do ambiente de trabalho. Figura 1.6 Arquivos do projeto. Volte ao File e New, como se estivesse fazendo tudo novamente. Mas, desta vez, clique a aba Files e, no campo File Name, escreva oimundo, depois escolha a opção C++ Source File e clique no campo Add to Project como mostra a figura 1.7. Clique OK. Figura 1.7 Tipo de arquivo fonte. Você notará que foi incluso o arquivo oimundo.cpp na pasta Source Files e que uma janela de texto surgiu na tela. É nela que os tão esperados códigos serão escritos! Primeiro programa Escreva o seguinte programa na caixa de texto intitulada oimundo.cpp:

Capítulo 1 Introdução à linguagem C++ 27 oimundo.cpp: cout << Oi mundo!\n ; Como já é tradição entre programadores, quando se está aprendendo determinada linguagem, sempre se começa com um programa que simplesmente escreve Oi mundo! na tela. Pressione Ctrl+F5 para executar o programa que acabou de escrever. Se não existir nenhum erro de compilação, a saída do programa (o resultado do código que escrevemos) será como mostra a figura 1.8. Figura 1.8 Pequeno programa que exibe a frase Oi mundo na tela. Pressione uma tecla para fechar o programa. Analisando o código A diretiva #include inclui o código de outros arquivos em seu programa. No caso deste código, a função usada do arquivo ostream.h é cout, que, na verdade, não se trata de uma função ou instrução, mas podemos tratá-la como se fosse por enquanto. main é a principal função do programa; nela é que se escreve o conteúdo do projeto que ficará entre as chaves ( e ). O que estiver entre essas chaves é o que será executado antes de mais nada pelo compilador, linha por linha, de cima para baixo. Neste caso, o conteúdo de nosso programa é uma chamada ao comando cout, que você verá a seguir. Se ainda não entendeu muito bem esse processo não se preocupe. Em C/C++, todo o espaço em branco é ignorado pelo compilador. O programa mostrado (oimundo.cpp) é praticamente o mesmo que este:

28 Programação de Jogos com C++ e DirectX cout << Oi mundo!\n ; Que seria idêntico a este também: cout << Oi mundo!\n ; A maneira inicial é a mais comum por facilitar a leitura do código. Sempre usaremos este padrão: cout << Oi mundo!\n ; Como já foi dito, a função main() é o início de um programa, e o que está entre as chaves é seu corpo, ou seja, os comandos que serão executados pelo compilador quando executada a função. A linha cout << Oi Mundo!\n ; imprime na tela a frase Oi mundo, a constante \n no fim do texto é inserida para que o cursor vá uma linha abaixo, ou seja, o próximo caractere a ser exibido na tela será mostrado na linha debaixo. A estrutura do comando pode ser vista na figura 1.9. Figura 1.9 Estrutura da chamada cout. O é uma palavra-chave da linguagem C/C++ que será apresentada mais adiante. Note que o return 0 também termina com ponto-e-vírgula, pois é uma instrução como qualquer outra. Toda instrução que está no corpo de uma função, ou seja, entre chaves, deve terminar com ponto-e-vírgula. Entenda return 0 apenas como um comando que precisa ser utilizado, mas que aparentemente não causa nenhuma alteração no programa, e todas as instruções dadas devem ficar acima do return por enquanto. Pode-se usar várias chamadas cout em um programa para imprimir várias seqüências na tela, por exemplo: oimundo2.cpp: cout << Oi mundo! ; cout << Cheguei!\n ;

Capítulo 1 Introdução à linguagem C++ 29 cout << FIM \n\n ; Compile o programa oimundo2.cpp. Para sair, basta pressionar uma tecla qualquer. O programa gerado a partir deste código é mostrado na figura 1.10. Figura 1.10 Compilando o projeto. A constante \n posiciona o cursor uma linha abaixo (retorno), e se utilizarmos dois \n (\n\n), então o cursor será posicionado duas linhas abaixo. Note que no fim de cada instrução foi inserido o caractere ; (ponto-e-vírgula) para indicar que a instrução terminou. Outras constantes Veja mais algumas constantes que são utilizadas da mesma forma que \n, mas possuem funções diferentes: Constante Significado \b Retrocesso \f Alimentação de formulário \n Nova linha \r Retorno de carro \t Tabulação horizontal \ Aspas \ Apóstrofo \0 Nulo \\ Barra invertida \v Tabulação vertical \a Sinal sonoro \N Constante octal (onde N é uma constante octal) \xn Constante hexadecimal (onde N é uma constante hexadecimal)

30 Programação de Jogos com C++ e DirectX Variáveis Variáveis são utilizadas para armazenar algum dado na memória do computador. As variáveis são extremamente importantes em qualquer programa e podem assumir o valor de um número inteiro (sem ponto decimal), real (com ponto decimal), caractere e outros tipos de dado quaisquer. Imagine um jogo onde a vida (saúde) do jogador é de 100. Este valor existe graças às variáveis, pois é nelas que está armazenado. Algo semelhante ocorreria com a munição, a posição, a quantidade de dinheiro e diversas outras propriedades. Tipos de variáveis Existem cinco tipos básicos de variáveis, cada um com suas características, seus valores e suas utilidades. Eles são: Nome Tamanho (em bytes) Valores que pode armazenar int 4-2.147.483.648 a 2.147.483.647 char 1 256 valores de caracteres float 4 1,2e-38 a 3,4e38 bool 1 true ou false double 8 2,2e-308 a 1,8e308 Existem também combinações que utilizam as palavras-chave unsigned e signed ou short e long anteriormente à declaração do tipo de dado: Nome Tamanho (em bytes) Valores que pode armazenar unsignedchar 1 0 a 255 signed char 1-127 a 127 unsigned int 4 0 a 65.535 signedint 4 Omesmo que int shortint 2 Omesmo que int unsigned short int 2 0 a 65.535 signed short int 2 O mesmo que short int long int 4-2.147.483.648 a 2.147.483.647 signedlongint 4 Omesmo que long int unsigned long int 4 0 a 4.294.967.295 long double 8 Dez dígitos de precisão decimal Declarando variáveis Para declarar uma variável em C/C++, deve-se especificar seu tipo (int, float, char etc.) e, em seguida, um nome qualquer, que será utilizado para identificá-la, por exemplo: int var;

Capítulo 1 Introdução à linguagem C++ 31 Essa instrução cria uma variável do tipo inteiro chamada var. Veja que o ; (ponto-e-vírgula) está presente. Um exemplo de declaração de variável: primeira_variavel.cpp: int idade; Como o programa primeira_variavel.cpp não utilizou a instrução cout, o cabeçalho ostream.hnão foi incluso. Atribuindo valores De nada adianta ter uma variável e não poder atribuir-lhe valores que possam ser alterados no decorrer do programa. Para isso, é preciso atribuir um valor à variável, com o uso do operador =, por exemplo: int idade=30; Neste caso, a variável idade passa a valer 30. Um programa que cria variáveis e lhes atribui valores pode ser: atribuindo.cpp: short int vida=30; float municao=20.34; char tipo= c ; Nesse programa foram declaradas variáveis do tipo short int, float e char. Como se pode ver, a variável de tipo char deve ter seu valor entre apóstrofo. Em variáveis do tipo float, seu valor pode conter ponto decimal; no caso da linguagem C/C++ (e a maioria das outras linguagens), usa-se ponto no lugar da vírgula que estamos acostumados a utilizar. Existem outras maneiras mais flexíveis de se atribuir um valor a uma variável, uma delas é: int var; var=20; Esse método é empregado em casos em que seja necessária alteração no valor de uma variável após sua declaração.

32 Programação de Jogos com C++ e DirectX Utilizando variáveis Podemos também exibir variáveis utilizando a já conhecida instrução cout, como mostra o programa coutvar.cpp: coutvar.cpp: int var1=30; double var2=20.34; char var3= c ; int var4=var1; cout << var1= << var1; cout << \nvar2= << var2; cout << \nvar3= << var3; cout << \nvar4= << var4; var3= v ; cout << \nagora var3 é igual a: << var3 << \n ; Imprimir uma variável é uma tarefa simples: em vez de um texto entre aspas, digita-se simplesmente o nome da variável. Se declararmos novamente o operador sobrecarregado <<, a função cout poderá imprimir outra entidade. Quando a variável var4 foi declarada, foilhe atribuído o valor de var1. Esse tipo de movimentação de valores é possível em qualquer linguagem de programação. Pode-se atribuir o valor de uma variável a outra como se estivéssemos atribuindo uma constante. Exemplos: valor=valor2 valor2=valor3 E daí em diante. Constantes Constantes são números ou valores quaisquer que não são variáveis. Considere a instrução int var=10;, neste caso o valor 10 é uma constante decimal, e algo semelhante ocorreria para variáveis do tipo char: char ch= c, assim o c é uma constante de caractere. Lembre-se de que nunca se deve atribuir um valor a uma constante: erro.cpp: 20=10 // ERRADO!

Capítulo 1 Introdução à linguagem C++ 33 Regras É muito importante mencionar que ao escrevermos uma constante numérica, não devemos escrevê-la entre aspas, digite apenas seu valor, seja este decimal, hexadecimal ou octal. Sempre que formos escrever uma constante de caractere, a escrevemos entre apóstrofos, e sempre que formos escrever um conjunto de caracteres (conhecido como string), devemos escrevê-lo entre aspas: regras.cpp: cout << 20 << \n ; cout << string\n ; cout << c << \n ; Declarações múltiplas de variáveis Um recurso muito útil da linguagem C/C++ é a possibilidade de declarar diversas variáveis com apenas uma palavra-chave. Por exemplo: int a, b, c, d; É o mesmo que: int a; int b; int c; int d; Veja que todas essas variáveis foram declaradas em uma linha só. Esse método é válido para qualquer tipo de dado: float a, b, c, d; Mais sobre seu compilador Abrindo projetos Se você fechou o Visual C++ e quer abrir novamente um projeto, como o Oi mundo, não basta abrir o arquivo oimundo.cpp, o que é um erro freqüente cometido por iniciantes, pois se deve abrir o projeto. Para isso, clique File e, em seguida, Open Workspace, como indicado na figura 1.11.

34 Programação de Jogos com C++ e DirectX Figura 1.11 Abrindo o ambiente de trabalho. Quando clicar, surgirá na tela a janela de escolha de arquivos-padrão do Windows; encontre oarquivo Oi mundo.dsw,quenormalmenteestaráem C:\Arquivos de Programas\Microsoft Visual Studio\Myprojects\Oi mundo\ ou no diretório que escolher. Pronto, o projeto será aberto. Clique Close Workspace para fechar o projeto. Os arquivos com extensão.dsw são arquivos de projeto do Visual C++. No compilador Dev- C++, da Bloodshed, o formato semelhante é o.dev. Erros de compilação Quando o programador digita alguma linha com um erro de sintaxe ou digitação e tenta compilar o código, normalmente o compilador acusará o erro. No caso do Visual C++ (e também do Dev-C++), o erro será mostrado na barra inferior do software (Figura 1.12). Figura 1.12 Erros de compilação. Se houver erro, o compilador tentará reconhecer o problema e indicar do que se trata segundo sua interpretação. Normalmente o aviso de erro não é muito preciso, e o programador é quem deverá analisar o trecho de código apontado à procura do(s) erro(s), ou seja, o compilador dá apenas as dicas. Se não houver erro, a mensagem do Microsoft Visual C++ 6.0 será Oi mundo.exe - 0 error(s), 0 warning(s), em outras palavras, nenhum erro e nenhum alerta.

Capítulo 1 Introdução à linguagem C++ 35 Saiba diferenciar erros de alertas. Um erro é algo grave, que impossibilita o compilador de continuar, e um alerta (warning) é apenas um aviso do compilador de que algo pode estar errado, podendo indicar variáveis declaradas, mas nunca utilizadas, acessos a locais na memória não especificados que freqüentemente causam o travamento do programa e várias outras possíveis irregularidades. Criando executáveis A função fundamental de um compilador é gerar arquivos EXE de seu código. Para gerá-los, é preciso antes saber qual a diferença entre Build e Compile na maioria dos compiladores de C/ C++: o Compile cria somente os arquivos OBJ, conecta-os e gera um executável de modo DEBUG (para depuração), e o Build gera o arquivo EXE. Para obter um arquivo executável de extensão EXE, o compilador deve antes criar os arquivos OBJ a partir das fontes.cpp, o que ocorre automaticamente ao se clicar Build. Figura 1.13 Modos de compilação. Como se pode ver na figura 1.13, o menu Build contém as opções Compile oimundo.cpp e Build Oi mundo.exe, com as teclas de atalho Ctrl+F7 para Compile e F7 para Build. Mais abaixo temos a opção Execute Oi mundo.exe, com a tecla de atalho Ctrl+F5. A função Execute Oi mund.exe realiza o Build e, então, executa o arquivo EXE. Versão release Ao compilarmos o programa no modo Build, o que estamos fazendo é criar o executável na versão para depuração (Debug). É um tipo de compilação que torna o programa mais pesado e lento, porém possibilita a indicação de erros e localizar onde estes ocorreram no código. Após o desenvolvimento do jogo ou software, não é necessária nem recomendada sua distribuição em versão de depuração.

36 Programação de Jogos com C++ e DirectX A compilação otimizada e sem declarações para depuração do compilador pode ser feita em Batch Build. No mesmo menu mostrado na figura 1.13, clique Batch Build. Uma pequena janela será aberta. Selecione as duas caixas de opção e clique Rebuild All. A versão Release do software estará localizada no subdiretório Release da pasta do projeto. Operadores matemáticos A principal razão pela qual os computadores foram criados é processar dados, o que inclui a resolução de cálculos matemáticos, como adição, subtração, divisão e multiplicação. E é nisto que a linguagem C/C++ nos auxilia muito bem. Confira a seguir quais são os operadores matemáticos: Operador Função Símbolo + Adição + - Subtração - / ou : Divisão / X ou. Multiplicação * % Resto % O operador % retorna o resto de uma divisão. Vamos a alguns exemplos simples de uso desses operadores: math.cpp: int mult=10*5; int soma=500+400; float divi=100.0/3.0; int sub=10-11; float resto=11%3; cout << mult << \n ; cout << soma << \n ; cout << divi << \n ; cout << sub << \n ; cout << resto << \n ; A figura 1.14 mostra o resultado do programa math.cpp. Figura 1.14 Saída do programa math.cpp.

Capítulo 1 Introdução à linguagem C++ 37 Neste programa, declaramos as variáveis e atribuímos valores que o computador deve calcular inicialmente e, em seguida, exibir na tela cada um deles. Também se pode imprimir o resultado dos cálculos diretamente como parâmetro para a função cout: math2.cpp: cout << 10*5 << \n ; cout << 500+400 << \n ; cout << 100.0/3.0 << \n ; cout << 10-11 << \n ; A saída do programa math2.cpp será idêntica à do math.cpp. Aprofundando Pode-se também utilizar operadores cujos elementos da operação sejam variáveis. Trata-se de uma prática muito utilizada tanto em aplicativos comuns como em qualquer jogo. Um pequeno e simples exemplo de matemática em jogos poderia ser dado quando um personagem pega uma caixa contendo energia. Esse personagem está com 45 em sua barra vital e esse item adiciona 20 pontos à energia, então esse personagem ficará com 65. Vamos pegar esse exemplo e transformá-lo em programa: life.cpp: int life=100; cout << Você tem << life << de vida\n ; cout << Você levou um tiro!\n ; life=life-55; cout << Agora você tem << life << de vida!\n ; cout << Você pegou uma caixa de vida\n ; life=life+20; cout << Agora você tem << life << de vida!\n ; Vamos entender o programa: int life=100; cout << Você tem << life << de vida\n ; cout << Você levou um tiro!\n ;

38 Programação de Jogos com C++ e DirectX O int life declara a variável do tipo inteiro life e atribuímos a esta o valor 100. Usamos o cout e a variável life para indicar a quantidade de energia. Na terceira linha, há o aviso de que o jogador levou um tiro. life=life-55; cout << Agora você tem << life << de vida!\n ; cout << Você pegou uma caixa de vida\n ; Agora, atribuímos à variável life o valor desta com uma subtração de 55. Podemos dizer que esse valor foi subtraído da mesma variável. Em seguida, mostramos na tela o novo valor de life e avisamos que o jogador pegou uma caixa de vida. life=life+20 cout << Agora você tem << life << de vida!\n ; Agora que o jogador pegou uma caixa de energia, podemos adicionar 20 à variável. Utilizamos a mesma lógica da subtração, mas agora atribuímos à life o valor dela mesma com a adição de 20. Podemos fazer várias combinações com variáveis e operadores. Uma lista com alguns exemplos de expressões seria: int a=20; int b=10; int c=5; a=b+c; c=a/2+b; b=a*-1; a=a*b*c; Utilizando parênteses Você já deve ter utilizado muito os parênteses nas aulas de matemática enquanto esteve na escola. O conceito é que toda a expressão ou valor dentro deles é resolvido primeiro. Quanto mais interna for a expressão, maior é a prioridade e inicialmente esta será resolvida. Um exemplo válido em C/C++ que demonstra o uso dos parênteses é: x=(((10+15)*-1)+((101-(110+123)))*2); O que resultará em -289. Poderíamos também remover os parênteses: x=10+15*-1+101-110+123*2; Tendo agora 232 como valor de x. O resultado diferente nos leva a concluir que as expressões entre parênteses possuem prioridade na execução da expressão. Um exemplo mais simples e completo:

Capítulo 1 Introdução à linguagem C++ 39 parenteses.cpp: int bonus=10; int EXP=5; inthp=((exp*2)-1)+bonus; intmp=((exp*3)+bonus)/2; C-Reduzido Uma grande vantagem na linguagem C/C++ está na possibilidade de utilizar operadores otimizados que permitem a redução na quantidade de instruções em linguagem de máquina no arquivo executável. Um exemplo disso são os operadores C-Reduzido, que podem ser utilizados para adicionar, subtrair, multiplicar e dividir, além de incrementar e decrementar em apenas uma unidade o valor das variáveis. Anteriormente, mostrou-se que para adicionar algum valor a uma variável pode-se atribuir-lhe o valor dela mais determinado valor. Esses operadores servem para simplificar este processo e otimizar o programa. Veja a lista deles: C-Reduzido X+=Y; X-=Y; X/=Y; X*=Y; X%=Y; Equivalente X=X+Y; X=X-Y; X=X/Y; X=X*Y; X=X%Y; Trate X como qualquer variável e Y como qualquer constante, variável ou expressão. Vamos reescrever o programa life.cpp agora aplicando esses operadores e adicionando mais linhas de código: lifecompacto.cpp: int life=100; cout << Você tem << life << de vida\n ; cout << Você levou um tiro!\n ; life-=55; cout << Agora você tem << life << de vida!\n ;

40 Programação de Jogos com C++ e DirectX cout << Você pegou uma caixa de vida\n ; life+=20; cout << Agora você tem << life << de vida!\n ; life/=3; cout << life= << life; life*=3; cout << \nlife= << life << \n ; Analisando o código life-=55; Subtraímos 55 de life, que é o mesmo que life=life-55. life+=20; O mesmo que life=life+20. life/=3; O mesmo que life=life/3. life*=20; O mesmo que life=life*20. Pratique este método sempre que possível. É mais rápido e prático. Incremento e decremento Os operadores de incremento e decremento têm basicamente função semelhante à dos +=, -=, / =, %= e *=, com a diferença de que estes apenas somam ou subtraem uma unidade do valor da variável. Eles são ++ e --. O operador ++, quando utilizado, incrementa (como já deve ter notado) e -- decrementa o valor de uma variável qualquer. Assim, x++ é o mesmo que x=x+1, com uma diferença: sempre que este operador for utilizado, este irá incrementar a variável mesmo sendo utilizada como argumento. Isto também vale para x--, que decrementa uma unidade. ++ e -- podem ser utilizados de dois modos: pós-fixado ou pré-fixado. No modo pré-fixado, o operador deve estar posicionado ao lado esquerdo do nome da variável e, no pós-fixado, ++ ou -- devem ser posicionados ao lado direito do nome da variável. Pós-fixado x++; ou x--;

Capítulo 1 Introdução à linguagem C++ 41 Quando o pós-fixado é utilizado, o programa inicialmente utiliza o valor da variável e, em seguida, incrementa ou decrementa. Por exemplo: posfix.cpp: int x=0; cout << x++ << \n ; cout << x << \n ; O programa anterior imprime na tela 0 e depois 1. Isto ocorre porque quando é declarado o ++ pós-fixado, o valor de xé utilizado antes de ter seu valor incrementado, então o programa deve imprimir 0 e depois de incrementado o valor é impresso o número 1. Pré-fixado ++x; ou --x; No modo pré-fixado, o valor é incrementado e, em seguida, utilizado. Veja o exemplo posfix.cpp alterado para pré-fixado: prefix.cpp: int x=0; cout << --x << \n ; cout << x << \n ; Desta vez foi impresso na tela o valor -1 duas vezes. Pois aqui primeiro a variável foi decrementada e, em seguida, seu valor foi utilizado. Operador de negação Este operador inverte o valor de alguma variável ou constante. Vamos considerar x=10. Se aplicarmos o operador ao x, atribuindo a ele próprio: x=-x;, x passará a valer -10 (10 negativo). Basicamente é como se multiplicássemos a variável por -1. Diferentemente dos operadores reduzidos ++ e --, quando utilizamos - para passagem de uma variável como argumento ou elemento de expressão, seu valor não será alterado, mas o valor de retorno sim. Veja o exemplo:

42 Programação de Jogos com C++ e DirectX inverte.cpp: int x=123; cout << x << \n ; cout << -x << \n ; cout << x << \n ; x=-x; cout << x << \n ; O resultado deste programa é: 123 123 123 123 O operador de negação é igual ao de subtração, porém esses operadores não são os mesmos para o compilador. Se formos utilizar o operador de subtração ou qualquer outro junto a este, devemos escrevê-lo entre parênteses: y=x-(-x);. Um exemplo: inverte2.cpp: int x=123; int y=321; y=x-(-y); x=y+(-x); cout << x << \n ; cout << y << \n ; Comentários Os comentários podem ser utilizados para inserir textos em nosso código sem alterar o programa. São muito úteis ao explicar alguma linha, marcar algum trecho no código e para diversos outros propósitos. Sempre que o compilador encontrar a seqüência de caracteres //, tudo o que estiver deste local até o fim da linha será ignorado, e normalmente o código comentado ficará de uma cor diferente do resto do código se estivermos editando o código em um compilador com interface de desenvolvimento.

Capítulo 1 Introdução à linguagem C++ 43 Outra maneira de inserir comentários é entre /* e */, tudo que estiver entre esses pares de caracteres será ignorado. Veja o programa comentario.cpp: comentario.cpp: #include<ostream.h> // para usar o cout /* Este programa faz simples cálculos e imprime na tela */ // função main() do programa cout << 10*5 << \n ; // cout << 500+400 << \n ; // cout << 100.0/3.0 << \n ; // os cálculos cout << 10-11 << \n ; // // cout << Este texto não será impresso ; // fim do código Teste o código comentário.cpp e observe que os comentários não afetam em nada a compilação e execução do programa. Diretivas O papel da diretiva de compilação é passar informação ao compilador, e não ao computador. A diretiva mais utilizada por nós até agora foi a #include, mostrada na maioria dos exemplos deste capítulo. As diretivas devem possuir o operador # como prefixo, e apenas uma diretiva por linha deve ser chamada. A seguir, veremos duas das principais diretivas que vamos utilizar por enquanto. #include A diretiva #include concatena o código de determinado arquivo no local onde foi chamada. Isto vale para tudo que for declarado, desde variáveis até funções e classes. Por exemplo: caso se declarem algumas variáveis dentro de um arquivo separado, assim que for chamado o #include deste arquivo, o compilador tratará todo o código incluso como parte do código onde esta fonte foi chamada. Normalmente, em vez de.c ou.cpp, a extensão do arquivo chamado no #include é.h ou.hpp (primeira letra da palavra header, o pp indica plus-plus ou ++). #include funcs.h O nome do arquivo deve ficar sempre entre <> (caso esteja localizado próximo aos outros arquivos de cabeçalho-padrão do compilador ou exclusivos do projeto) ou aspas (caso seja de uso exclusivo do projeto atual, mas não pertença a uma biblioteca ou framework). O arquivo deve estar localizado no mesmo diretório de seu projeto ou no diretório include do compilador.

44 Programação de Jogos com C++ e DirectX #define Esta diretiva basicamente permite a permutação de uma palavra por outra palavra-chave ou expressão. Tanta simplicidade não indica que este recurso seja de pouca utilidade, muito pelo contrário, visto que evita muitas vezes a necessidade de reescrever uma constante ou palavra-chave complexa e de difícil memorização. O #define funciona da seguinte maneira: #define MOSTRA cout << Oi mundo ; O novo identificador MOSTRA, à direita do #define, indica o nome do valor. E cout << Oi mundo ; é o valor de MOSTRA. Após essa declaração, sempre que for encontrada no código-fonte a palavra MOSTRA, esta será substituída por cout << Oi mundo ; sem alterar em nada o que foi escrito no restante do código. Um exemplo: def.cpp: #define MOSTRA cout << Oi mundo ; #define PI 3.1415 MOSTRA cout << \npi= <<PI<< \n ; Nesse exemplo, o compilador interpreta MOSTRA como cout << (...) e PI como 3.1415. Lembre-se de que nunca devemos inserir espaço no nome de uma constante #define: def-erro.cpp: #define OI MUNDO cout << Oi mundo\n ; // está errado! OI MUNDO // está errado! Quando o compilador encontrar o primeiro espaço, será definida a primeira palavra como sendo o parâmetro e, então, esse código será interpretado da seguinte maneira: MUNDO cout Oi mundo\n ; MUNDO // está errado!

Capítulo 1 Introdução à linguagem C++ 45 O que é grosseiramente errôneo. Espaço em qualquer nome de identificador deve ser substituído por sublinhado (_), como no exemplo corrigido do programa def-erro.cpp: def.cpp: #define OI_MUNDO cout << Oi mundo\n ; // Corrigido! OI_MUNDO // Corrigido! Agora, sim, está tudo certo! Obtendo valores do teclado Em qualquer software é necessário, de algum modo, promover a entrada de dados pelo usuário, o que é possível com a instrução cin, que solicita a entrada de algum valor pelo teclado, seja este uma string, char, float, double, int ou qualquer outro dado. O cin encontra-se no arquivo de cabeçalho istream.h e sua sintaxe é: cin >> variável; O operador >> indica que esta será uma entrada de dado (lembre-se do operador << que significa saída de dado). Com isso, quando o usuário digitar um valor no teclado, este será automaticamente atribuído à variável passada como parâmetro. Vamos ao nosso primeiro programa utilizando o cin: cin.cpp: #include <istream.h> // temos um novo header aqui! int idade; int dia; cout << Qual sua idade? ; cin >> idade; cout << \nque dia é hoje? ; cin >> dia; cout << \n\nsua idade: << idade; cout << \nhoje é dia << dia <<.\n ; Após executado, cin.cpp seguirá os seguintes passos como mostra a figura 1.15.

46 Programação de Jogos com C++ e DirectX Vamos compreender o programa cin.cpp: int idade; int dia; Figura 1.15 Saída do programa cin.cpp. Declaramos as variáveis que serão utilizadas durante o programa. cout << Qual sua idade? ; cin >> idade; cout << \nque dia é hoje? ; cin >> dia; Primeiro, imprimimos na tela a pergunta: Qual sua idade? e esperamos que o usuário digite sua idade ou qualquer número. Já na segunda linha da função main, o cin desempenha seu papel: espera que ENTER seja teclado após um valor ser digitado. Este valor será atribuído à idade. Realizamos o mesmo processo novamente, mas desta vez perguntando que dia é hoje e armazenando esse valor na variável dia. cout << \n\nsua idade: << idade; cout << \nhoje e dia << dia <<.\n ; Imprimimos na tela o conteúdo das variáveis para nos certificar de que os valores realmente foram alocados. Agora vamos escrever programas mais interessantes! dias.cpp: #include <iostream.h> int idade; cout << Qual sua idade? ; cin >> idade; cout << \nvocê tem << idade*365 << dias de idade!\n ; Este programa pergunta a idade do usuário e revela quantos dias de vida ele possui aproximadamente.

Capítulo 1 Introdução à linguagem C++ 47 porcento.cpp: #include <iostream.h> double val1; double val2; cout << Digite quanto % você deseja: ; cin >> val1; cout << \ndigite o valor: ; cin >> val2; cout << val1 << % de << val2 << é <<(val2/100)*val1 <<!\n\n ; Esse programa pede dois valores e informa sua porcentagem. printf e scanf A necessidade da abordagem deste par de funções da linguagem C se deve ao fato de que você provavelmente verá e terá vontade de analisar códigos-fonte não pertencentes aos deste material. A maioria desses códigos utiliza esses comandos, que são semelhantes à cin e cout. printf O printf é uma espécie de cout da antiga linguagem C. Funciona de maneira semelhante, com algumas diferenças. O scanf é como um cin, mas também com algumas diferenças de sintaxe. Por exemplo: cout << Oi mundo ; Com o printf seria: printf( Oi mundo ); O resultado seria o mesmo para ambas as funções. As funções printfe scanf encontram-se no arquivo-cabeçalho stdio.h. Especificador de formato Um tipo de constante exclusivo das funções do arquivo stdio.h são as de string (texto), que possuem como prefixo o caractere %. Essas constantes são utilizadas para possibilitar a impressão, dentro de um texto, de valores contidos em variáveis, por exemplo: int x=10; char ch= a ; printf( O numero é: %d, e a letra é: %c\n, x, ch);

48 Programação de Jogos com C++ e DirectX Na exibição do texto final, %d e %c serão substituídos pelos valores de x e ch, passados como parâmetro em ordem de declaração após a declaração da string. Veja a tabela dessas constantes: Código Formato %c Caractere %d Inteiro decimal sinalizado %i Inteiro decimal sinalizado %e Notação científica (e minúsculo) %E Notação científica (E maiúsculo) %f Ponto flutuante decimal %g Usa %e ou %f, o que for mais curto %G Usa %E ou %f, o que for mais curto %o Octal não sinalizado %s String %u Inteiro decimal não sinalizado %x Hexadecimal não sinalizado (letras minúsculas) %X Hexadecimal não sinalizado (letras maiúsculas) %p Exibe um ponteiro %% Mostra o símbolo % Todos estes funcionam da mesma maneira. Quando é definido um tipo com %_ dentro da string, a função vai esperar uma variável desse tipo após a string ser passada. Lembre-se de que são opcionais em uma chamada printf. scanf Já a função scanf possui uma diferença maior para o cin. Vamos comparar códigos equivalentes usando cada uma dessas funções: int x; scanf( %d, &x ); É o mesmo que: int x; cin >> x; Na função scanf, primeiramente devemos especificar o tipo com uma string (ex.: %f para float, %c para char, %u ou %i para int), diferentemente da instrução cin, que encontra o tipo automaticamente. Note que há um operador & prefixado à variável x. Por enquanto saiba apenas que este deve estar sempre presente.