Home

Tutorial: Allegro para Iniciantes. Rafael Loosli Dias, 2014.

image

Contents

1. 16 5SoUtilizando o teclado ssa iria dera 18 6 Utilizando O MOUSE gas usa 20 AE Aplica o aE 22 751 Interface dO Jog ae Eae TO a k 24 7 1 1 Detectando movimenta o do 26 1 Introdu o O intuito deste tutorial possibilitar que o aluno possa ter uma no o do funcionamento de certas diretivas voltadas programa o de jogos utilizando a biblioteca Allegro Ser o abordados conceitos b sicos orientados a uma programa o gr fica 2D por m vale a pena ressaltar que existem outras APIs Application Programming Interface que possibilitam trabalhar com recursos gr ficos mais poderosos Contudo a sistem tica de utiliza o de certas fun es de certa forma semelhante entre os diferentes APIs disponibilizadas Para exemplificar a utiliza o da biblioteca Allegro foi escolhida a IDE Integrated Development Enviroment Dev C visto que a mesma de f cil compreens o para utiliza o e possui assist ncia para a instala o de pacotes atrav s da sua pr pria interface facilitando a adi o de novos plugins ou bilbiotecas por exemplo Contudo vale ressaltar que a mesma possu algumas complica es como a falta de recursos para Debug de c digo
2. Figura 13 Poss veis posicionamentos das circunfer ncias orientados pelo clique e movimenta o do mouse 7 Aplica o FreeCell sugerida a implementa o do jogo FreeCell para aplica o dos conceitos de estrutura de dados e utiliza o dos recursos da biblioteca Allegro apresentados neste tutorial Neste jogo de baralho o conceito de Pilha amplamente utilizado As cartas s o movimentadas de forma a respeitar regras espec ficas contudo sempre mantendo os conceitos principais da estrutura Estes em alto n vel est o relacionados com a inser o e remo o de elementos Em uma Pilha tanto a inser o de novos elementos quanto a remo o s o feitas no topo da estrutura Desta forma o ltimo elemento inserido ser sempre o primeiro removido Como sugest o de implementa o a estrutura de Pilha deve ser implementada inicialmente possibilitando que defini es mais espec ficas desta estrutura sejam detalhadas em classes mais especializadas Considerando as caracter sticas das movimenta es do jogo FreeCell podemos ter Pilhas Intermediarias e Pilhas Definitivas Al m disso podemos tamb m considerar os Espa os para Movimenta o de Cartas como Pilhas Auxiliares j que a nica restri o imposta por estes o tamanho limite de uma carta Abaixo temos a ilustra o das defini es espec ficas das Pilhas propostas E freeces e s e s Figura 14 Levantament
3. Package descriptiorr game programming library gt Welcome For more information about this program please visit the following website http alleg st net z Ready Figura 5 Assistente para instala o de pacotes automaticamente aberto durante o procedimento descrito necess rio prosseguir com a instala o at que a mesma seja conclu da Caso esse procedimento seja executado com xito ser exibida a mensagem demonstrada na Figura 6 EM Dev C 4992 Dev C Package Installation Wizard Allegro installation procedure Allegro has been successfully installed on your system Please E press Finish to close this window 3 8 Figura 6 Mensagem de confirma o de xito na instala o do pacote neste caso a biblioteca Allegro na vers o 4 2 2 Se todos os passos aqui demonstrados forem executados corretamente o aluno estar pronto para come ar a utilizar os recursos disponibilizados pela Allegro no ambiente de desenvolvimento provido pela Dev C 3 Primeiro programa utilizando a Allegro Ap s instalar corretamente a biblioteca Allegro para o uso no Dev C deve se ent o criar um novo projeto para iniciar o nosso primeiro programa Para tal basta selecionar a op o File gt gt New gt gt Project como apresentado na Fig
4. int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDOWED 640 480 0 0 while key KEY ESC line screen 100 50 300 200 makecol 0 0 255 return 0 END OF MAIN Al m da linha existem outras primitivas como o contorno de ret ngulo e um c rculo preenchido por exemplo void rect BITMAP bmp int xl int yl int x2 int y2 int color Os par metros desta chamada s o semelhantes aos do segmento de reta sendo os valores de x1 y1 x2 y2 delimitadores de dois dos v rtices opostos do ret ngulo void circlefill BITMAP bmp int x int y int radius int color Novamente os par metros s o semelhantes contudo os valores de x e y s o utilizados para determinar a coordenada do centro do c rculo Al m disso o valor de radius corresponde ao tamanho do raio desejado Logo tem se o seguinte exemplo finclude lt allegro h gt int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDONWE while key KEY ESC rect screen 50 50 250 150 makecol 255 255 255 circlefill screen 150 100 50 makeco1l 0 0 255 return O END OF MAIN Ao rodar o programa percebe se que foi desenhado um c rculo de cor azul com um raio equivalente a 50 unidades dentro de um contorno de ret ngulo de co
5. void init void deinit int main while key KEY ESC Enquanto a tecla ESC n o for pressionada ir executar o c digo especificado C digo a ser executado deinit return 0 END_OF_MAIN Macro necess ria para o funcionamento da Allegro Sempre deve ser utilizada no final da fun o main void init int depth res allegro_init Inicializa a Allegro depth desktop_color_depth Retorna a profundidade de cores usadas no Desktop if depth 0 depth 32 set color depth depth Define a profundidade de cor que ser usada Seleciona o modo gr fico a ser exibido Neste caso ser em janela poderia ser FullScreen por exemplo com tamanho 640 x 480 res set gfx mode GFX AUTODETECT WINDOWED 640 480 0 0 if res 0 allegro message allegro error Exibe mensagem em caso de erro exit 1 install timer Instala o handler de tempo da Allegro install keyboard Instala o handler de teclado da Allegro install mouse Instala o handler de mouse da Allegro Qutras poss veis inicializa es void deinit clear keybuf Limpa o buffer do teclado Outras poss veis desinicializa es Caso o programador compile e rode o programa ent o gerado apenas uma janela ser aberta com a op o de fech la ao pressionar a tecla ESC Logo
6. necess rio esvaziar os buffers utilizados Para isto temos a seguinte fun o void clear bitmap BITMAP bmp Onde o par metro BITMAP bmp representa o buffer a ser esvaziado colocado o valor O para o bitmap Vale a pena ressaltar que esta pr tica de liberar o conte do contido no buffer muitas vezes necess rio durante o desenvolvimento do programa visto que o conte do de cada itera o do loop principal continuaria em mem ria e consequentemente seria exibido com os demais elementos de uma outra itera o Desta forma poderia haver uma sobreposi o indesejada de informa es gr ficas sendo necess rio ent o esvaziar o buffer a cada itera o Tendo em mente as pr ticas aqui sinalizadas pode se elaborar o seguinte exemplo de c digo include lt allegro h gt int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDOWED 640 480 0 0 BITMAP buffer create bitmap 640 480 BITMAP imagem ufscar load bitmap ufscar bmp NULL while key KEY ESC blit imagem ufscar buffer 0 0 100 50 300 200 circlefill buffer 400 250 50 makeco1l 255 69 0 textprintf ex buffer font 360 250 makecol 0 0 0 1 Hello World blit buffer screen 0 0 0 0 640 480 clear bitmap buffer destroy bitmap imagem ufscar destroy bitmap buffer return 0 END OF MAIN Neste c digo foi
7. por exemplo desej vel que o aluno tenha conhecimento b sico sobre a linguagem C 2 Instala o Existem diversas possibilidades para a utiliza o da biblioteca Allegro na linguagem C Contudo para facilitar o desenvolvimento recomenda se que seja utilizada uma IDE ou ainda um Ambiente Integrado de Desenvolvimento o qual possui artif cios para facilitar o trabalho do programador Existem diferentes IDEs que podem ser utilizadas Neste tutorial considera se que o programador estar usando uma IDE com MinGW sendo esta uma cole o de arquivos espec ficos para o funcionamento em Windows e que combinadas com ferramentas da GNU permitem a produ o de programas nativos para o mesmo sistema operacional S o levantadas algumas das seguintes IDEs para utiliza o e Microsoft Visual C Express Encontrada no link http www microsoft com visualstudio en us products 2010 editions visual cpp express e CodeBlocks com MinGW Encontrada no link http www codeblocks org downloads 26 e Dev C com MinGW GCC Encontrada no link http www bloodshed net dev devcpp html Ap s conclu do o download da IDE desejada necess rio tamb m baixar a biblioteca Allegro que ser utilizada Para aqueles que optarem pela IDE Dev C existe uma se o deste tutorial que demonstra como realizar esse procedimento de instala o da biblioteca atrav s da pr pria interface da IDE A biblioteca em sua vers o 4 2 2 a
8. biblioteca Allegro Esta chamada deve constar no c digo antes de qualquer outra fun o de mouse utilizada ao longo do programa Ap s instalado o handler para o mouse necess rio fazer com que o mesmo seja visualizado no display para que o mesmo passa ser usado devidamente Logo utilizada a seguinte chamada void show mouse BITMAP bmp e O par metro bmp o buffer onde o cursor do mouse deve ser desenhado Como j citado j existe um ponteiro espec fico para bitmap utilizado pela Allegro para exibir as informa es no display sendo este denominado screen Desta forma poss vel utilizar o mouse atrav s da visualiza o do cursor Al m disso ainda existem alguns recursos proporcionados pela biblioteca para que esse recurso de intera o com o usu rio seja melhor aproveitado Pode se verificar a posi o do cursor em rela o s coordenadas do display atrav s das vari veis globais extern volatile int mouse x Retorna a posi o relativa ao eixo X extern volatile int mouse y Retorna a posi o relativa ao eixo Y Al m disso existe uma vari vel que indica o estado de cada bot o denominada mouse b onde cada bit especifica um determinado bot o do mouse O bit 1 guarda as informa es de estado do bot o esquerdo e o bit 2 do bot o direito O melhor uso da mesma explicado atrav s do seguinte trecho de c digo finclude lt allegro h gt int main int
9. quando tal tecla n o fosse pressionada assim basta se negar a verifica o com o s mbolo e END OF MAIN Macro necess ria para o funcionamento da Allegro a qual deve ser colocada imediatamente depois da fun o main 4 2 Adicionando uma string no display Agora que j tem se o programa b sico vi vel incrementar o c digo especificando o comportamento desejado no programa Assim inicialmente pode se colocar uma chamada para exibir um determinado texto na janela criada usando o comando voiditextpri nt BEIMAP E PMP const E ECO On im ces Logo os par metros utilizados s o e O primeiro par metro BITMAP bmp refere se a um buffer onde ser armazenada a informa o para posteriormente ser visualizado na janela do programa J existe um ponteiro espec fico para bitmap utilizado pela Allegro para exibir as informa es no display sendo este denominado screen e O segundo par metro const FONT f a fonte a ser utilizada para a exibi o da string em quest o Por padr o existe a fonte denominada font e O terceiro e o quarto par metro int x int y representam respectivamente a dist ncia dos eixos X e Y em que a string dever come ar a ser escrita e O quinto par metro int color refere se cor em que a string dever ser exibida Normalmente utilizada a chamada makecol R G B fazendo com que seja poss vel escolher a cor atra
10. ANA KEY CONVERT KEY NOCONVERT KEY AT KEY CIRCUMFLEX KEY COLON2 KEY KANJI KEY LSHIFT KEY RSHIFT KEY LCONTROL KEY RCONTROL KEY ALT KEY ALTGR KEY LWIN KEY RWIN KEY MENU KEY SCRLOCK KEY NUMLOCK KEY CAPSLOCK KEY EQUALS PAD KEY BACKQUOTE KEY SEMICOLON KEY COMMAND Figura 12 Imagem retirada do Manual da biblioteca Allegro vers o 4 2 2 Poss veis teclas para verifica o disponibilizadas pela biblioteca Um exemplo de utiliza o dos recursos de teclado provido pela Allegro pode ser encontrado em diversos exerc cios propostos neste tutorial Nota se que para sair do la o principal da biblioteca colocamos uma verifica o para a tecla ESC pressionada Desta forma a aplica o Allegro deixa de executar pela a o do usu rio ao pressionar a tecla como pode ser novamente visto no trecho de c digo abaixo finclude lt allegro h gt int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDOW while key KEY ESC At que a tecla ESC seja pressionada a aplica o permanece no la o principal return O END OF MAIN 6 Utilizando o mouse Para a utiliza o do mouse a biblioteca Allegro possui algumas chamadas para facilitar o desenvolvedor na utiliza o do mesmo Dentre as mais utilizadas est o int install mouse e Permite a instala o do handler do mouse provido pela
11. TUTORIAL DE UTILIZA O DA BIBLIOTECA ALLEGRO PARA INICIANTES Rafael Loosli Dias Roberto Ferrari J nior Sum rio Roi oligo o U 6 o JO RN SEIS DORSO RR O RES RS 3 RR ARS RD ROS PER 8 21 Utilizando o DEV 4 3 Primeiro programa utilizando a 7 4 Fun es disponibilizadas pela 9 4 1 Sintaxe da biblioteca e fun es gr ficas sr ieeeeerereeearareeeeaeaeeeeaneaseraatos 10 4 2 Adicionando uma string no 11 4 3 Criando e adicionando um objeto no 3 12 4 4 Adicionando uma imagem Bitmap j existente 14 4 5 Inserindo diversos elementos
12. WE while key KEY ESC C digo a ser executado return O END Logo temos as seguintes chamadas e allegro init Macro utilizada para inicializar a biblioteca Allegro A mesma deve aparecer antes de qualquer outra chamada provida pela biblioteca e install keyboard Instala handler de teclado da Allegro Assim pode se ter o controle de eventos e do comportamento das teclas do teclado na execu o do programa Um exemplo vis vel da necessidade dessa chamada encontra se no loop while key KEY ESC visto que os comandos internos ao mesmo ser o executados at o momento em que o usu rio pressionar a tecla ESC e set color depth 32 Define a profundidade de cores que ser o utilizadas no programa ou em outras palavras a quantidade de bits para representar as cores utilizadas Logo esta primordial de ser feita antes de qualquer outra chamada gr fica Poss veis valores s o 8 default 15 16 24 e 32 bits e set gfx mode GFX AUTODETECT WINDOWED 640 480 0 0 Seleciona o modo gr fico que ser exibido Neste caso ser fixada uma janela de tamanho 640x480 para exibi o Contudo poderia ser utilizado o par metro GFX AUTODETECT FULLSCREEN possibilitando que fosse for ada a exibi o em tela cheia e ESC Verifica se a tecla ESC foi pressionada No caso do c digo utilizado a inten o era executar o trecho do programa
13. buffer 230 120 320 TAMANHO VERTICAL 5 COR SELECAO Vejam que para facilitar ainda mais a experi ncia do usu rio no jogo desenhamos um ret ngulo abrangendo todo o espa o delimitado pela pilha Desta forma fica claro qual Pilha foi feito o clique imagem do jogo em execu o abaixo Figura 17 Exemplo de movimenta o do usu rio Da mesma forma que aos demais elementos gr ficos colocados na mesa do jogo o ret ngulo desenhado para refor ar a movimenta o tamb m adicionado ao buffer Pronto Desta forma j conseguimos detectar qual a Pilha foi selecionada pelo jogador Como a movimenta o de cartas possu uma origem e um destino basta aplicarmos a detec o para ambas situa es Logo tendo um movimento de origem e destino podemos passar a informa o da Interface Gr fica para a l gica do jogo estando esta respons vel por continuar o resto do processamento das movimenta es Descarregue o ED FreeCell http edcomjogos dc ufscar br tutoriais FreeCell rar execut vel imagens e dll se j n o estiver coloque a dll no diret rio Window iSystem32
14. description Download selected Figura 3 Ap s selecionada a op o de servidor devpaks org Community Devpaks selecionar a biblioteca Allegro vers o 4 2 2 para download Ap s selecionado o pacote especificado clicar no bot o Download selected Em alguns instantes ap s finalizado o download caso o mesmo seja executado corretamente ser exibida uma mensagem como descrito na Figura 4 Fle Edt Search Vew Project Execute Debug Tools CVS Window Help 9d Ga Si sida Hi AA 98 New Insert 48 Toggle 1 Goto Dev C 4992 i SHEA Project Classes Debug Information o The updates you selected have been downloaded Now they will be installed HH Compiler 5 Resources dh Compile Log 2 Debug a Find Results Ready A Figura 4 Mensagem de confirma o de download completo Ap s terminado o download um assistente para instala o de pacotes para a IDE Dev C ser automaticamente aberto como ilustrado na Figura 5 O mesmo ir auxiliar na tarefa de instala o da biblioteca Allegro desejada Dev C Package Installation Wizard Allegro installation procedure Welcome to the Dev C Package Installation Wizard This Wizard will install Allegro 4 2 2 Please press Next to continue with the installation or press Cancel to stop the installation now
15. deve ser copiada para o buffer imagem de destino Assim estes par metros representam o ponto inicial origem da imagem de origem que deve ser copiado para o novo buffer permitindo ent o que a imagem seja cortada dependendo da necessidade do desenvolvedor e O quinto e o sexto par metro int dest x int dest y identificam a posi o da origem coordenada 0 0 do buffer imagem de origem em rela o ao buffer imagem de destino Logo estes par metros s o respons veis pelo posicionamento da imagem a ser inserida no buffer de destino e O s timo e o oitavo par metro int width int height s o respons veis por indicar o tamanho do buffer imagem de origem que ser copiado no buffer imagem de destino Novamente esse par metros podem ser utilizados para recortar uma determinada parte da imagem j que especificam a coordenada m xima pixel inferior direito da imagem de origem que ser copiada Por fim importante destruir o bitmap carregado para desalocar o buffer utilizado usando a seguinte fun o void destroy bitmap BITMAP bitmap e Permite desalocar o buffer que contem a imagem apontada pelo ponteiro BITMAP bitmap Para exemplo vamos tomar a imagem ilustrada na Figura 10 a qual deve ser colocada no diret rio corrente do projeto como especificado no desenvolvimento e o trecho de c digo que segue TuS Oar Figura 10 Imagem utilizada no exemplo Tamanho real 300x200 finclude lt allegro
16. esse trecho de c digo gerado somente traz algumas inicializa es e chamadas para iniciar um programa com interface gr fica proporcionada pela biblioteca A partir desse momento o programador come ar a desenvolver o seu pr prio c digo 4 Fun es disponibilizadas pela Allegro Existem diversas fun es disponibilizadas pela biblioteca Allegro para permitir que o programador desenvolva adequadamente o seu jogo Nessa se o ser o mostradas algumas das fun es mais usualmente utilizadas pelos desenvolvedores mas vale ressaltar que o manual da biblioteca deve ser consultado no momento em que existir alguma dificuldade ou necessidade O manual de utiliza o da biblioteca Allegro vers o 4 2 2 pode ser encontrado em http alleg sourceforge net stabledocs en allegro html 4 1 Sintaxe da biblioteca e fun es gr ficas Inicialmente vale a pena ressaltar que na Allegro as coordenadas nas imagens s o tratadas diferentemente de gr ficos e outros elementos que possu mos em nosso mundo real Dessa forma a origem encontra se no canto superior esquerdo ao inv s do canto inferior esquerdo A Figura 9 ilustra melhor o sistema de coordenadas utilizado Figura 9 Sistema de coordenadas utilizado pela biblioteca Allegro Para estudo utilizaremos o seguinte trecho de c digo base finclude lt allegro h gt int main allegro init install keyboard set color depth 32 set gfx mode AUTODETECT WINDON
17. h gt int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDOWED 640 480 0 0 BITMAP imagem ufscar load bitmap ufscar bmp NULL while key KEY ESC blit imagem ufscar screen 120 0 100 50 300 200 destroy bitmap imagem ufscar return 0 END OF MAIN Ao rodar o programa o usu rio verificar que a imagem de origem foi cortada em rela o ao eixo X e posicionada com a origem na coordenada 300 200 do display 4 5 Inserindo diversos elementos gr ficos At o momento foram tratados elementos gr ficos isoladamente Contudo na maioria das vezes necess rio utilizar v rias desses recursos juntamente para atingir o objetivo determinado pelo programa Desta forma existem algumas boas pr ticas de desenvolvimento que mostram se interessantes de serem utilizadas Primeiramente mostra se interessante inserir todos esses elementos gr ficos em um mesmo buffer e somente no fim de cada itera o copiar este buffer para o buffer destinado a visualiza o no display denominado screen Logo inicialmente necess rio criar um buffer BITMAP onde tais elementos ser o inseridos utilizando a seguinte chamada BITMAP create bitmap int width int height e Os par metros int width e int height especificam respectivamente a largura eixo X e a altura eixo Y do buffer a ser criado Em seg
18. inserida uma imagem j existente em disco um c rculo de cor laranja e uma string Hello World assim como ilustrado na Figura 11 Para tanto foram utilizadas as pr ticas aqui mencionadas Figura 11 Sa da para o c digo levantado 5 Utilizando o teclado O teclado um dos perif ricos mais utilizados para a intera o do computador com o usu rio Assim a biblioteca Allegro prov alguns mecanismos para que o desenvolver possa utilizar essa ferramenta adequadamente As principais chamadas s o install keyboard e Permite que o handler de teclado provido pela Allegro seja instalado Essa chamada deve constar antes de qualquer outra fun o de teclado utilizada ao longo do programa extern volatile char key KEY 9 e Verifica se determinada tecla do teclado foi pressionada Existem diferentes possibilidades de teclas a serem verificadas sendo estas especificadas na Figura 12 KEY A KEY Z KEY O KEY 9 KEY O PAD KEY 9 PAD KEY KEY 12 KEY ESC KEY TILDE KEY MINUS KEY EQUALS KEY BACKSPACE KEY TAB KEY OPENBRACE KEY CLOSEBRACE KEY ENTER KEY COLON KEY QUOTE KEY BACKSLASH KEY BACKSLASH2 KEY COMMA KEY STOP KEY SLASH KEY SPACE KEY INSERT KEY DEL KEY HOME KEY END KEY PGUP KEY PGDN KEY LEFT KEY RIGHT KEY UP KEY DOWN KEY SLASH PAD KEY ASTERISK KEY MINUS PAD KEY PLUS PAD KEY DEL PAD KEY ENTER PAD KEY PRISCR KEY PAUSE KEY ABNT Cl KEY YEN KEY K
19. loads de pacotes para o Dev C Logo para o pr ximo passo preciso selecionar o devido servidor como descrito na Figura 2 Select devpak server PlanetMiror com PlanetMirror com devpaks org Community Devpaks Groups secin U Sal URB OBY groups gt Status Disconnected Available updates list Update Version Installed File size Date File description Press Check for updates to request a list of available updates on the server Check for updates J Close Figura 2 Selecionar a op o de servidor devpaks org Community Devpack Em seguida clicar no bot o Check for updates o que possibilita procurar no servidor selecionado todos os poss veis upgrades para a IDE Dev C Desta forma ser o exibidos diversos pacotes para instala o Neste tutorial ser utilizado a biblioteca Allegro na vers o 4 2 2 como descrito na Figura 3 Select devpak server devpaks org Community Devpaks Groups Selection 1 files total 8884 KB 7 049 216 Bytes groups gt Status Disconnected Available updates list Update Version Installed File size Date a 1 12 133KB 2009 08 07 20 58 46 O Allegro 50 4 12904KB 2011 08 18 00 57 32 O Allegro 4 4 0 1 1692KB 2010 09 11 08 08 28 Allegro 422 6884KB 2009 10 13 03 01 18 O Allegro 421 2105KB 2006 12 04 01 48 45 C Allegro supplement 421 1223KB 2006 12 04 01 47 08 Ens 28NBG KR 91 11 27 N7 16 2N File
20. nchido com a cor desejada assim como j apresentado neste tutorial Logo neste momento podemos utilizar a fun o rectfi11 da Allegro adicionando a mesa criada ao buffer rectfill buffer O 0 buffer gt w buffer gt h makeacol 0 255 0 Posteriormente temos que pensar como adicionar as cartas que est o empilhadas nas Pilhas Intermedi rias do jogo Neste momento basta carregarmos s imagens referentes a cada carta do jogo armazenado estas em um buffer BITMAP BITMAP asPaus load bitmap imagensWPausihasPaus bmp NULL Agora que j temos as informa es visuais relativas s cartas em mem ria como adicion las na mesa Como dito anteriormente podemos pensar nas Pilhas como a sobreposi o de imagens de cartas dispostas em cima da mesa Pensando na estrutura de Pilha podemos percorrer cada carta inserida colocando na mesa a primeira carta inserida na estrutura seguida pela segunda terceira e assim por diante Desta forma basta utilizarmos a fun o b1it descrita anteriormente incrementando para cada carta da Pilha o valor do posicionamento da mesma no eixo Y A Figura 15 ilustra a sobreposi o de cartas de uma mesma Pilha Figura 15 Cartas de uma mesma Pilha sobrepsotas Este procedimento deve ser realizado para cada Pilha Intermedi ria do Jogo ent o podemos escrever um procedimento em que deslocamos as cartas de cada Pilha tamb m no eixo X Figura 16 Abaixo segue uma sugest
21. o momentaneamente inseridas em uma estrutura auxiliar 3 Seas n cartas puderem ser inseridas na Pilha destino a movimenta o conclu da 4 Se alguma carta n o puder ser movimentada as n cartas inseridas na estrutura tempor ria s o devolvidas Pilha de origem Em rela o organiza o do c digo sugerido que n o sejam misturadas as informa es relativas s estruturas utilizadas l gica do jogo e interface gr fica Desta forma a rela o entre essas entidades pode ser feita da seguinte forma O jogo simplesmente utiliza as estruturas de Pilha implementadas Dessa forma as l gicas de inser o e remo o devem estar contidas na pr pria defini o da estrutura O jogo informa interface gr fica o estado atual das estruturas posicionamento das cartas nas estruturas de Pilha A interface gr fica informa ao Jogo a origem e o destino das movimenta es entre as estruturas de Pilha 7 1 Interface do Jogo Aplicando os conceitos apresentados neste Tutorial podemos estruturar a interface para o jogo FreeCell Para facilitar a implementa o sugerido que todas as informa es gr ficas sejam armazenadas em um buffer sendo este posteriormente adicionado ao display Neste sentido podemos pensar em uma quantidade finita de elementos gr ficos que sobrepostos formam o jogo como um todo Incialmente podemos pensar na mesa do jogo Esta por sua vez representada por um ret ngulo pree
22. o de Pilhas com caracter sticas espec ficas do jogo FreeCell Para cada estrutura espec fica de Pilha temos as seguintes caracter sticas Pilhas Intermedi rias Possuem caracter sticas espec ficas para inser o Uma nova carta s pode ser inserida caso sua cor seja oposta e com valor estritamente anterior ao da pilha do topo Al m disso poss vel que mais de uma carta seja movimentada caso existam espa os suficientes para movimenta o considerando espa os vagos nas Pilhas Auxiliares e em outras Pilhas do Jogo Nesta situa o devem ser verificadas se todas as cartas para movimenta o est o devidamente ordenadas considerando que poderiam ser feitas diversas movimenta es equivalentes para inserir todas as cartas desejadas na Pilha destino Pilhas Definitivas Possuem caracter sticas espec ficas para inser o Se a pilha estiver vazia somente uma carta com valor s pode ser inserida Caso j existam cartas na pilha somente pode ser inserida uma nova carta caso a mesma for do mesmo naipe e necessariamente possuir um valor seguinte ao da carta do topo 9 Pilhas Auxiliares O tamanho m ximo da Pilha deve ser de uma carta Desta forma a nica possibilidade de inser o deve ser se a mesma estiver vazia nenhuma carta na estrutura Para facilitar a implementa o dado como sugest o os seguintes procedimentos para movimenta o 1 S o removidas n cartas da Pilha de origem 2 n cartas s
23. o de implementa o desse algoritmo int posX 60 Posi o x estipulada para a primeira carta int posY 130 Posi o y estipulada para a primeira carta Carta carta Para cada Pilha Intermedi ria 8 for int 1 0 i lt 8 i Se houver cartas na Pilha if lpilhasIntermediarias i isVazia Para cada carta inserida na Pilha for int j 0 j lt pilhasIntermediarias i getNumeroElementosInseridos j Obt m as informa es da carta IMPORTANTE A carta n o removida da Pilha carta pilhasIntermediarias i getElemento j Desenha a carta na posi o desejada desenhaCarta carta posX ESPACO HORIZONTAL i ESPACO VERTICAL 5 posY 4 a Figura 16 Cartas de Pilhas distintas sobrepostas Na fun o desenhacarta basta colocarmos a chamada para a fun o blit passando como par metro o BITMAP da carta e a posi o X Y que a esta deve ser desenhada na mesa As demais cartas do jogo presentes nas Pilhas Auxiliares e Definitivas seguem a mesma l gica de desenho das Pilhas Intermedi rias A nica diferen a que para as Pilhas Auxiliares e Definitivas n o precisamos deslocar no eixo Y para desenhar cada carta inserida na estrutura j que dada como visualiza o somente a carta do topo Depois de inseridos todos esses elementos em um buffer este finalmente adicionado ao display bli
24. objeto como uma linha um quadrado um tri ngulo etc Logo a Allegro possu algumas primitivas para sanar este problema A chamada a seguir permite que seja desenhada um segmento de reta void line BITMAP bmp int x1 int yl int x2 int y2 int color A mesma possui os seguintes par metros e O primeiro par metro BITMAP bmp como citado na se o anterior refere se a um buffer onde ser armazenada a informa o para posteriormente ser visualizado na janela do programa J existe um ponteiro espec fico para bitmap utilizado pela Allegro para exibir as informa es no display sendo este denominado screen e O segundo e o terceiro par metro int x1 int y1 definem o ponto de in cio do segmento de reta Neste momento vale a pena relembrar o sistema de coordenadas utilizado pela Allegro e O quarto e o quinto par metro int x2 int y2 definem o ponto final do segmento de reta Novamente vale rever o sistema de coordenadas da biblioteca e O sexto par metro int color como j levantado anteriormente refere se cor em que a string dever ser exibida Normalmente utilizada a chamada makecol R G B fazendo com que seja poss vel escolher a cor atrav s da especifica o dos n veis de vermelho verde e azul respectivamente Vale a pena ressaltar que esses valores de intensidade devem estar no intervalo entre 06 255 Logo tem se o seguinte exemplo de segmento de reta finclude lt allegro h gt
25. qual ser utilizada neste tutorial pode ser encontrada no link http sourceforge net projects alleg files allegro bin 4 2 2 Baixar o arquivo allegro mingw 4 2 2 zip Para que seja poss vel rodar aplica es fora do ambiente da IDE necess rio baixar a biblioteca dll e coloc la em seu devido diret rio Considerando a plataforma Windows a biblioteca alleg42 dll deve ser copiada no diret rio AWindowsISystem32 2 1 Utilizando o Dev C Ap s conclu do o download da IDE seguindo o link citado anteriormente preciso instalar e fazer os links para a biblioteca Allegro diretamente atrav s da interface do Dev C Para tal basta iniciar o Dev C e selecionar a op o Tools gt gt Check for Updates Packages como ilustrado na Figura 1 Dev C 4 9 Fle Edt Search View Project Execute Debug Tools CVS Window Help 99 Br E SA dO QE Compier Options en SPO Nem g inset 35 Environment Options B Editor Options o Configure Shortcuts T Configure Tools Ep Check for Updates Packages Package Manager Project Classes Debug Compiler Bj Resources dih Compie Log 4 Debug EA Find Results Ready Figura 1 Ap s abrir o Dev C selecionar a op o Tools gt gt Check for Updates Packages Uma nova janela ir se abrir Esta possibilita a conex o com determinados servidores para down
26. r branca 4 4 Adicionando uma imagem Bitmap j existente Caso haja a necessidade de adicionar um bitmap externo j existente em seu programa o desenvolvedor deve seguir os seguinte passos Inicialmente deve se carregar o imagem desejada utilizando se a seguinte chamada BITMAP load bitmap const char filename RGB pal e O primeiro par metro const char filename corresponde ao caminho para a imagem Bitmap em quest o Caso a imagem esteja no mesmo diret rio do projeto basta o nome da imagem mas se a mesma encontra se em outra localidade preciso especificar o caminho ex imagensWimagem exemplo bmp a imagem exemplo encontra se no diret rio imagens que est localizado dentro do diret rio do projeto corrente e O segundo par metro RGB pal define a palheta de cores utilizada na imagem Bitmap em quest o Este valor pode ser passado nulo null j que para este momento n o h necessidade de retornarmos a palheta de cores utilizadas na imagem Posteriormente necess rio copiar a imagem Bitmap em um buffer de destino utilizando a seguinte chamada void blit BITMAP source BITMAP dest int source x int source y int dest x int dest y int width int height e O primeiro par metro buffer imagem de origem enquanto o segundo o buffer imagem de destino e O terceiro e o quarto par metro source x int source y expressam a partir de qual coordenada do buffer imagem de origem
27. t buffer screen 0 0 O 0 buffer gt w buffer gt h Neste momento temos todos os elementos do jogo desenhados na mesa Estamos quase prontos para come ar a jogar o FreeCell Contudo ainda falta pensarmos como deve ser feita a intera o com o usu rio 7 1 1 Detectando movimenta o do usu rio dado como sugest o a utiliza o do mouse utilizando como refer ncia as informa es dadas neste tutorial Contudo tamb m poss vel fazer a interface atrav s do teclado Considerando a utilizando do mouse basta verificarmos no la o principal da Allegro se o bot o esquerdo do mouse foi pressionado Este procedimento pode ser feito atrav s da verifica o da vari vel global mouse Caso seja verificado que o usu rio pressionou o bot o esquerdo do mouse basta encontrarmos a posi o X e Y do cursor Neste momento as vari veis globais mouse x e mouse y devem ser verificadas Como descobrirmos em que Pilha o clique foi disparado Basta delimitarmos um espa o considerando os eixos X e Y em que cada Pilha deve ocupar na mesa do jogo Exemplo para a detec o do clique em uma das Pilhas Intermedi rias O espa o est delimitado em um intervalo do eixo X e Y if mouse x gt 230 mouse x lt 320 amp amp mouse y gt 130 Verificado clique dentro deste espa o Pilha IMPORTANTE Aqui devemos gravar a informa o de que o usu rio clicou nesta Pilha rectfill
28. uida o desenvolvedor pode adicionar quaisquer elementos gr ficos que desejar atrav s da seguinte chamada j mencionada no tutorial void blit BITMAP source BITMAP dest int source x int source y int dest x int dest y int width int height Contudo existe uma alternativa para essa chamada Pode existir por exemplo a necessidade de n o exibir certos elementos de uma imagem a ser carregada j que a mesma possui alguns pixels com valores transparentes Logo a seguinte chamada pode ser utilizada como a anterior void draw 5 bmp BITMAP sprite int x int y Os par metros s o e O primeiro par metro BITMAP bmp o buffer destino ou seja o buffer onde a imagem de origem ser copiada e O segundo par metro BITMAP sprite representa a imagem de origem a ser copiada no buffer Neste caso o objeto pode possuir alguns pixels com valores transparentes indesej veis para a visualiza o e Oterceiro e o quarto par metro int x int y semelhantemente chamada void blit s o respons veis por indicar o tamanho do buffer imagem de origem que ser copiado no buffer de destino Assim ap s inseridos todos os elementos gr ficos em somente um buffer o desenvolvedor pode copiar todo o conte do do mesmo para o buffer destinado visualiza o no display definido como screen Finalmente ap s a inser o dos elementos gr ficos no buffer e a visualiza o dos mesmos
29. ura 7 Search View Project Execute Debug Tools CVS Window Help Source Fie 4 8 E Open Project or File aro O Poea Goto T Resource File 3 gt 5 E E E a HH Compiler 5 Resources dh Compile Log Va Debug 8 Find Results Ready Figura 7 Selecionar a op o de cria o de um novo Projeto Assim uma nova janela abrir com as op es de Projeto disponibilizadas pelo Dev C Logo basta selecionar a aba MultiMedia marcar a op o Allegro application static dar o nome desejado ao projeto e finalmente clicar no bot o Tais procedimentos est o descritos na Figura 8 Project Execute Debug Tools CVS Window Help i 8 98 MHk 2 dlnset 4 Togge 1 Goto applicati Description statically linked Allegro application Project options Name O E Project 6 C Project Projectl Make Default Language Dk X Cancel Figura 8 Cria o de um novo projeto Allegro application static Posteriormente ser perguntado onde o novo projeto deve ser salvo O mesmo pode ser em qualquer diret rio desejado pelo programador Finalmente se feito corretamente o novo projeto ser criado e um pequeno trecho inicial de c digo introduzido ao usu rio O c digo descrito deve ser semelhante ao que segue finclude lt allegro h gt
30. v s da especifica o dos n veis de vermelho verde e azul respectivamente Vale a pena ressaltar que esses valores de intensidade devem estar no intervalo entre 0 e 255 e Por fim colocada a string desejada para a exibi o A forma com que a string utilizada semelhante chamada printf onde pode se tamb m colocar valores referentes a vari veis do contexto em quest o Logo pode se realizar o seguinte exemplo finclude lt allegro h gt int main allegro init install keyboard set color depth 32 set gfx mode GFX AUTODETECT WINDOW while key KEY ESC textprintf ex screen font 10 10 makecol 255 255 255 1 Hello World textprintf ex screen font 10 20 makecol 255 0 0 1 Exercicio numero 1 1 return O END OF MAIN Assim a sa da desse programa ser uma janela de tamanho 640X480 com as strings Hello World na cor branca e Exercicio numero 1 na cor vermelha com o ponteiro para as mesmas iniciados respectivamente em 10 10 e 10 20 Vale a pena ressaltar que neste exerc cio foi utilizada a fonte padr o disponibilizada pela Allegro Contudo caso seja necess rio tamb m poss vel criar e utilizar uma fonte customiz vel Este assunto n o ser tratado no tutorial e ficar como exerc cio 4 3 Criando e adicionando um objeto no display Uma poss vel necessidade pode ser a de exibir ao usu rio um
31. x int y int x1 int allegro init set color depth 32 set gfx mode GEX AUTODETECT WINDOWED 640 480 0 BITMAP buffer create bitmap 640 480 install keyboard install mouse show mouse screen while key KEY ESC if mouse b amp 1 x mouse x y mouse y mouse amp 2 x1 mouse x yl mouse circlefill buffer x y 50 makecol 255 255 255 circlefill buffer x1 yl 50 makecol 0 0 255 blit buffer screen 0 0 0 0 640 480 clear bitmap buffer return O END MAIN No exemplo acima vemos que existem duas verifica es no loop sendo estas mouse amp 1 e mouse b amp 2 Atrav s destas podemos respectivamente verificar se o usu rio pressionou o bot o esquerdo ou direito do mouse Al m disso caso alguma das verifica es for atendida os valores das posi es x e y do cursor s o armazenadas atrav s da verifica o das vari veis globais mouse x e mouse y Por fim utilizando as informa es do clique e posicionamento do cursor dadas pelo usu rio s o desenhados dois c rculos O primeiro com a cor branca desenhado na posi o designada pelo clique do bot o esquerdo enquanto que o segundo de cor azul desenhado na posi o do clique do bot o direito As imagens abaixo ilustram dois poss veis posicionamentos dos c rculos orientados pelo usu rio 22

Download Pdf Manuals

image

Related Search

Related Contents

OPERATING INSTRUCTIONS  AVG Rescue CD User Manual  Manual de uso y mantenimiento de los grupos  GE WWSE5200B Top Load Washer  Manual de Instruções 2282  4301PL PWM Adapter User`s Manual 4 2 Product Information 2.1  UDP32S Manual      

Copyright © All rights reserved.
Failed to retrieve file