Ferramentas
Os elementos gerais necessários para a adequação da plataforma e ambientação para o desenvolvimento foram:
- Android SDK
- é o core do Android, contendo aplicação, máquinas virtuais para emulação, bibliotecas, drivers, arquivos de sistema e demais ferramentas
- para uso deste, foi baixado o Android Studio do site: https://developer.android.com/sdk/
- NDK - Native Development Kit
- ferramenta utilizada para realizar a compilação dos fontes do jogo
- a versão baixada foi a r10e do site https://developer.android.com/ndk/
- SDL - Simple Directmedia Layer
- possui bibliotecas específicas para desenvolvimento do jogo e tratamento de imagens
- a versão baixada foi a v2.0 do site https://www.libsdl.org/
- também foi necessário baixar separadamente a biblioteca “SDL_image”, que possui módulos que não vêm junto com o pacote SDL
- Apache Ant
- ferramenta utilizada para realizar o deploy da aplicação, ou seja, gerar o apk executável que será instalado ou emulado em um dispositivo com Android
- a versão baixada foi a v1.9.6 do site https://ant.apache.org/
Sobre o Jogo
O nome do jogo é Kingdom Blizzard, e é um jogo do tipo estratégico, estilo “capture the flag”,
englobando diversos aspectos de jogos neste formato. O tema é baseado nos reinos da era
medieval, e o ambiente é de nevasca, por isso o nome “Kingdom Blizzard”.
O objetivo é andar com o rei (personagem principal), passando pelos obstáculos e inimigos, até chegar do outro lado e capturar a bandeira. No caso de colisão com inimigos, o personagem volta à posição inicial do jogo. Não é possível se sobrepor (passar por cima) dos obstáculos no campo (icebergs). A moeda posicionada em um espaço do campo, se capturada pelo jogador, dará a ele um tempo de fuga, em que os inimigos ficarão congelados. O movimento do personagem se dá por toques na tela, por isso é necessário que o aparelho possua touchscreen.
Nas imagens do jogo a seguir é possível ter uma noção do esquema gráfico. Por ser estática a imagem não será possível ver a animação do jogo: os objetos e o personagem possuem quadros que mudam constantemente, e o personagem principal se vira ao lado que for direcionado no movimento, além dos inimigos que ficam o tempo todo indo de um lado para o outro horizontalmente, com a intenção de colidir com o personagem. As únicas peças estáticas no jogo são o fundo e os obstáculos (icebergs).
Obs: Não se enganem, este jogo não foi desenvolvido com o intuito de bombar no Google Play, mas apenas de conhecer, uma espécie de "hello world" nestas águas do Android.
Início/Término do jogo
Emulação
Inicialmente, o jogo foi testado através de emuladores do Android SDK. Por questões
de performance e adequação de hardware, este emulador teve de ser substituído. O programa
utilizado então para esta finalidade foi o BlueStacks, um emulador que atende bem pelo propósito. O jogo foi compilado oficialmente para rodar em Android versão (até) 5.0.1, e foi testado em alguns dispositivos (tablets e smartphones, com versões 4.x e 5.x de Android), não apresentando problemas.
Ambiente
A preparação do ambiente para o desenvolvimento foi provavelmente a etapa mais difícil (e bota difícil nisto), visto que a adequação e interação entre as variadas ferramentas para o desenvolvimento nem sempre demandam uma instalação e configuração padrão, apresentando muitas vezes mal comportamento como problemas e instabilidade, além de que possivelmente seja preciso baixar arquivos, bibliotecas e releases específicas de ferramentas, de acordo com o problema. No entanto ressalto aqui que a adequação do ambiente é fundamental para a construção do projeto e funcionamento da aplicação.
Basicamente, os passos seguidos foram:
- Descompactação e instalação das ferramentas listadas
- Extração da pasta principal “android-project”
- Criação da pasta assets na pasta principal para armazenar texturas
- Alteração do arquivo “Android.mk” da pasta android-project/jni
- Alterar nome do programa principal e adicionar demais criados
- Criação de link simbólico da pasta SDL dentro da android-project/jni
- Copiar a pasta do SDL_image para dentro da pasta SDL/include
- Copiar as libs jpeg-9, libpng-1.6.2, libwebp-0.3.0, tiff-4.0.3 e zlib-1.2.8 para a android-project/jni e mapeá-las no arquivo SDL2_image/Android.mk
- Configurar variáveis de ambiente no Windows para contemplar os diretórios:
- Variável Path
- {dir}\android-ndk-r10e;
- {dir}\apache-ant-1.9.6\bin;
- C:\Users\{user}\AppData\Local\Android\sdk;
- C:\Users\{user}\AppData\Local\Android\sdk\tools;
- C:\Users\{user}\AppData\Local\Android\sdk\build-tools;
- C:\Users\{user}\AppData\Local\Android\sdk\platform-tools
- Criar variável ANDROID_SDK_HOME:
- C:\Users\{user}\AppData\Local\Android\sdk
Depois do ambiente configurado, criar programa principal main.cpp na pasta android-project/jni/src, com declaração das bibliotecas a serem utilizadas (inclusive a SDL_image.h). Algumas configurações corretivas, avançadas e adicionais podem ser feitas, por exemplo, nos arquivos da pasta jni:
- Application.mk: contém informações do emulador e versão do Android
- src/Android.mk: contém declarações das pastas da infra (SDL, programas e bibliotecas)
Mídia e Texturas
Dentre os elementos que compõem o jogo, temos as texturas, que compõem a estética do jogo. Demais elementos como audio e efeitos visuais (como o flip dos sprites, por exemplo) não foram aprofundados por questões de suporte à plataforma, que são dificilmente encontrados. No mais, os sprites, textos e imagens que constituem a estética do jogo foram em sua maioria encontrados na internet ou produzidos por programas de manipulação de imagem (PhotoFiltre, Adobe Photoshop, etc). Dentre as texturas encontradas no jogo, temos:
- Sprite do personagem
- Sprites dos inimigos
- Sprite de objetos do jogo (no caso, a moeda)
- Objeto iceberg (obstáculo)
- Objetos bandeira e portal (posições inicial e final, respectivamente)
- Textura do plano de fundo
Algoritmo
O programa do jogo desenvolvido envolve aspectos fundamentais recorrentes de jogos, tais como efeitos de animação (texturas e sprites), sensação de movimento, detector de colisão, jogabilidade (herói, inimigo, obstáculos), níveis de dificuldade distintos durante o jogo (no caso, conforme aproximação do objetivo) e etapas principais: início, reinício e fim de jogo (no caso de vitória).
O algoritmo em si não será postado aqui pois é um pouco extenso. Pretendo em breve explicitar o funcionamento de um jogo básico (lógica/algoritmo) de forma genérica, em um post específico.
Obs: este jogo não foi desenvolvido com pretensões comerciais, assim não será disponibilizado no Google Play
Nenhum comentário:
Postar um comentário