O passo inicial para qualquer desenvolvedor de jogos é escolher quais tecnologias usar e preparar um ambiente para elas. Nos próximos posts, como já foi dito, usaremos C++. Para manipular o ambiente de janelas, carregar imagens do disco ou reproduzir sons, contaremos também com a ajuda da STL. Por fim, para desenhar em diversos exemplos, usaremos o OpenGL. Tudo isso será desenvolvido da IDE Code::Blocks, que é pequena e gratuita.
Ao invés de OpenGL direto, você pode preferir criar um ambiente usando a Ogre no seu Code::Blocks. Nesse caso, recomendo que siga esse outro tutorial, falando sobre o assunto. A Ogre não será tratada nesse blog… pelo menos por enquanto!
Criando a pasta inicial
Muitas dores de cabeça são evitadas se você criar uma pasta para conter todo o seu ambiente do C++. Essa pasta deve ser criada preferencialmente na raíz e conter um nome de apenas 8 letras. Por exemplo: D:\DevJogos
Dentro dessa pasta, crie também uma subpasta chamada dlls. Essa subpasta servirá para você colocar todas as bibliotecas (tais com a SDL) que devem ser acessadas para que o jogo rode. Um bom nome para ela seria: D:\DevJogos\Dlls
Adicionando um caminho ao path
Muitas pastas, como a pasta de dlls deverão ser adicionadas ao path. Por padrão, o Windows apenas procura por arquivos que estejam no mesmo diretório da aplicação sendo executada ou que estejam listados na variável de ambiente path. Muitos tutoriais de jogos, quando se deparam com uma dll, recomendam que você a jogue em pastas como windows\system32. Essa pasta já está no path de qualquer versão de windows. Entretanto, fazer isso não só misturará dlls secundárias com dlls do sistema operacional, como também reduz o nosso controle sobre o que tem ou não tem instalado. Por isso, vamos iniciar explicando como adicionar a sua própria pasta de dlls ao path.
Para acrescentar um diretório ao path, siga os passos abaixo:
1. Abra as propriedades do sistema no painel de controle. A janela também pode ser aberta pressionando simultaneamente a tecla do windows e a tecla break;
2. Clique na aba “Avançado” e em “Variáveis de Ambiente”;
3. Na parte de baixo, procure a variável chamada Path:

4. Clique em editar. Adicione um ; e o seu diretório de dlls.

Instalando o Code::Blocks
Podemos compilar os programas em C++ com um compilador padrão o GNU gratuito, que no caso do Windows é o MinGW. Na verdade, seria até possível escrever nossos próprios programas usando apenas o MinGW e o bloco de notas. Mas essa é uma tarefa tediosa e pouco produtiva. Para facilitar a edição de código, controlar automaticamente o make e ainda forcener uma interface amigável com o depurador, vamos instalar o Code::Blocks. O Code::Blocks é uma IDE gratuita, leve e poderosa e tem versões para diversos sistemas operacionais. Em alguns outros sites, você encontrará recomendações para instalar o DevCpp. Eu discordo radicalmente dessa opinião. O DevCpp é pobre em recursos, não tem boa integração com o depurador e faz uma verdadeira bagunça ao tentar alinhar o código.
O site oficial do Code::Blocks é http://www.codeblocks.org. Antes da versão 8.02, você era obrigado a instalar o Code::Blocks através de uma nightly build. Hoje, com a versão inicial, isso não é mais necessário. Também acompanham o compilador MinGW e o depurador Gdb na versão oficial, não sendo mais necessário baixa-los manualmente.
Para instalar faça o seguinte:
1. Entre na página de downloads do Code::Blocks;
2. Escolha o seu sistema operacional. No caso desse tutorial Windows 2000/XP/Vista;
3. Iremos baixar o codeblocks-8.02mingw-setup.exe (19mb), escolha a opção Sourceforge ou BerliOS e aguarde o download.
4. Rode o instalador, passe a tela do Welcome e concorde com a licença clicando em I Agree;
5. Tomando o cuidado de clicar apenas no quadradinho com sinal de + ao lado de cada pasta, abra a pasta “Lexers” e a subpasta ScriptLanguages e selecione as linguagens Lua e Python, que também são interessantes para jogos;

6. Selecione a pasta Graphics Programming;
7. Abra a pasta Contrib Plugins e selecione os plugins que você achar interessante. Eu gosto dos seguintes: Browse Tracker, Code Snippets, Code Stats, Copy Strings, Profiler, Exporter e o wxSmith. Se você era usuário do Dev, vai também gostar do DevPak plugin, que permite a instalação dos DevPaks diretamente.
8. Clique em Next e selecione o caminho que ele será instalado. Como sugestão ponha na pasta que criamos acima, como D:\devjogos\codeblocks;
9. Aguarde a instalação terminar e pronto!
Fazendo o download da SDL
A SDL é uma biblioteca multi-plataforma, open source, para manipulação de janelas, vídeo, áudio, rede, threads e fontes. Ela facilita muito o desenvolvimento de jogos e fornece ótima integração com o OpenGL. Para instala-la, proceda da seguinte forma:
1. Entre no site da SDL, clicando aqui e, na área Downloads da barra da esquerda, clique em SDL1.2;
2. Nos arquivos citados em Development Libraries, selecione o arquivo da SDL para mingw. Por exemplo SDL-devel-1.2.12-mingw32.tag.gz;
3. No seu diretório de jogos, crie uma pasta chamada libs e lá descompacte o SDL.
4. Copie o arquivo sdl.dll da pasta bin para a sua pasta de dlls;
Dica: Sempre que instalar uma nova biblioteca, copie o seu dll para a pasta de dlls. Isso evitará muitas dores de cabeça. Recomendo fazer uma cópia e não mover a dll, pois assim você ainda saberá que dll pertence a que biblioteca. Lembre-se, quando for criar um executável, será necessário anexar todas as dlls que ele utiliza antes de enviar para terceiros.
5. Repita o mesmo processo para os pacotes SDL_Image e SDL_Mixer. Os sites oficiais desses pacotes podem ser encontrados na área doc wiki, ou clicando aqui e aqui. As distribuições foram feitas para visual C++ 8, mas funcionam bem no MinGW. O nome dos arquivos para baixar será: SDL_image-devel-1.2.6-VC8.zip e SDL_mixer-devel-1.2.8-VC8.zip (as versões podem mudar);
Configurando o Code::Blocks
Agora, veremos cada passo na configuração do Code::Blocks, com explicação sobre o que significam.
Criando um novo projeto
1. Abra o Code::Blocks;
2. Clique em File->New->project e selecione Console Application;
3. Em Project Title, dê o nome do seu projeto. Em folder to create your project in, selecione a pasta project, criada no tutorial anterior.

4. Clique em next até finalizar o assistente;
Configurando o compilador
O compilador necessita de arquivos de cabeçalho, com a extensão .h, para saber quais funções estão disponíveis em sua aplicação. Isso vale tanto para os seus arquivos, que ficarão no seu projeto, quanto para arquivos de bibliotecas externas. É necessário indicar a ele onde ficam os arquivos .h de cada uma das bibiliotecas externas usadas por você.
Sempre que você adicionar uma biblioteca ao seu projeto, é necessário seguir esses procedimentos. Abaixo, explicarei como fazer a configuração usando como exemplo a SDL:
1. Para fazer isso, clique em Project->Build Options;
2. Na árvore do lado esquerdo, clique na raiz (com o mesmo nome do projeto). Caso contrário, você estará definindo a biblioteca apenas para a compilação oficial (release) ou debug do seu projeto. Dessa forma, você define para as duas;
3. Na guia Search Directories, selecione a opção compiler e clique em add.
4. Selecione a pasta “include” de sua biblioteca. A SDL é uma exceção à regra. Ao invés da pasta include, devemos adicionar a pasta include\SDL. Exemplo:

5. Responda sim a pergunta Keep This as a Relative Path?. Isso permite que você mova sua pasta DevJogos para diferentes unidades de disco (um pendrive, por exemplo); Você notará que o CodeBlocks adicionará o caminho relativo a biblioteca como: ..\..\SDL\SDL-1.2.12\include\SDL
6. Importante: Para incluir um cabeçalho da SDL, você terá que utilizar o comando #include “SDL.h” e não #include “SDL/SDL.h”; Isso porque já selecionamos a pasta SDL dentro do diretório include. Dessa forma, o código fica mais compatível com o Linux.
Configurando o linker
A maior dificuldade de montar um ambiente está no linker. O linker precisa saber onde se encontram todos os arquivos .lib, o nome dessas bibliotecas, e quais bibliotecas padrão você está utilizando.
O Caminho das libs
O primeiro passo é definir qual é o caminho onde suas bibliotecas se encontram. As bibliotecas são arquivos com nomes iniciados em lib e extensão .a, por exemplo, libSDL.a.
1. Para fazer isso, clique em Project->Build Options;
2. Novamente selecione a raiz da árvore situada no lado esquerdo da tela;
3. Na guia Search Directories, selecione a opção linker e clique em add.
4. Adicione a pasta lib de sua bibiloteca. No caso da SDL:

5. Responda sim a pergunta Keep This as a Relative Path?.
6. Clique na aba Linker Settings;
Linker Settings
Você deve dizer ao linker quais são as bibliotecas que você está efetivamente utilizando. O maior problema aqui está em descobrir e indicar corretamente as bibliotecas padrão utilizadas, já que elas não aparecem em nenhum local óbvio. Geralmente, essas bibliotecas estão listadas na documentação dos componentes que você estiver instalando.
No caso da SDL e do OpenGL, fazemos o seguinte:
1. Clique em Project->Build Options;
2. Na guia Linker Settings;
3. Clique em Add e digite mingw32 para adicionar a biblioteca padrão do mingw;
4. Clique em Add e digite SDLmain para adicionar a biblioteca da SDL;
5. Clique em Add e digite SDL.dll para adicionar a biblioteca de acesso a dll do SDL;
6. Clique em Add e digite opengl32 para adicionar a biblioteca padrão do opengl;
7. Clque em Add e digite glu32 para adicionar a biblioteca padrão OpenGL utilities;
Dica: Se você olhar a pasta lib das bibliotecas não padrão, verá os arquivos .a correspondentes da biblioteca. No caso da SDL, haverá dois arquivos chamados libSDLmain.a e libSDL.dll.a. Isso te dá a dica de que nomes inserir nas linker settings. Note que é necessário repetir esses mesmos procedimentos para as bibliotecas SDL_Mixer e SDL_Image, caso queira trabalhar com elas.
Ainda falta dizer ao linker que nós estamos lidando com uma aplicação para windows. Para isso, em other linker options, coloque a opção -mwindows. Ao final, sua tela deve ficar assim:

Com isso, finalizamos esse tutorial! No próximo artigo, vamos ver os primeiros passos para a construção de um jogo. Enquanto isso, se quiser ir brincando com a SDL, recomendo que siga esse ótimo tutorial (em inglês).
Atenção: Alguns usuários recortam e colam a palavra -mwindows desse tutorial, e o sinal de menos é substituído pelo travessão. Isso fará com que o Code::Blocks dê a mensagem: “mingw32-g++.exe: -mwindows: No such file or directory”. Para corrigir o problema, simplesmente apague esse parâmetro e digite-o novamente a mão.
Ajustando o caminho do compilador e do linker
Se você instalou o Code::Blocks pela primeira vez, esse passo não será necessário. Se, ao compilar, o seu Code::Blocks der a mensagem “uses an invalid compiler. Skipping…”, siga os passos desse tópico. Geralmente, numa instalação antiga, caminhos inválidos podem ter sido definidos e seu code::blocks ainda pode estar enxergando-os. Para corrigir isso, faça o seguinte:
1. Clique em Settings, Compiler and debugger;
2. Selecione a aba “Search directories” e na aba compiler, coloque o caminho correto da pasta include, que se encontra no mesmo diretório do seu compilador. Por exemplo: D:\DevJogos\CodeBlocks\MinGW\include
3. Clique na aba linker e selecione o caminho correto da pasta lib, que se encontra no mesmo diretório do seu compilador. Por exemplo: D:\DevJogos\CodeBlocks\MinGW\lib
4. Clique em Toolchain Executables e altere o “Compiler Instalador Directory” para o caminho certo do seu compilador. Normalmente basta pressionar o botão auto-detect para isso, mas, caso não funcione, selecione o diretório manualmente. A configuração deve ter ficado similar à abaixo:

Aew Vini muito legal esse tuto, agora que pretendo fazer jogos em C++ ao invés de Java(Apesar que deixei todos pela metade)
Estou à espera dos próximos tutos, enquanto isso vou ver o Lazy Foo que também achei interessante.
Parabéns! Excelente tutorial, altamente detalhado! Irei acompanhar seu blog a partir de hoje. Abraço, amigo
Obrigado pessoal! A idéia do blog é mesmo trocar dicas e experiências!
É o que eu estava procurando, muito bom os artigos, Parabéns!
Não posso ficar sem deixar meus parabéns. Seus artigos são muito interessantes, são exatamente o que estou procurando.
Mexo com delphi a 5 anos como hobby, e atualmente trabalho com administração de redes e servidores linux.
A tempo que desejo aprender C++, e sempre me interessei por jogos e seus artigos estão me dando uma motivação para tal. Tenho que dar os parabéns tambem pela escolha das ferrametas, pois as apresentadas até agora são multi-plantaforma e free, e espero que continue assim nas próximas. Lembro quando lamentei o fato da discontinuação Kylix e todo aquelas papagaiada borland-microsoft. Tudo isso me fez deixar com um pé atrás. Mas em todo caso vou partir agora para C++ e ver se aprendo um pouco da área de jogos.
Parabéns novamente!
Abraços.
Obrigado, Lama!
Um elogio desses serve como um grande estímulo. Se você procura soluções multi-plataforma, procure também conhecer o Java e o JMonkeyEngine.
Infelizmente, o tema ainda está fora do escopo desse blog, mas tem muito material sobre o assunto na internet (a maioria em inglês).
Se quiser continuar no C++, vá em frente! Ainda pretendo mostrar muitos conceitos interessantes, não só sobre jogos, mas também sobre a linguagem e sobre projeto em si.
Você também pode brincar um pouco com o C++ Builder (não tanto na parte de jogos, mas para pequenas aplicações) para reduzir a curva de aprendizado entre o Delphi e o C++. Ali, você terá a mesma biblioteca de componentes do Delphi, a VCL, mas com a linguagem C++.
O pessoal do Acarajé turbinado gostou tanto desse tutorial, que copiou parte dele para o seu próprio blog – com as devidas citações, claro – e adicionou informações sobre como configurar o Code::Blocks para o GTK.
Quem quiser conferir, é só clicar no link aqui no nome do autor.
[...] Eu recomendo o Code::Blocks que é fácil de usar e gratuita, existe também uma versão não oficial chamada Code::Blocks Night Buid ela recebe atualizações quase todos o dias! Instruções de como baixá-lo e instala-lo você encontra aqui. [...]
Ótimo post Vinicius, ajudou de forma muito clara e fácil a configurar as ferramentas por aqui!
Abraços
Vinigodoy, o seu blog está de parabéns, sou aluno de Ciência da Computação e estou cursando a disciplina de Computação Gráfica, fiquei muito interessado pelo ambiente apresentado. Irei testá-lo para desenvolver as aplicações da disciplina no lugar do devc++. Aguardo novos tutoriais.
Valeu.
Oi Tiago.
Muito bom saber que você vai se livrar do DevCpp. Além de ser muito antigo e desatualizado, ele ainda te atrapalha na hora de depurar os erros.
O compilador dos dois é o mesmo, embora a versão que venha com o dev seja pré-histórica. Então, você pode ficar tranquilo pois tudo o que hoje o dev compila, certamente o Code::Blocks vai compilar também.
Olá ViniGodoy.
Sim já estou notando grande diferença na utilização do Code::Blocks, o ambiente é muito bom para desenvolvimento, além de ser simples de utilizar e leve, agora estou precisando de referências para configurar o Glut no Code::Blocks, pois na disciplina que estou cursando estamos utilizando a Glut, encontrei um tutorial na Internet http://www.sci.brooklyn.cuny.edu/~goetz/codeblocks/glut/ , mas após configurar o Code::Blocks da maneira que é explicado neste tutorial estou tendo problemas com alguns programas exemplos que baixei da internet, eles rodam no Dev, mas no Code::Blocks não.
Caso tenha alguma dica, agradeço.
Entre os programas que não rodaram no Code::Blocks estão os exemplos fontes-pratica1.zip do site http://www.inf.ufrgs.br/~carla/OpenGL/pratica1/
Já o exemplo que vem no Dev e utiliza o Glut funcionou perfeitamente no Code::Blocks.
Valeu!
Geralmente, basta incluir glut32 nas link libraries. Assim como vc fez com a glu.
Desculpe a demora na resposta. Seu comentário acabou caindo como SPAM.
Olá ViniGodoy,
Você está de parabéns pela iniciativa de incentivar o desenvolvimento de jogos, sobretudo utilizando software livre. Este site, com certeza está entre os meus favoritos.
Tenho uma dúvida sobre o tutorial desta página: segui todos os passos e quando fui compilar, apareceu o seguinte erro: mingw32-g++.exe: –mwindows: No such file or directory.
Retirei o comando –mwindows no Project->Build options e apareceu outro erro:
In function ‘console_main’:
Line 246 undefined reference to ‘_SDL_main’
Estou rodando o code::blocks no windows XP
O código compilado é o seguinte:
#include <iostream> #include "SDL.h" using namespace std; int main() { cout<< "Hello world!" << endl; return 0; }Estes dados são suficientes para diagnosticar o problema?
Um abraço.
Você já tinha instalado o C::B no passado? Dá uma olhada na sessão:
“Ajustando o caminho do compilador e do linker” neste mesmo post. No primeiro erro, dá a impressão que ele não achou o caminho do seu compilador.
O diretório de instalação padrão do compilador no Code::Blocks é DiretorioDoCodeBlocks\mingw. Mas esse valor pode estar diferente, caso você já tenha instalado no passado (mesmo que as vezes seja um passado muito distante).
Se o diretório não estiver lá, certifique-se de que você fez o download da versão com o mingw. No site existem 2 versões, e você pode ter baixado a errada.
Ah, e deixe o -mwindows lá.
Ele é necessário mesmo.
Obrigado pelo elogio. Amanhã tem mais post!
Olá
Instalei o Code Blocks aqui no pc
fiz tudo conforme o tutorial
mas na hora de rodar o programa ele diz isso:
Undefined reference to ‘_Winmain@16′
que erro é esse
Qual programa você está tentando compilar?
Geralmente esse erro ocorre ou quando você não tem o main da SDL declarado corretamente ou, quando você não está usando SDL, quando você não tem a função WinMain.
Parabéns pela tópico, muito bom.
Tenho uma dúvida porém que, quero utilizar o Code Blocks com o DirectX 9. Qual seria o procedimento para efetuar a linkagem do mesmo no ambiente do CodeBlocks?
Abraço!
Boa pergunta. Para ser sincero, sempre mexo com DirectX no Visual. Quando vou usar uma solução 100% vinculada a MS, prefiro usar o ambiente de desenvolvimento deles.
Só lembrando que a versão Express do Visual C++ 2008 também é de graça.
[...] SDL_TTF. Se você não sabe como montar um ambiente desse, eu recomendo que você leia este tutorial, o site em si é muito bom, e é uma boa ideia deixá-lo nos [...]
nao posso sair sem te dar os parabens..
ainda so novato no ramo de programações de jogos.. mais seu tuto ta bem explicado entendi tudo essa parte principal ai..
vlw e parebens pelo topico.. continue assim!
=D
Levei muito tempo tentando configurar a biblioteca SDL no code blocks, fuçando em tudo que foi lugar na busca de vários tutoriais que não resolviam de nada minha situação , você foi explicou de forma clara e passo a passo realmente, e acabei conseguindo configurar a biblioteca SDL , porém, a SDL_Image não encontrei o arquivo .a. Apesar de tudo muito coisa clareou , valeu pelo Tutorial com T maiúculo.
Um abraço.
[...] é descrever passo a passo a instalação do Code::Blocks junto com o SDL. Este post se basea nesse outro aqui, do blog Ponto V, que aliás é uma boa referencia pra começar com [...]