|
O passo inicial para qualquer desenvolvedor de jogos é escolher quais tecnologias usar e preparar um ambiente para elas. 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 a OpenGL. Tudo isso será desenvolvido da IDE Code::Blocks, que é pequena e gratuita. Quando falamos em C++, preparar esse ambiente geralmente não é uma tarefa fácil. Esse tutorial visa explicar como cumpri-la, de maneira organizada e compreendendo cada passo da configuração.
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 raiz do seu sistema de arquivos e conter um nome de apenas 8 letras, sem caracteres especiais. 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:
- 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;
- Clique na aba “Avançado” e em “Variáveis de Ambiente”;
- Na parte de baixo, procure a variável chamada Path:

- 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 fornecer 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:
- Entre na página de downloads do Code::Blocks;
- Escolha o seu sistema operacional. No caso desse tutorial Windows 2000/XP/Vista;
- Iremos baixar o codeblocks-8.02mingw-setup.exe (19mb), escolha a opção Sourceforge ou BerliOS e aguarde o download.
- Rode o instalador, passe a tela do Welcome e concorde com a licença clicando em I Agree;
- 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;
- Selecione a pasta Graphics Programming;
- 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 DevCpp, vai também gostar do DevPak plugin, que permite a instalação dos DevPaks diretamente.
- Clique em Next e selecione o caminho que ele será instalado. Como sugestão ponha na pasta que criamos acima, como D:\devjogos\codeblocks;
- Aguarde a instalação terminar e pronto!
Fazendo 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 a OpenGL. Para instala-la, proceda da seguinte forma:
- Entre no site da SDL, e, na área Downloads da barra da esquerda, clique em SDL1.2;
- Nos arquivos citados em Development Libraries, selecione o arquivo da SDL para mingw. Por exemplo SDL-devel-1.2.14-mingw32.tag.gz;
- No seu diretório de jogos, crie uma pasta chamada libs e lá descompacte o SDL.
- 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. - 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.10-VC8.zip e SDL_mixer-devel-1.2.11-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
- Abra o Code::Blocks;
- Clique em File->New->project e selecione Console Application;
- Em Project Title, dê o nome do seu projeto. Em folder to create your project in, selecione a pasta project, criada no tutorial anterior.
- 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 bibliotecas 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:
- Para fazer isso, clique em Project->Build Options;
- 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;
- Na guia Search Directories, selecione a opção compiler e clique em add.
- 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:
- 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.14\include\SDL
- 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.
- Para fazer isso, clique em Project->Build Options;
- Novamente selecione a raiz da árvore situada no lado esquerdo da tela;
- Na guia Search Directories, selecione a opção linker e clique em add.
- Adicione a pasta lib de sua bibiloteca. No caso da SDL:
- Responda sim a pergunta Keep This as a Relative Path?.
- 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 da OpenGL, fazemos o seguinte:
- Clique em Project->Build Options;
- Na guia Linker Settings;
- Clique em Add e digite mingw32 para adicionar a biblioteca padrão do mingw;
- Clique em Add e digite SDLmain para adicionar a biblioteca da SDL;
- Clique em Add e digite SDL.dll para adicionar a biblioteca de acesso a dll do SDL;
- Clique em Add e digite opengl32 para adicionar a biblioteca padrão da opengl;
- 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. Outra opção é seguir esses passos caso você tenha baixado o MinGW manualmente, e tenha optado por uma versão de Code::Blocks sem o compilador. Faça o seguinte:
- Clique em Settings, Compiler and debugger;
- 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
- 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
- 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:
-
18/10/2010 16:39:35 |189.75.101.xxx| igor - re: Excelente tutorial
Gustavo Escreveu:Gostei muito do tutorial. Estava tendo muitos problemas com o caminho do compilador e do linker, mas com o tutorial esclareceu e facilitou tudo. Valew!!!
-
03/07/2011 23:15:19 |189.119.99.xxx| Rafael - Boa!

Otimo tutorial, coisa bem simples que todo mundo devia ler antes de sair por ai instalando quando IDE e configurando super mal.
Obrigado!
-
31/07/2011 08:59:21 |189.71.213.xxx| Washington

Muito bom o artigo,mas pretendo usar o MV C++ express você saberia onde posso encontrar um tutorial similar para o mesmo
-
31/07/2011 09:13:16 | Vinícius Godoy de Mendonça

Não muda praticamente nada.
Inicialmente, crie um console application e selecione a opção "empty project". Em seguida, configure-o da seguinte forma:
1. Baixe as libs da SDL para C++ Express;
2. Configure os includes e libs nas propriedades do projeto, em VC++ Directories (includes em include directory e libs em library directories);
3. Ainda nas propriedades do projeto, vá em linker->input. Em additional dependencies inclua o nome dos arquivos .lib que vai usar (exemplo: sdl.lib;sdlMain.lib;opengl32.lib;glu32.lib)
4. No código, antes de fazer
Código:#include <opengl.h>
faça
Código:#include <windows.h>Pronto.
O resto da dicas de organização do ambiente permanecem as mesmas.
-
31/07/2011 20:10:40 |189.71.144.xxx| washington

Aki deu erro concerteza eu errei em algo
1>------ Build started: Project: Aprendendo_OPENGL, Configuration: Debug Win32 ------
1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: unresolved external symbol _SDL_main referenced in function _main
1>d:\meus documentos\documents\visual studio 2010\Projects\Aprendendo_OPENGL\Debug\Aprendendo_OPENG L.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
-
31/07/2011 20:32:54 | Vinícius Godoy de Mendonça

Seu main está declarado como
Código:int main(int argc, char* argv[])
?Com a SDL o main deve ter obrigatoriamente essa assinatura.
-
01/08/2011 16:29:26 |189.71.202.xxx| Washington

Se eu aperto F7 =
========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
Se aperto F5 =
'Aprendendo_opengl.exe': Loaded 'D:\Meus Documentos\Documents\Visual Studio 2010\Projects\Aprendendo_opengl\Debug\Aprendendo_openg l.exe', Symbols loaded.
'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
'Aprendendo_opengl.exe': Loaded 'C:\Program Files\Alwil Software\Avast5\snxhk.dll', Cannot find or open the PDB file
The program '[4640] Aprendendo_opengl.exe: Native' has exited with code -1073741515 (0xc0000135).
-
01/08/2011 16:34:14 | Bruno Crivelari Sanches

Washington,
algum erro ocorreu durante a execução do seu programa, sem o código ou mensagem de erro a única coisa que posso sugerir é que você use o debug para tentar descobrir em que ponto ocorre o erro, temos um tutorial sobre uso do debug do visual no PontoV: http://www.pontov.com.br/site/cpp/41-visual-c/21 6-como-usar-o-depurador-do-visual-c
T+
-
01/08/2011 16:38:56 | Vinícius Godoy de Mendonça

Exatamente. Mas seu programa compilou e chegou até a executar, o que indica que o ambiente já está configurado e funcionando.

-
03/10/2011 10:33:49 |200.193.90.xxx| raianne - Num sei

num to conseguindo criar um jogo.E ninguem sabe o q eu quero fazer mesmo assim num consigo.>>>>>>>>>>>
-
04/10/2011 09:30:18 | Bruno Crivelari Sanches

Descrevendo o problema que você tem de forma objetiva fica mais simples alguém auxiliar. Agora apenas dizendo de forma abstrata que não consegue fica difícil imaginar qual seria o problema e a dificuldade.
-
10/10/2011 12:30:22 |187.57.24.xxx| Anônimo - windows 7

C:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2 \..\..\..\..\mingw32\bin\ld.exe: cannot find -lSDLmain
sabe que erro é esse?
-
10/10/2011 12:57:16 | Bruno Crivelari Sanches

Sim, usar Dev-Cpp, uma IDE antiga, abandonada, cheia de problemas e que nem mesmo os desenvolvedores dela usavam.
Apague o Dev-Cpp e instale o Code-Blocks como mostrado nesse artigo ou então instale o Visual C++ como mostrado aqui: http://pontov.com.br/site/cpp/41-visual-c/59-como-util izar-o-visual-c-parte-1
T+
-
14/10/2011 00:55:52 |187.52.120.xxx| SlipiN

Seguinte:Em "Project" a opção "Build Options! não esta acessível para min(fica transparente ,e não da para clicar),dai eu não consigo configurar ele,alguem ai me ajuda!!!!!!!
-
14/10/2011 11:22:16 | Bruno Crivelari Sanches

Carregou ou criou um projeto? Muitas opções só aparecem com projetos carregados.
T+
-
14/10/2011 14:10:27 |187.52.120.xxx| SlipiN

Tenho outra duvida,em uma parte do tutorial vcs dizem assim:Copie o arquivo sdl.dll da pasta bin para a sua pasta de dlls; Aonde que fica essa pasta Oo????
-
14/10/2011 15:01:29 | Vinícius Godoy de Mendonça

Se você está seguindo o tutorial desde o início, é a mesma pasta que você criou no passo "Criando a pasta inicial", e que você adicionou no path.
Ela vai estar em DevJogos\Dlls
-
09/12/2011 17:28:46 |189.102.45.xxx| Felipe

Legal, conheci o site através de um link no guj. Muito legal a iniciativa.
-
25/12/2011 22:12:57 |189.69.51.xxx| Luiz Paulo

Muito bom artigo, sempre foi uma dor de cabeça "colocar as coisas pra funcionar"
Só uma duvida, conhece a biblioteca SFML? (Simple and Fast Multimedia Library)
Tava dando uma pesquisada e ela parece ser mais "apropriada" para jogos indie do que a SDL. Se bem que posso tar falando bobagem, por isso que queria saber sua opinião.
Abraço











Gostei muito do tutorial. Estava tendo muitos problemas com o caminho do compilador e do linker, mas com o tutorial esclareceu e facilitou tudo. Valew!!!