Allegro 5.0.7, MinGW 4.6 e Eclipse Juno

Olá pessoal! Apesar da irregularidade de posts ultimamente, o blog não morreu não! Estou com sérios problemas de conexão com a Internet em casa, por isso não tenho conseguido postar por aqui. Além disso, estou aguardando sair o novo Visual Studio para Windows Phone 8 pra continuar com a série de posts.

Nas últimas semanas estive ministrando um curso sobre a biblioteca Allegro. Qual não foi a minha surpresa, que a última versão (5.0.7) não traz uma versão já compilada para Windows que suporte a versão 4.4 do MinGW, que por sinal acompanha a instalação “padrão” do Code::Blocks. Percebendo isso, resolvi fazer esse tutorial para instalação da nova versão da biblioteca com o MinGW 4.6, este sim compatível. E aproveitando, já vou mostrar como utilizar o Eclipse como IDE. Apesar de originalmente voltado para Java, é uma ótima IDE para desenvolvimento em praticamente qualquer linguagem, já que é orientado a plugins.

Continuar lendo

Tutorial Windows Phone #7 – Navegação com Estados

Olá pessoal leitores!!!

No post de hoje, vamos avançar um pouco mais no desenvolvimento dos aplicativos para a plataforma Windows Phone. Nos tutoriais anteriores, vimos como transferir parâmetros entre páginas, realizar transições e utilizar configurações gerais compartilhadas entre todas as páginas. Hoje, vamos ver como ocorre a parametrização de objetos.

Continuar lendo

Tutorial Windows Phone #6 – Navegação Utilizando Variáveis Globais

Olá pessoal! No último post da série sobre Windows Phone, vimos como transmitir dados entre páginas. No tutorial de hoje, vamos ver como realizar uma transição de páginas e compartilhar um atributo global entre elas.

Neste tutorial, teremos a MainPage e duas páginas secundárias, Pagina2Pagina3. Na página principal, poderemos marcar uma opção para que todas as páginas se tornem azuis. Esse atributo será lido pelas outras páginas para que apliquem essa propriedade também.

Continuar lendo

Tutorial Windows Phone #5 – Transferindo Dados entre Páginas

Olá pessoal!

No último tutorial sobre Windows Phone, criamos um sistema simples de navegação entre duas páginas. Hoje, veremos como passar dados entre as páginas. Para início de conversa, crie um novo projeto chamado NavegacaoComParametros (ou um outro nome qualquer que você queira). Após criar, adicione uma nova página, chamada Pagina2.xaml, da mesma forma como foi feito no último tutorial.

Nosso aplicativo será constituído de três Hyperlinks, que direcionarão para a segunda página, onde será exibida qual opção foi selecionada.

Continuar lendo

Tutorial Allegro 5 #16 – Fadein e Fadeout (Alpha Blending)

Olá leitores! Este depois de vários posts, chegamos ao fim da série sobre Allegro 5. Como devem ter percebido 0u não, não sou um profundo conhecedor da biblioteca. Apenas criei a série para compartilhar com vocês os assuntos que eu fui estudando, quase a partir do zero. Isso mostra que, sim, com um pouco de persistência, é possível se aventurar por novas ferramentas, mesmo que a documentação seja um pouco escassa. No final das contas, consegui, pelo menos, montar um pequeno guia em português pra quem quer começar a mexer com Allegro 5.

E pra encerrar, vou mostrar um uso dos conhecidos efeitos de transição fadein e fadeout. Procurei deixar as duas funções o mais genéricas possível, para que vocês possam reutilizá-las em outros projetos que vocês porventura vierem a fazer.

Como das outras vezes, vamos ver o código e em seguida comentamos seus detalhes:

Acredito que o que realmente nos interessa nesse aplicativo é o conteúdo das funções fadeout() e fadein().

A função fadeout() recebe como parâmetro um valor inteiro, indicando a velocidade do processo de transição (quanto menor o valor, mais lento). No primeiro bloco de código da função, fazemos uma cópia do conteúdo atual da tela e o colocamos na variável buffer (que utilizaremos para fazer a transparência gradual). Em seguida, validamos a velocidade (para que fique sempre entre 1 e 15). Por fim, temos um looping que faz a transição. Basicamente, limpamos a tela (fundo preto), desenhamos a cópia da tela aplicando a transparência (através da função al_draw_tinted_bitmap(), semelhante a já conhecida al_draw_bitmap(), com a diferença de alterar o valor das camadas rgba do bitmap (red, green, blue e alpha – essa última, o nosso canal de transparência). Após isso, atualizamos a tela e fazemos uma breve pausa entre um looping e outro – que não é necessário se você estiver controlando a taxa de FPS.

Já a função fadein(), recebe como parâmetros a imagem que será exibida na tela após a conclusão e a velocidade da transição. Nesta função, temos apenas a verificação da velocidade, e já fazemos a transição, aplicando a transparência gradativa na própria imagem recebida como argumento.

Na função main(), fazemos a chamada a função fadein() seguida de uma pausa de 3 segundos e finalizamos com a chamada a fadeout().

Pra compilar:

  • Windows: -lallegro-5.0.5-mt -lallegro_image-5.0.5-mt
  • Linux: -lallegro -lallegro_image

Bom pessoal, é isso aí. Espero que a série tenha sido útil, e que sirva como um primeiro passo para quem quiser começar a mexer com Gamedev. Continuem acompanhando o blog, pois tem muita coisa boa vindo por aí!

Tutorial Allegro 5 #15 – Utilizando Caixas de Diálogo Nativas

Olá pessoal! Hoje vamos ter um tutorial bastante simples, mas bem legal, mostrando como utilizar caixas de diálogo nativas do sistema operacional em seu aplicativo usando a Allegro 5.

Para o uso de tal recurso, utilizamos a extensão allegro_dialog, que é quem se encarrega de adaptar a chamada à função de exibição ao estilo de janela do seu sistema operacional (Windows, Linux ou MacOS).

Vamos observar o código e já comentamos sobre ele:

No código acima, criamos uma sequência de janelas, procurando demonstrar as várias opções que a Allegro nos oferece. Basicamente, todo o processo gira em torno da chamada a função al_show_native_message_box(). Seus parâmetros são: (1) a janela a qual ela pertence. No nosso caso, passei como argumento NULL, pois não há uma janela (ALLEGRO_DISPLAY). No caso, você pode passar nesse argumento a função al_get_current_display(), que retorna a janela ativa; (2) título da caixa de diálogo; (3) título do texto; (4) botões – não encontrei documentação clara sobre a utilização deste parâmetro, mas aparentemente serve para a utilização de botões personalizados – e; (5) tipo de caixa de diálogo. No nosso exemplo, utilizei todos os tipos disponíveis na biblioteca Allegro.

Basicamente, a função al_show_native_message_box() retorna um valor verdadeiro quando clica-se em um botão afirmativo (sim ou OK) e falso ao clicar em um botão negativo (Não, Cancelar ou mesmo fechar a caixinha). Através disso, criei o fluxo do programa.

Para compilar, precisamos lembrar de linkar com o add-on allegro_dialog.

  • Windows: -lallegro-5.0.5-mt -lallegro_dialog-5.0.5-mt
  • Linux: -lallegro -lallegro_dialog

Até a próxima! 🙂

Tutorial Allegro 5 #14 – Entrada de Texto

Olá pessoal! Depois de algum tempo sem os posts da série sobre Allegro, estamos de volta! No exemplo de hoje, vamos ver como obter uma entrada de texto do usuário, já que nativamente não temos uma forma de obter um texto (como um scanf ou cin).

Neste exemplo, vamos simular que você terminou um jogo e fez a melhor pontuação e então precisará digitar seu nome para ir para o ranking. No aplicativo, em vez de utilizarmos o evento ALLEGRO_EVENT_KEY_DOWN, usaremos ALLEGRO_EVENT_KEY_CHAR para obtermos os caracteres relativos a cada uma das teclas. Vamos olhar o código e em seguida comentamos seus detalhes. Lembrando que este exemplo foi baseado do lazyfoo.net, com a diferença de que aqui estamos utilizando Allegro 5 em vez de SDL, e adaptei-o

No nosso exemplo, os itens chave são a string str e a função manipular_entrada(). A string, de 17 posições (16 caracteres + caratere indicando fim de string), é inicializada na linha 37, dentro da função main(). Ainda na função main(), temos uma flag chamada concluido, que indicará quando o usuário pressionar a tecla Enter, encerrando a digitação do nome.

Dentro do trecho de tratamento de eventos, temos a chamada à função manipular_entrada(), que passando o evento como parâmetro. Internamente, nessa função, verificamos o campo keyboard.unichar do evento, caso ele seja do tipo ALLEGRO_EVENT_KEY_CHAR. Este campo contém o caractere correspondente a tecla pressionada. Primeiramente, montamos uma string temporária na linha 175 que, caso possua um valor dentro do esperado (números ou caracteres (maiúsculos ou minúsculos)), será concatenada a string str por meio da função strcat(). Como em C o tipo char pode ser tratado como int, utilizamos os comparadores >= e <= para validar a faixa dos valores. Caso estejam, eles são adicionados à string principal str. Ainda na função manipular_entrada(), verificamos se a tecla pressionada foi a backspace, para então remover o último caractere da string str na linha 199.

Voltando à função main(), temos uma verificação da flag concluido para escolher entre qual mensagem será exibida ao usuário: “Melhor Pontuação! Nome:” ou “1º Lugar”. No final do looping temos a chamada a função exibir_texto_centralizado(), mas não temos nenhuma novidade em sua implementação.

O aplicativo rodando deve parecer com isso:

A imagem e a fonte, você pode usar qualquer uma a seu gosto, bastando alterar na função carregar_arquivos(). Para compilar, utilizamos os add-ons allegro_image, allegro_font e allegro_ttf.

  • Windows: -lallegro-5.0.5-mt -lallegro_image-5.0.5-mt -lallegro_font-5.0.5-mt -lallegro_ttf-5.0.5-mt
  • Linux: -lallegro -lallegro_image -lallegro_font -lallegro_ttf

Bom, é isso pessoal! Espero que o tutorial seja útil! Acredito que no ponto que estamos, já seja possível começar a fazer alguns jogos. Criatividade pessoal! 🙂