• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

[AM]Higor

[C] Allegro - Programando Jogos - Parte I

18 mensagens neste tópico

Tópicos

  • A quem se destina?
  • Allegro
  • Instalando o Allegro
  • Requisitos Mínimos
  • Primeiros Passos

A quem se destina?

Se você é aquela pessoa que durante o tempo livre gosta de ter como passatempo jogos eletrônicos e sempre pensou ou se perguntou enquanto jogava “Um dia eu ainda farei um jogo como esse.” ou ainda “Como faço um jogo assim?”. Você está no caminho correto. Além de conhecer uma linguagem de programação, no nosso caso o C, você precisa esta familiarizado com alguma API (Application Programming Interface). Algumas das API’s mais usadas para jogos atualmente são o DirectX e o OpenGL. Porem, estas API’s estão um pouco acima do nível de compreensão de um iniciante. Más, de algum ponto temos que começar, não é? E nada melhor do que começar de baixo. Pois, criar um jogo de grande porte necessita tempo, dinheiro e muito estudo.

Allegro

Allegro é uma biblioteca para programação de jogos. Foi criada por Shawn Hargreaves, hoje trabalhando na Microsoft. Sua intenção era de fazer uma biblioteca de código simples para que o iniciante na área de programação de jogos não precisasse ler uma grande quantidade de livros sobre DirectX, OpenGL ou outras API’s. E o Allegro cumpre bem sua missão. É uma biblioteca de utilização simples, com uma pequena curva de aprendizado e que nos possibilita de fazer coisas muito interessantes com ela. Além de ser freeware e multiplataforma.

Instalando o Allegro

Dev C++

O Dev C++ tem um pequeno plug-in que facilita o trabalho de instalação do Allegro. Basta ir no menu Ferramentas >> Atualizações >> Selecione o Mirror >> Check for Updates >> Allegro. Com o DEV C++ e o Allegro instalado, vamos colocar a mão na massa.

dev_geral:devc_menu_actualizacoes.jpg

dev_geral:devc_web_update_module.jpg

Requisitos Mínimos

Agora que já demos uma introdução sobre a quem se destina esse artigo, sobre o Allegro e como instalá-lo, daremos continuidade ao nosso artigo.

Primeiramente, estou supondo que você já conheça a linguagem de programação C/C++ e que esteja familiarizado com sua sintaxe e funções. Porem, caso não saiba C/C++, não se desespere. Há vários tutoriais espalhados pela internet e não será difícil achar um. Mesmo assim, no final do artigo estarei a disponibilizar alguns links com tutoriais para iniciantes nessa linguagem.

Outro requisito é que você esteja apto a usar um compilador C/C++, no nosso caso, o DevC++ . Que esteja criado um projeto Allegro static. Arquivo >> Novo >> Multimedia >> Allegro Static.

Sugiro que você de uma olhada nesse código criado como exemplo para ir se familiarizando com a sintaxe, depois apaga-lo e escrever tudo do zero.

Ex:

#include <stdio.h>
int main(int argc, char *argv[])
{
   int A=7, B=8;
   printf(“Soma %d”, A+ ;
}

E comentários inicializados por: /* */

#include<stdio.h> /*Inclui a biblioteca stdio.h*/

Primeiros Passos

Sinto-me feliz por você ter me aturado até aqui ^__^. Então sem mais delongas vamos ao nosso primeiro código. Creio que a melhor forma de explicar seja colocar um exemplo e após comenta-lo. Farei assim.

#include <stdio.h>
#include <allegro.h>
#define MAX 800
#define MAY 600

int main()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, MAX,MAY,0,0);
   allegro_message("Ola");
   allegro_message("Meu primeiro programa em Allegro");
   while(!key[KEY_ESC])
   {     
       textout_ex(screen,font,"Outra jeito de Escrever",0,0,makecol(0,255,0),-1);
   }
   return 0;
}

END_OF_MAIN();

1- /*Includes e Defines... */

2- /*Declaração normal da função main.*/

3- allegro_init(); /*Inicializa as funções da biblioteca.*/

4- install_keyboard(); /*Inicializa o teclado*/

5- set_color_depth(32); /* Define a número de bit de cores a ser usado. De ver chamada antes da função (set_gfx_mode).E cria o ponteiro global de bitmap “screen” que representa a memória de vídeo do hardware.*/

Qnt Bits: 8,15,16,24,32

Qnt Cores: 256, 32768, 32 milhões, 4 bilhões

6- set_gfx_mode(GFX_AUTODETECT_WINDOWED, MAX,MAY,0,0); /*Inicializa o modo gráfico. Tem como primeiro parâmetro a escolha do modo gráfico forçando o modo janela, a resolução 800x600(MAX,MAY) e resolução virtual (que no momento não utilizaremos)0,0. */

Modo : Descrição

GFX_SAFE : Faz com que o modo gráfico sempre seja inicializado corretamente

GFX_TEXT : Retorna para o modo Texto

GFX_AUTODETECT : Tenta definir a resolução para o especificado em em tela cheia. Caso falhe, tentará defini-la em janela.

GFX_AUTODETECT_WINDOWED : Mesmo modo acima só que força a resolução para o tipo janela

GFX_AUTODETECT_FULLSCREEN : Força resolução para o modo tela cheia

7- allegro_message("Olá"); /*Caixa de texto escrito “Ola”.*/

8- allegro_message("Meu primeiro programa em Allegro");/*Caixa de texto escrito “Meu primeiro programa em Allegro” */

9 - while(!key[KEY_ESC]) /*Laço while que ficará em loop até que a tecla ESC seja pressionada. */

10- textout_ex(screen,font,"Outra forma de Escrever",0,0,makecol(0,255,0),-1); /*Escreve uma string em um bitmap. (font), Definição do tipo de font a ser utilizada. String a ser escrita.(0,0) posição na tela.(makecol(0,255,0)),Função para definir cor. Recebe como parâmetro o padrão RGB(Red, Green, Blue) ou seja, as 3 cores primarias. -1 Fundo de tela */

11-/*Retorno da função main.*/

12- END_OF_MAIN(); /* Finaliza a execução do programa. Após ter finalizado a função main, precisa desse comando para que o compilador link corretamente a biblioteca.*/

Após termos nos familiarizado com o nosso primeiro exemplo. Vamos passar para o passo de como imprimir imagens na tela. Algumas coisas são repetidas do programa anterior. Portanto, comentarei só os códigos novos.

#include <stdio.h>
#include <allegro.h>
#define MAX 800
#define MAY 600

int main()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, MAX,MAY,0,0);
   BITMAP *PAP;
   PAP=load_bitmap("C:\\PAP.bmp", NULL);/*logo do P@P em bitmap*/
   draw_sprite(screen,PAP,0,0);
   while(!key[KEY_ESC])
   {
       textout_ex(screen,font,"Portugal a Programar",  0,80,makecol(0,255,0),-1);
       textout_ex(screen,font,"www.portugal-a-programar.pt",  0,90,makecol(255,255,0),-1);
       textout_ex(screen,font,"A comunidade portuguesa de programadores",  0,100,makecol(255,0,0),-1);
   }
   return 0;
}

END_OF_MAIN();    

1- BITMAP *PAP; /* Cria um ponteiro do tipo bitmap *PAP(Portugal a programar)*/

2- PAP=load_bitmap("C:\\PAP.bmp", NULL); /*Carrega o bitmap do arquivo com o parametro NULL para a Paleta que sera explicada depois.*/

3- draw_sprite(screen,PAP,0,0); /* Função para imprimir imagem. Copia a imagem contida em PAP para o ponteiro screen, imprimindo na posição 0,0;*/

Bom, com isso terminamos a nossa primeira parte do tutorial sobre Allegro. No próximo artigo estarei comentando sobre o desenho de retas, retângulos e sobre sons.

Espero que tenham gostado. Até à próxima.

LINKS PARA TUTORIAIS DE C/C++

http://ead1.eee.ufmg.br/cursos/C/

http://alunos.uevora.pt/~l12890/Programa%E7%E3o/Progra_00.html

dev_geral:allegro_tuto_exemplo_1.jpg

Visualização do Ultimo Exemplo.

Higor Henrique Aranda Cotta.

Higor@nilvaniaranda.com.br

[Artigo no Wiki]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te preocupes, postaste bem. :P

Bom tut, tenta só formatar um bocado o texto e meter o código dentro das respectivas tags, para tornar mais fácil a leitura.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim...

Estou trabalhando no arranjo das funções agora mesmo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim!Mto fixe...gostei e digo não tinha conhecimento disto!  :dontgetit:

Se tiveres mais programas básicos e outros exemplos, que queiras apresentar estás a vontade!!  :P  :P

Eu estou a trabalha em opengl, e adorei o teu tuti...

aleggro.h é a biblioteca que contem as funções que vais usar do aleggro...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um bom tutorial para todos os que pretendem aprender a trabalhar com Allegro. Eu sou um deles. Esperamos por mais novidades.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas o dev c++ ja tras essa biblioteca ? :\ o meu  n encontra

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas o dev c++ ja tras essa biblioteca ? :\ o meu  n encontra

Gurzi não...

Você deve instala-la atraves do plug-in. Esta tudo explicado lá em cima ^__^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora que vi isto, fiquei a pensar se esta biblioteca é do tipo widgets  http://www.wxwidgets.org/, se basicamente implementa as funçoes de um api, para se poder fazer janelas, etc num programa. Sou iniciante no widgets, ainda nem consegui fazer um programa, por isso pelo que vi existe aqui pessoal que me pode dizer quais as diferenças entre o Allegro e este.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom Marino...

Pelo que vejo wxwidgets é uma biblioteca para criar GUI, correto???

O Allegro tambem possui  algumas "bibliotecas" user-made que criam GUI. Mas, esse não é o propósito do Allegro. O Allegro é uma biblioteca de criação de jogos.

Não sei falar as diferenças. Até porque ainda sou novo na área de programação com GUI... Nas férias de Junho/Julho aqui no Brasil, pretendo me aventurar por essa área.

Mas, caso você domine bem essa WxWidgets, sugiro que crie um tutorial e coloque aqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela resposta. encontrei o site oficial http://www.talula.demon.co.uk/allegro/index.html . Destaco aqui alguma informação mais relevante:

Manual de utilização:  http://www.allegro.cc/manual/

Allegro is a portable library mainly aimed at video game and multimedia programming
Graphic functions

    * Vector drawing:

          o pixels, lines, rectangles, circles, ellipses, arcs, Bezier splines

          o shape fill, with or without pattern

          o polygons: flat, Gouraud, textured (3D) and translucent

    * Sprites:

          o masked, compressed and compiled sprites

          o blitting, rotation, stretching, reduction, alpha blending, Gouraud shading

          o native support for BMP, LBM, PCX and TGA files (others supported with library extensions)

    * Color palettes:

          o color palette manipulation (reading, writing, conversion)

          o conversion of color formats RGB <-> HSV

    * Text:

          o support for different encodings and conversion, default is UTF-8

          o bitmap fonts (masking, colouring, alignment)

    * Misc:

          o draw directly on the screen or on any-size memory bitmaps

          o hardware scrolling and triple buffering (where available), mode-X split screen

          o animation functions for FLI/FLC format

Graphic drivers

Sound functions

Math functions

    * fixed point arithmetic and trigonometric routines

    * precalculated trigonometric tables

    * vector/matrix/quaternions 3d manipulation (translation, rotation, scaling, projection)

Misc

    * mouse, keyboard and joystick management

    * high resolution interrupt timers (resolution of 10, 5 or less ms depending on platform)

    * vertical retrace simulation

    * manipulate configuration files

    * manipulate compressed files in LZSS format

    * manipulate multi-object resource-like compressed datafiles

    * tool for creating datafiles (grabber)

    * simple GUI for dialogs and file selector

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Enquanto Allegro é uma API usava para computação gráfica (jogos, demos, etc...) o WxWidgets é uma API cujo o objectivo é criar GUIs, ou seja, jenelas com objectos do mesmo tipo que Visual Basic, mas para outras linguagens. A principal vantagem é que é portável para vários sistemas operativos diferentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas..

bem eu n sou mt entendido nisto, mas n percebo pk o meu compilador (Dev C++) a incluir essas bibliotecas todas (allegro) , dizme k allegro_init() is first declared.. isto n acontece so kd a biblioteca n está bem configurada? mas fiz exactamente como no exemplo aki descrito, akela cena do #include<allegro>, alguem pode me dizer se esta alguma coisa mal configurada.. ou e preciso reinstalar ou escrever algum codigo adicional?

prontos tb kria dar os parabens a esta comunidade :P, tenho aprendido mtas coisas com vcx.. apesar d n participar mt :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já instalei os vários plug-ins e mesmo assim continuo sem poder correr o código...

aparcem-me vários "Linker Error" no Dev-C++

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho o meu dev-c++ em inglês e no menu tools e não aparece nada a ver com actualizar. O que tem mais parecido (na minha opinião) é o package manager mas isso não permite adicionar nada. Alguém sabe como arranjar o allegro?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado.

Já sei qual era o problema.

Não tinha a versão beta do dec-c++ instalada, tinha uma mais antiga. Mas mesmo assim vou ver ambos os tuturiais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora