Sep 23rd 2008, 00:11
Aprenda a fazer um menu utilizando Allegro.
Hoje iremos aprender a fazer um menu simples em Allegro, utilizando alguns bitmaps e um pouco de lógica podemos ter um menu perfeitamente funcional, flexível e fácil de fazer.
Ao término do tutorial teremos o seguinte menu:
Ao passar o mouse sobre o item do menu teremos um pequeno efeito:
Recursos
O nosso menu terá os seguintes recursos:
- inserção de itens em qualquer lugar da tela;
- cada item poderá ter uma imagem diferente quando o mouse passar em cima;
- ação personalizada para cada item do menu.
Implementação
Agora que vimos a teoria vamos à implementação:
- Para iniciar crie um projeto chamado Menu e utilize a base inicial deste tutorial;
- Baixe este arquivo e extraia para a pasta do seu projeto (ou utilize suas próprias imagens);
- No arquivo main.cpp, após a linha de inclusão da biblioteca allegro, insira as linhas abaixo:
Estas três linhas incluem as bibliotecas que utilizaremos (string e vector) e declara que utilizaremos o espaço de nomes std (maiores explicações depois).
Após a declaração da variável *bmp (BITMAP *bmp) vamos inserir o código das classes:
Agora que temos as classes definidas e explicadas é hora da inicialização.
Após a chamada da função Inicializa na função main, insira o código abaixo:
Já temos o menu inicializado, o que precisamos agora é fazer o gameloop atualizar a lógica do menu e desenhá-lo na tela.
Dentro do loop iniciado por:
e após a linha:
insira o código:
e para desenhar o menu, antes da linha:
insira o código:
Agora já temos a tela branca, só falta exibir o menu e o cursor do mouse, para isso após a linha:
insira:
e para finalizar, antes da chamada à função Finaliza, insira o código abaixo para destruir corretamente o menu e liberar a memória alocada por ele:
Funcionamento
Basicamente o menu possui duas classes: Menu que cuida para gerenciar todos os itens do menu, e MenuItem que representa um item de menu.
A classe Menu possui os itens de menu em um vector, permitindo assim inserirmos dinamicante quantos itens forem necessários. Esta classe simples apenas possui métodos para adicionar um item de menu, atualizar a lógica dos mesmos e desenhá-los na tela.
A classe MenuItem é o núcleo do menu. Cada item do menu possui algumas propriedades chave tais como posição (int x, y), uma imagem para ser exibida normalmente e outra para ser exibida quando o mouse passa em cima, uma flag para indicar se o mouse está passando em cima e o mais importante: um ponteiro para uma função que será chamada assim que o menu for clicado.
Esta classe também implementa métodos para desenhar o item de menu e atualizar a sua imagem caso o mouse esteja em cima.
Algumas observações: eu deixei o código todo no mesmo arquivo (não aconselhável exceto para exemplos mais triviais) para ajudar as pessoas que tem dificuldades em compilar arquivos separados e evitar complicações com variáveis não definidas, variáveis externas, etc…
Se quiser o projeto pronto clique no botão abaixo (arquivo de projeto para o Dev-C++).

Arquivo de projeto Dev-C++ do Menu
Exercícios
Agora que você já viu uma implementação básica, tente os exercícios abaixo:
- faça o menu ser controlável por teclado;
- implemente animação nos itens do menu;
- toque um som ao passar o mouse em cima do menu ou ao clicar em um item;
- faça o item do menu “se animar” ao passar o mouse em cima;
- as possiblidades são grandes, experimente…
Na segunda parte veremos em detalhes como controlar os “estados” do jogo para poder trocar mais facilmente as telas (podendo inclusive implementar um menu em cada uma ou iniciar o jogo).
Espero que tenham gostado.