11.11.2012 Views

Primeira Apostila - Noz Eh Maker

Primeira Apostila - Noz Eh Maker

Primeira Apostila - Noz Eh Maker

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

(Sere)Curso de Jogos CDJ<br />

<strong>Apostila</strong> I<br />

Conceitos de C/C++ I<br />

CasaDosJogos –<br />

http://www.casadosjogos.com.br<br />

2007


Introdução<br />

• Histórico e Apresentação da Linguagem:<br />

Linguagem C<br />

A linguagem C foi desenvolvida na década de 70, por Dennis Ritchie<br />

e Ken Thompson, baseando-se na linguagem B, e implementado para<br />

sistemas operacionais UNIX. Tanto C quanto B derivam da primitiva<br />

linguagem BCPL, onde B é a primeira letra de BCPL, e C, a segunda. C<br />

influenciou várias linguagens como D e Euphoria.<br />

C é uma linguagem de programação estruturada, de médio nível, e<br />

tem como ponto forte sua eficiência, leveza, poder e velocidade com<br />

códigos bem legíveis e de fácil interpretação. Uma de suas maiores<br />

vantagens é sua aproximação com a linguagem de leitura de máquina, ao<br />

mesmo tempo que mantêm grandiosa abstração de dados complexos ao<br />

programador.<br />

Linguagem C++<br />

De forma bastante “grosseira”, podemos ver o C++ como uma<br />

“atualização” ou “extensão” da linguagem C, mas é bem mais que isso.<br />

Basicamente, é definida por Bjarne Stroustrup como “C with classes”, ou C<br />

com classes. Esses conceitos de classe veremos futuramente no próximo<br />

curso.<br />

Foi desenvolvida em 1983, trazendo consigo principalmente<br />

vantagens ligadas à orientação a objetos, reutilização e aproveitamento de<br />

código, e muita facilidade na hora de organizar e montar seu código fonte.<br />

Essa linguagem influenciou várias outras, como C#, Java, D, PHP etc.


• Compiladores:<br />

Um compilador é um tipo de aplicativo que cria uma “camada de<br />

abstração” entre o programador e o computador. Em outras palavras, o<br />

compilador traduz tudo que é escrito por um usuário de um jeito que a<br />

máquina entenda, e de forma que interprete essa informação.<br />

Em todo o universo computacional, existem várias linguagens de<br />

programação categorizadas da seguinte forma:<br />

• Alto Nível (C++, Java)<br />

• Médio Nível (C, Pascal)<br />

• Baixo Nível (Assembly)<br />

Quanto mais baixo o nível, mais próximo estamos da linguagem de<br />

montagem da máquina. Um exemplo de linguagens de baixo nível que<br />

conhecemos é a linguagem de bits (0 ou 1) e Assembly (que trabalha<br />

diretamente com operações de registros e endereços de memória).<br />

Quando falamos de médio e alto nível, falamos de linguagens que<br />

cada vez mais “encobrem” detalhes na hora de implementar, e quanto<br />

maior o nível, menos detalhes específicos ligados a hardware teremos que<br />

nos preocupar. Por exemplo: se estivermos mexendo com C++, não<br />

precisaremos nos preocupar com qual endereço de memória ou parte física<br />

do disco teremos que guardar a informação. O compilador e a linguagem de<br />

programação se encarregará disso automaticamente.<br />

O compilador cria a “ponte de comunicação” entre uma linguagem<br />

humanamente simples e prática ao ser humano trabalhar, sem perder todo<br />

o excesso de informação e detalhes que a máquina precisa.<br />

Um compilador trabalha passo-a-passo da seguinte forma:<br />

• O compilador lê linha após linha (levando em conta o fluxo de<br />

código), verificando se toda a sintaxe foi descrita corretamente<br />

(se estiver errada, retornará uma mensagem de erro<br />

detalhada ao usuário);<br />

• Traduz o código-fonte de C++ (por exemplo) pra linguagem de<br />

máquina;<br />

• Se tudo for interpretado corretamente, ele irá criar um arquivo<br />

com extensão .OBJ, com todas as linhas traduzidas, e um<br />

arquivo .EXE, que é executado pelo sistema operacional;<br />

Outro aspecto importante são as evoluções na área de<br />

compiladores, que cada dia mais deixam de ser apenas “interpretadores de<br />

comandos”, e se tornam verdadeiros ambientes de desenvolvimento,<br />

trazendo consigo várias opções de compilação, depuração, bibliotecas<br />

prontas etc. Um exemplo de ambientes de desenvolvimento nesse estilo<br />

são aplicativos como o Eclipse e o Microsoft Visual Studio.


• C ou C++:<br />

Muitas pessoas confundem a relação entre C e C++. Trata-se de<br />

duas linguagens diferentes.<br />

O C é uma linguagem de programação estruturada, de médio nível,<br />

sendo bastante semelhante à linguagem Pascal (apesar de ter uma sintaxe<br />

bem diferente). O C++ reaproveita alguns conceitos e sintaxes do C, ao<br />

mesmo tempo em que acrescenta novos conceitos interessantes de<br />

bibliotecas e programação voltada à orientação a objetos.<br />

Não é o propósito desse curso detalhar as diferenças entre<br />

orientação a objetos e programação estruturada, por isso vamos a eles de<br />

forma sucinta:<br />

• Programação estruturada: Blocos de texto interpretados logicamente da<br />

primeira a última linha, sem modificações no fluxo de leitura.<br />

• Orientação a objetos: Vemos o conceito de classes e objetos. Ao invés de<br />

criarmos blocos de programas únicos e lidos da primeira a última linha, na<br />

orientação a objetos podemos interligar cada bloco de código em uma e<br />

mais classes, que podem ser lidas e executada por outras<br />

simultaneamente, da mesma forma em que o fluxo de leitura é<br />

completamente variável ao programador, aumentando o reaproveitamento e<br />

organização de código-fonte.


Usando o compilador<br />

• Criando projeto no Microsoft C++ 2005 Visual Studio<br />

Express:<br />

Primeiro passo:<br />

1) Baixe-o em:<br />

http://msdn.microsoft.com/vstudio/express/visualc/default.aspx/, instale e<br />

execute o Visual Studio.<br />

2) Quando o programa abrir, na guia principal do programa ao alto, clique<br />

em File<br />

3) Depois clique em New e depois Project, ou simplesmente aperte<br />

Ctrl+Shift+N<br />

Segundo passo:<br />

Se abriu uma janela escrita "New Project", então em "Project Files"<br />

escolha "Win32" e em "Templates", clique em "Win32 Console<br />

Application". Agora embaixo em "Name" dê qualquer nome ao projeto (por<br />

exemplo, chame-o de teste) e aperte OK.<br />

Terceiro passo:<br />

Em "Win 32 Application Wizard" aperte "Next >".<br />

Quarto passo:<br />

Em "Application Type" deixe "Console Application" como está, e abaixo,<br />

em "Additional options" marque a opção "Empty Project". Agora aperte<br />

"Finish".<br />

Quinto passo:<br />

1) É aqui que mais as pessoas confundem. Você sempre deve criar um<br />

projeto (como fizemos até o quarto passo) e em seguida adicionar os<br />

códigos fonte e coisas do gênero que ficam vinculados ao projeto criado,<br />

ok? Adicionaremos uma página de código fonte pra gerarmos nosso<br />

primeiro código.<br />

2) Agora na guia do alto, procure "Project" e depois "Add New Item". Ou<br />

apenas aperte CTRL+SHIFT+A<br />

Sexto passo:<br />

Com certeza em "Visual Studio installed templates" a opção "C++ File<br />

(.cpp)" deve estar marcada. Só vá em "name", dê um novo nome como<br />

teste1 e aperte Add.


Sétimo passo:<br />

Copie esse código como está abaixo, e cole no compilador:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


• Criando projeto no Dev-C++ 4.9.9.2:<br />

Primeiro passo:<br />

1) Baixe-o em: http://prdownloads.sourceforge.net/dev-cpp/devcpp-<br />

4.9.9.2_setup.exe, instale e execute-o<br />

2) Quando o programa abrir, na guia principal do programa ao alto, clique em File<br />

3) Depois clique em New Project<br />

Segundo passo:<br />

1) Se abriu uma janela escrita "New Project", então na guia "Basic" escolha<br />

"Empty Project".<br />

2) Marque "C++ Project" abaixo.<br />

3) Dê um nome ao projeto.<br />

3) Aperte OK.<br />

Terceiro passo:<br />

Em "Create New Project" salve o projeto em alguma pasta de sua escolha.<br />

Quarto Passo:<br />

Aperte CTRL+N ou em “File”, e quando o compilador perguntar se “deseja anexar<br />

esse fonte ao projeto atual?” diga que sim.<br />

Agora basta colar o seguinte código na página de código-fonte em branco:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


Sétimo passo:<br />

Deve abrir uma janela mostrando a mensagem "Estou pronto pra começar o curso<br />

de C++ da CDJ!" e algo como "Aperte qualquer tecla para continuar...". Se isso<br />

aparecer corretamente, então o compilador está em perfeito estado para uso!<br />

• Erros de compilação:<br />

Basicamente, quando terminamos de criar nosso código-fonte, o<br />

compilador realiza dois processos até termos o aplicativo final, que são: a<br />

compilação e a execução.<br />

Quando compilamos um código-fonte, realizamos um processo de<br />

verificação e interpretação de código, até ser possível que a máquina<br />

“entenda” e possa executar esses comandos. Isso é a compilação, e é<br />

nesse processo que se verifica se o código foi descrito corretamente.<br />

Para isso, quando é feita a compilação, na barra inferior desse<br />

aplicativo, são demonstrados status de verificação e integridade de erros, e<br />

o compilador retorna uma mensagem de aviso, se o código apresentar<br />

erros (digitação incorreta do programador) ou não. Se ele tiver erros, todo o<br />

processo de compilação é interrompido, e o compilador especifica qual é a<br />

causa da falha. Não se pode chegar no código-fonte final se houver erros<br />

de compilação.<br />

Outra informação importante, além dos avisos de erros, são os<br />

“warnings”. A diferença entre os dois vêm do fato de um “warning” não<br />

impossibilitar a execução de um código-fonte, mas sim que futuramente ele<br />

pode causar erros quando o programa já estiver sendo executado (por<br />

exemplo, um acesso a endereço de memória não especificado).<br />

• Gerando Executável:<br />

Feita a compilação, se ela foi executada corretamente, torna-se<br />

possível criar uma versão .EXE de seu código. Basta apenas clicar na<br />

opção Build de um compilador (no caso do visual Studio, é só apertar F7<br />

num código já compilado, lembre-se disso!).<br />

No processo de geração de executável, o compilador se utiliza de<br />

arquivos .OBJ (gerados na compilação), e se baseia em arquivos .CPP<br />

(arquivos de código-fonte de C++) para gerar o código .EXE final.


Primeiro programa<br />

“Hello World” é a clássica aplicação que todo programador iniciante<br />

cria quando começa a estudar uma linguagem, sendo um tipo de programa<br />

bem simples. Trata-se apenas de uma mensagem de texto “OLÁ MUNDO!”<br />

mostrada em tela.<br />

Fizemos isso na hora que criamos o projeto, agora vamos analisar o<br />

código linha após linha:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


aquela linha (apesar de que nem sempre você coloca ponto e vírgula,<br />

iremos verificar isso com o tempo).<br />

int main()<br />

{<br />

//insira todo o código do aplicativo aqui<br />

return 0;<br />

}<br />

Aqui estamos definindo a função principal (main) do programa. Ela<br />

sempre é a primeira a ser executada obrigatoriamente pelo compilador, e<br />

todo o conteúdo do programa é executado nesse bloco de informação,<br />

entre as chaves { e }.<br />

O int é a definição de função integer (função de números inteiros).<br />

Iremos explicar melhor sobre tipos de dados (inteiros, reais) no próximo<br />

capítulo.<br />

Todos os comandos do seu aplicativo devem estar onde eu coloquei<br />

//insira todo o código do aplicativo aqui . Por exemplo, o comando cout<br />

que usamos.<br />

Já o return 0; tem a ver com o conceito de função. De forma bem<br />

resumida, toda função é um pequeno bloco de código fonte que retorna<br />

imediatamente um dado, ao final de sua execução. Óbvio que dependendo<br />

do tipo de função que seja, pode ser que não retorne nada. Ao executar o<br />

Return 0; estamos dizendo ao compilador que a função finalizou todas as<br />

suas tarefas, e que agora deve retornar ao compilador um resultado (ou<br />

valor) qualquer. Não se preocupe ainda com isso.<br />

A princípio, pense nisso como um comando que precisa ser utilizado<br />

em blocos da função int main(), de forma padrão.<br />

cout


}<br />

No Dev-C++ 4.9.9.2 é a mesma idéia, mas apenas com a utilização<br />

de mais uma função:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

cout


Variáveis<br />

• Conceito:<br />

São objetos que possuem a função de armazenar certos valores<br />

(como números, textos) que podem ser utilizados e trabalhados ao longo de<br />

um código.<br />

Por exemplo, pense num jogo, e que precisamos armazenar ao<br />

longo da partida informações vitais como vida (HP) do personagem, pontos de<br />

mana (SP), pontos de experiência (EXP), munição da arma, dinheiro<br />

armazenado, nome do jogador etc. Tudo isso ficaria armazenado em variáveis.<br />

Elas são vitais num programa.<br />

• Tipos de Variáveis:<br />

Existem diversos tipos, mas visando o nosso curso, vamos falar dos<br />

5 exemplos básicos mais comuns, que são:<br />

• Int (inteiros): são números inteiros comuns, que não aceitam valores<br />

decimais, frações, nem nada do gênero (exemplo: 1, 45, 87, 914). Uma<br />

variável int pode armazenar do valor -2.147.483.648 a 2.147.483.648.<br />

• Char (caracteres): Armazena um único caracter, de um possível conjunto<br />

de símbolos e letras. Podem armazenar até 256 valores de caracteres<br />

diferentes.<br />

• Float (reais): diferente dos inteiros, o float guarda valores numéricos<br />

ligados ao universo dos números reais (exemplo: 2,41 , 4,17 , 8,9592). Ele<br />

pode armazenar de 1,2e-38 a 3,4e38 (e = número elevado a)<br />

• Boolean (lógico): apenas determina valor do tipo true ou false, ou apenas<br />

verdadeiro ou falso. Por exemplo, se num jogo temos uma porta que só<br />

pode ser aberta com uma chave, podemos usar uma condição booleana<br />

que armazena se o jogador está com a chave ou não. Se estiver, é true,<br />

caso contrário, false.<br />

• Double: É apenas o valor de float estendido. Se for utilizar uma variável<br />

que precise de mais valores do que o float suporta, use double. Esse<br />

armazena de 2,2e-308 a 1,8e308.


• Como usar variáveis:<br />

Declarando (criando) variáveis<br />

Basta apenas definir seu tipo (int, char, float, double) junto de um<br />

nome qualquer, pra identificá-la. Por exemplo:<br />

Int var;<br />

Nesse exemplo, criamos uma variável do tipo número inteiro,<br />

chamada var. Não se esqueça do ponto e vírgula!<br />

Mais exemplos:<br />

Int main(){<br />

int pontos;<br />

return 0;<br />

}<br />

int main(){<br />

float raiz;<br />

return 0;<br />

}<br />

Atribuindo valores<br />

Vamos supor que ao criar um jogo, temos um personagem com<br />

pontos de vida no total de 100 pontos. Faríamos o seguinte (se a variável em<br />

questão já tiver sido declarada):<br />

pontos_de_vida = 100;<br />

Assim estamos definindo que a variável pontos_de_vida guarda o<br />

valor numérico inteiro 100.<br />

Vamos supor que, na segunda linha do código, o personagem morre.<br />

Assim:<br />

pontos_de_vida = 0;


Teríamos então, o seguinte código:<br />

Teste o seguinte código:<br />

int main(){<br />

//declaramos a variável<br />

int pontos_de_vida;<br />

//aqui a vida do personagem principal é 100<br />

pontos_de_vida = 100;<br />

//aqui a vida do personagem principal é 0<br />

pontos_de_vida = 0;<br />

return 0;<br />

}<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

int valor = 20;<br />

cout


Por fim, um exemplo que se utiliza de valores booleanos e de<br />

caracteres (bool e char especificamente):<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

char caracter = 'c';<br />

bool logico = true;<br />

cout


Operadores Matemáticos<br />

• Conceito:<br />

Tendo em vista o estudo de variáveis numéricas, torna-se necessário<br />

estudar operadores que sejam aplicados a esses objetos. Falamos de cálculos<br />

matemáticos como adição, subtração, divisão etc.<br />

• Tipos:<br />

Temos os seguintes tipos e suas formas de representação:<br />

• Soma: +<br />

• Subtração: -<br />

• Divisão: /<br />

• Multiplicação: *<br />

• Resto de Divisão Inteira: %<br />

• Exemplos:<br />

Veremos um código-fonte que demonstra cada operação:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

int soma = 15 + 15;<br />

int subtracao = 200-50;<br />

int multiplicacao = 15*5;<br />

float divisao = 15.0 /4.0;<br />

float resto_inteiro = 5 % 2;<br />

cout


cout


Teste o código e verifique:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

float x1 = (10.0+14.0)/2.0; //x1 = 12<br />

float x2 = 10.0+14.0/2.0; // x2 = 17<br />

cout


Comentários<br />

• Conceito:<br />

São usados quando queremos inserir textos ao longo de um códigofonte<br />

sem que pra isso eles sejam necessariamente executados. São muito<br />

úteis para escrevermos explicações sobre o que uma linha ou função do<br />

programa faz, ou pra marcarmos algum trecho do código que não queremos<br />

que seja executado no momento dentre outras funcionalidades. É muito útil<br />

para testes e busca por erros.<br />

Para isso, basta usar // antes de uma linha de código. Feito isso, ele<br />

ficará com uma cor diferente no compilador (tanto no visual studio quanto no<br />

dev-c++), e tudo que estiver na linha não será executado.<br />

Para criar um comentário que contenha mais de uma linha, basta<br />

usar /* (conteúdo do comentário) */. Tudo que estiver entre esses pares de<br />

caracteres (barra vertical e asterisco) não é executado. Veja o exemplo:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

int x;<br />

x = 10;<br />

//x = 100;<br />

cout


Diretivas<br />

#include<br />

Essa diretiva tem como objetivo “concatenar” (ou anexar) um códigofonte<br />

de outro arquivo com o que você está utilizando no momento. Isso vale<br />

pra tudo que foi criado no código anterior, desde variáveis, classes, funções<br />

etc.<br />

Nós a declaramos da seguinte forma:<br />

ou<br />

#include <br />

#include “iostream.h”<br />

usamos < > quando estamos chamando arquivos de bibliotecas<br />

padrões do compilador, e “ “ quando chamamos arquivos comuns que<br />

queremos anexar ao projeto atual (que não necessariamente pertençam a<br />

biblioteca, como um arquivo de cabeçalho que criamos). Ao utilizar include, ele<br />

sempre verifica se a biblioteca (ou cabeçalho) está na pasta raiz do projeto ou<br />

na pasta include do compilador.<br />

Normalmente #include é usado em arquivos de cabeçalho (os quais<br />

veremos mais tarde, são os arquivos .h ou .hpp), mas também pode ser<br />

empregado em arquivos de código-fonte (.c ou .cpp).<br />

#define<br />

Essa diretiva tem como facilidade a função de simplificar a digitação.<br />

Ao invés de digitar várias vezes comandos complexos e extensos que são<br />

utilizados diversas vezes ao longo de um código, como:<br />

cout


Veja o exemplo:<br />

#include <br />

#define BLA cout


Leitura e Retorno de<br />

Dados<br />

• Retorno:<br />

formato:<br />

Cout<br />

Como já visto, é uma função que imprime textos em tela, no seguinte<br />

cout


Repare que o símbolo >> agora está invertido com relação ao cout.<br />

Isso ocorre porque não há mais fluxo de saída de dados, agora nós estamos<br />

inserindo dados ao aplicativo.<br />

Com esse comando, emitimos tudo que é digitado no teclado para<br />

dentro de uma variável. Veja o exemplo de um programa que captura idade de<br />

um usuário:<br />

#include <br />

using namespace std;<br />

int main()<br />

{<br />

int idade;<br />

cout > idade;<br />

cout


#include <br />

using namespace std;<br />

int main()<br />

{<br />

int fator1;<br />

int fator2;<br />

cout > fator1;<br />

cout fator2;<br />

cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!