Ankhnowledge
Introdução
[editar | editar código-fonte]Finalidade
[editar | editar código-fonte]Este documento tem como finalidade especificar as práticas que serão realizadas e as ferramentas utilizadas no processo de gerencia e manutenção do software Ankhnowledge, um jogo produzido por alunos da Universidade de Brasília (UnB) em uma colaboração de alunos para a matéria, na Faculdade Gama (FGA), Introdução aos Jogos Eletrônicos.
Visão Geral
[editar | editar código-fonte]O Ankhnowledge é um jogo de multiplayer em rede desenvolvido em C++ com o apoio da API SDL, ele se passa em cenários do antigo egito onde os players disputam para ver quem consegue explorar mais rapidamente os mapas. O jogo foi desenvolvido no segundo semestre de 2013 e será usado como objeto para gerência de configuração de software.
Objetivo
[editar | editar código-fonte]Este projeto tem como objetivo adicionar:
- Documentações do Software
- Manual de Instruções
- Manual de Instalação
- Manual de Uso
- Change log
- Integração Contínua
- Política de Branches
- Empacotamento
Repositório do Projeto
[editar | editar código-fonte]https://github.com/fgagamedev/Ankhnowledge
Gerenciamento de Configuração de Software
[editar | editar código-fonte]Organização, Responsabilidades e Interfaces
[editar | editar código-fonte]Papel | Responsabilidade | Responsável |
---|---|---|
Desenvolvedor de software | Desenvolver o jogo Ankhnowledge | Arthur de Moura Del Esposte, Átilla Emiliano de Lima Gallio, Aline de Souza Campelo Lima, Vítor Makoto Matayoshi de Moraes. |
Gerente de Configuração de Software | Planejar e gerenciar atividades de configuração do jogo Ankhnowledge | João Pedro Sconetto, Omar Faria. |
Auditor de Configuração de Software | Verificar e validar os artefatos produzidos e atividades realizadas durante o projeto | Matheus de Sousa Faria |
Ferramentas, Ambiente e Infraestrutura
Ferramenta | Descrição |
---|---|
Travis CI | Serviço de integração contínua hospedados no GitHub. |
Ubuntu | Sistema Operacional que será usado na máquina virtual de empacotamento. |
Git | Ferramenta de controle de versionamento (VCS) utilizado pela equipe de desenvolvimento. |
Github | Serviço web hosting compartilhado que usa como ferramenta de versionamento o Git. |
Cronograma
[editar | editar código-fonte]Atividade | Data de Início | Data de Entrega |
---|---|---|
Elaborar Plano de Gerência de Configuração de Software | 24/04/2017 | 24/04/2017 |
Marco: Apresentação dos planos de GCS dos projetos | 24/04/2017 | 24/04/2017 |
Elaborar Documentações do Projeto | 24/04/2017 | 08/05/2017 |
Elaborar Política de branches | 08/05/2017 | 15/05/2017 |
Implementar Integração Contínua | 15/05/2017 | 22/05/2017 |
Marco: Andamento dos projetos | 29/05/2017 | 29/05/2017 |
Criar Empacotamento Linux | 22/05/2017 | 17/06/2017 |
Marco: Apresentação final dos projetos | 19/06/2017 | 19/06/2017 |
Documentações
[editar | editar código-fonte]Ankhnowledge
[editar | editar código-fonte]Ankhnowledge é um jogo multiplayer feito em C++ com auxílio da biblioteca de multimídia livre SDL (Simple DirectMedia Layer) que foi produzido durante a matéria de Introdução aos Jogos Eletrônicos.
O jogo se ambienta em cenários do antigo egito, onde dois jogadores disputam para ver quem é o melhor explorador.
Como Instalar
[editar | editar código-fonte]Instalando pelos Binários (source)
[editar | editar código-fonte]O jogo possui em seu source uma série de scripts para a instalação automática, na pasta raíz você vai encontrar:
- bootstrap.sh - script para criar os arquivos necessários para a instalação do jogo
- cleanup.sh - script para limpar arquivos temporários de instalação e compilação
- install-ankh.sh - script para instalação das dependências e instalação automática do jogo
- uninstall-ankh.sh - script para desinstalação automática do jogo
OBS: Para instalar o jogo é necessário permissões de super usuário.
OBS 2: Use apenas os scripts install-ankh.sh
e uninstall-ankh.sh
para as tarefas de instalação e desinstalação do jogo, não faça uso dos demais scripts a não ser que saiba exatamente o que está fazendo!
Dependências Necessárias
[editar | editar código-fonte]Algumas depedências necessárias para a instalação do jogo, sendo elas:
- gcc (>= 4:5.3.1-1ubuntu1)
- cpp (>= 4:5.3.1-1ubuntu1)
- gcc-5 (>= 5.3.1-3~)
- g++ (4:5.3.1-1ubuntu1)
- g++-5 (>= 5.3.1-3~)
- libtool (>= 2.4.6-0.1)
- autoconf (>= 2.69-9)
- automake (>= 1:1.15-4ubuntu1)
- libsdl-image1.2 (>= 1.2.12-5build2)
- libsdl-image1.2-dev (>= 1.2.12-5build2)
- libsdl-ttf2.0-0 (>= 2.0.11-3)
- libsdl-ttf2.0-dev (>= 2.0.11-3)
- libsdl-mixer1.2 (>= 1.2.12-11build1)
- libsdl-mixer1.2-dev (>= 1.2.12-11build1)
- libsdl-net1.2 (>= 1.2.8-4)
- libsdl-net1.2-dev (>= 1.2.8-4)
OBS: As versões podem variar de acordo com o SO utilizado (a máquina usada para testes e modificações era um Ubuntu 16.04.2 LTS Kernel 4.8.0-52-generic Arquitetura 64 bits).
OBS 2: É importante validar os pacotes do gcc, cpp e g++, os demais pacotes são instalados pelo script de instalação do jogo.
Instalando o Jogo
[editar | editar código-fonte]Após instalado as dependências necessárias, agora basta executar o script de instalação (dentro da pasta source baixada):
$ cd /home/<user>/<caminho-da-pasta>/ $ ./install-ankh.sh
ou
$ cd /home/<user>/<caminho-da-pasta>/ $ /bin/bash install-ankh.sh
Aguarde o termino do processo de instalação e se estiver tudo ocorrido sem problemas agora basta executar o jogo a partir do seu terminal, executando o seguinte comando:
$ Ankhnowledge
Tudo pronto! Agora é só jogar!
Desinstalando o Jogo
[editar | editar código-fonte]Para desinstalar o jogo também é simples, basta executar o script de desinstalação dentro da pasta source, onde os arquivos foram baixados:
$ cd /home/<user>/<caminho-da-pasta>/ $ ./uninstall-ankh.sh
ou
$ cd /home/<user>/<caminho-da-pasta>/ $ /bin/bash uninstall-ankh.sh
Basta aguardar o término da execução e pronto, o jogo estará desinstalado da sua máquina!
Instalando pelo pacote
[editar | editar código-fonte]Máquinas com distribuição Debian Based
[editar | editar código-fonte]Para instalar o Ankhnowledge pelo seu pacote (para máquinas com distribuição Debian Based), basta baixar por este link o pacote de instalação do jogo (será necessário permissões de superusuário para fazer a instalação), clicar para iniciar o processo, aguardar até que todas as depências sejam instaladas e, ao término, o Ankhnowledge estará instalado na sua máquina!
Máquinas com distribuição Red Hat Based
[editar | editar código-fonte]Para instalar o Ankhnowledge pelo seu pacote (para máquinas com distribuição Red Hat Based), basta baixar por este link o pacote de instalação do jogo (será necessário permissões de superusuário para fazer a instalação), clicar para iniciar o processo, aguardar até que todas as depências sejam instaladas e, ao término, o Ankhnowledge estará instalado na sua máquina!
Instalando pelo pacote via terminal
[editar | editar código-fonte]Para instalar o jogo via terminal basta acessar, via terminal, a pasta onde foi feito o download do pacote .deb e executar o seguinte comando:
$ sudo dpkg -i ankhnowledge-0.5.2_0.5.2-1_amd64.deb
Ou, no caso de de distribuições Red Hat Based, basta acessar, via terminal a pasta onde foi feito o download do pacote .rpm e executar o comando:
$ sudo rpm -i Ankhnowledge-0.5.2-1.fc25.x86_64.rpm
E o pacote será instalado.
OBS: O nome do pacote citado acima "ankhnowledge-0.5.2_0.5.2-1_amd64.deb" e "Ankhnowledge-0.5.2-1.fc25.x86_64.rpm" pode variar dependo do número da release. Portanto, atente-se ao nome do pacote quando for executar o comando.
Desinstalando o jogo
[editar | editar código-fonte]Caso tenha instalado pelo pacote pode-se desinstalar de duas maneiras:
- Pelo assistente de instalação de software da sua distribuição clicando em 'Remover'
- Pelo terminal digitando o seguinte comando:
$ sudo apt-get remove ankhnowledge
para distribuições Debian Based, ou
$ sudo rpm -e Ankhnowledge
para distribuiçẽos Red Hat Based.
Como Jogar
[editar | editar código-fonte]O jogo faz uso de um multiplayer local, os jodadores devem estar na mesma rede para poder jogar, um dos jogadores deve ser o anfitrião (host) e o outro conecta na sala do anfitrião para jogarem.
Após o jogo inciado, o host deve criar uma sala e esperar o segundo jogador se conectar, o segundo jogador deverá conectar na sala do host digitando o IP da máquina do host.
Após a entrada na sala os jogadores devem escolher entre dois exploradores, Adam The Explorer e Suti The Medjay, cada um tem sua habilidade especial e sua capacidade de exploração (stamina - número de blocos que consegue caminhar). Depois de selecionados os personagens o host deve escolher um dos cinco mapas disponíveis para então começar o jogo.
Lista de Comandos
[editar | editar código-fonte]- w - anda um bloco para cima.
- s - anda um bloco para baixo.
- a - anda um bloco para a esquerda.
- d - anda um bloco para direita.
- u + (w, s, a, d) - anda um bloco para a direção desejada e empurra tijolos para essa mesma direção
- y + clicar em um bloco - habilidade especial do personagem.
- Alan - ele mostra em branco blocos os quais ele pode se teleportar (blink).
- Suti - ele mostra em branco blocos os quais ele pode criar areias movediças que podem atrapalhar os adversários (quicksand) e ele pode também retirar blocos marrons e areias movediças para auxiliar ele.
- esc - sair do jogo em andamento.
Outros Comandos
[editar | editar código-fonte]- End Turn - Um botão dedicado para terminar seu turno de jogar sem ter que usar toda a stamina do personagem.
Objetivos
[editar | editar código-fonte]Objetivo do jogo é simples, o explorador que chegar primeiro ao baú que está no mapa vence!
Regras do Jogo
[editar | editar código-fonte]Os jogadores devem ter em mente algumas particularidades do jogo:
- Apenas os tijolos marrons são movíveis, os tijolos cinza são fixos.
- Não se pode mover tijolos caso tenha um jogador no lado em que se quer mover os tijolos.
- A quantidade de tijolos que o jogador move é somado para a subtração da sua stamina. Ex: Um jogador quer mover 2 tijolos para a direita, logo sua jogada irá gastar 3 de stamina, 1 da movimentação mais 2 da quantidade de tijolos.
- Potes de água adicionam 2 de stamina para o jogador, esta adição é permanente até o fim do jogo. Ex: Alan The Explorer começa com um total de 10 de stamina, enquanto Suti The Medjay começa com um total de 12 de stamina, caso Alan pegue 1 pote de água para os próximos turnos Alan inciará com um total de 12 de stamina, o mesmo caso segue para Suti, caso ele pegue 1 pote de água ele terá para os próximos turnos um total de 14 de stamina.
- O uso das habilidades especiais também utiliza stamina, os valores diferem para Alan e Suti:
- Alan usa 6 de stamina para fazer seu teleporte (blink)
- Suti usa 5 de stamina para fazer sua areia movediça (quicksand)
- As areias movediças vão aparecendo no mapa a cada fim de turno (além daquelas que o Suti produzir), e as areais atrapalham gastando a stamina dos jogadores, a cada areia movediça que o jogador pisa são retirados 3 de sua stamina. Ex: Um jogador tem 12 de stamina e vai se movimentar por um bloco que tenha areia movediça, seu movimento vai usar 4 de stamina, 1 para movição e 3 pelo fato de pisar em uma areia movediça.
OBS: Caso um jogador tenha stamina menor que 4, que seria o valor normal a ser subtraído de sua stamina para a movimentação sobre a areia, ele ainda conseguirá se movimentar mas sua stamina irá para 0 terminando seu turno.
OBS 2: Tijolos marrons não podem ser movidos na direção desejada caso do outro lado tenha uma areia movediça.
Personagens
[editar | editar código-fonte]- Alan, The Explorer: [1]
- Suti, The Medjay: [2]
Tipos de blocos
[editar | editar código-fonte]- Bloco de Movimentação [3]
- Tijolo Marrom [4]
- Tijolo Cinza [5]
- Pote de Água [6]
- Areia Movediça [7]
- Baú [8]
Política de Branches
[editar | editar código-fonte]Tendo como meta manter a integralidade e confiabilidade do código do projeto foi proposta a utilização de política de branches.
Essa Política de Branches deverá guiar os desenvolvedores na forma de organização de suas contribuições ao repositório.
Branches
[editar | editar código-fonte]master - Branch principal do repositório onde será permitida somente a integração de software consolidado e testado. Essa branch será exclusiva para a entrega de Realeases, ou seja, um conjunto maior de funcionalidades que integram o software.
devel - Branch para integração de novas funcionalidades.
Essas são as duas branches principais. A branch master é aquela que deve permanecer estável. A devel é aquela onde será feita a integração com as novas funcionalidades desenvolvidas.
feature-<nome da feature> - Para cada funcionalidade deverá ser criada uma branch onde deverá agregar o nome da funcionalidade no lugar de <nome da feature>.
bugfix-<número da issue> - Para o reparo de bugs deverá ser aberta uma issue e no nome da branch deverá ser agregado o número da issue correspondente no lugar de <número da issue>.
Passo a passo da criação e utilização de Branches
[editar | editar código-fonte]Para isso, imaginemos um caso onde a equipe está realizando o desenvolvimento de duas ou mais funcionalidades em paralelo. Por exemplo, suponhamos a necessidade de criação da funcionalidade signup e signin pelos usuários 1 e 2, respectivamente.
Considerando inicialmente que exista a branch devel criada e atualizada com a master.
1. Ambos os usuários devem criar uma branch a partir da devel.
$ git checkout devel
para garantir que a branch atual é a devel.
$ git checkout -b feature-signup
e
$ git checkout -b feature-signin
para criar e acessar as branches feature-signin e feature-signup.
2. Após o desenvolvimento das funcionalidades, adds e commits, os usuários devem fazer o merge na branch devel.
O próximo passo é de extrema importância e, por isso, necessita de atenção.
Deve-se haver a organização entre os usuários 1 e 2 para que entre em um acordo sobre quem realizará o merge primeiro. Supondo-se que o usuário 1 realizará o merge primeiramente. Para isso deve-se ir para a branch devel.
$ git checkout devel
E então dar o comando:
$ git merge feature-signup
para dar o merge da branch feature-signup na branch devel
3. A partir desse momento o usuário 2 deverá realizar a atualização de sua branch feature-signin com a devel pois aquela está desatualizada em relação a essa. Há outras formas de se fazer isso, mas aqui, a partir da branch feature-signin, será utilizado o comando
$ git pull --rebase devel
esse comando fará com que os commits das duas branches sejam reorganizados de acordo com a data e a hora de cada um reduzindo a chance de haver conflitos na hora do merge.
4. Após atualizada a feature-signin dá-se o merge dessa branch na devel.
$ git merge feature-signin
Integração Contínua
[editar | editar código-fonte]Visando manter a integridade do código e o acompanhamento de alterações no código a partir de todas as partes envolvidas o grupo propôs a implementação da integração contínua do projeto utilizando-se a ferramenta Travis CI.
Para a implementação da integração contínua bastou-se realizar a integração do Travis CI com o repositório do Github e elaborar o arquivo .travis.yml o qual contém as coordenadas para a criação da build.
Foram utilizados alguns artifícios do Travis para a notificação por e-mail para os dois integrantes do grupo sobre a quebra do repositório a partir de um commit na master, entre outros.
Abaixo, o código do arquivo .travis.yml que rege a integração contínua. Por fins de representação nesta wiki colocou-se o código todo junto, linhas em branco separando as partes.
$ sudo: required $ language: c++ $ dist: trusty $ compiler: $ - gcc $ before-install: sudo apt-get install libtool autoconf automake libsdl-image1.2 libsdl-image1.2-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev libsdl-mixer1.2 libsdl-mixer1.2-dev libsdl-net1.2 libsdl-net1.2-dev -y $ install: ./install-ankh.sh $ notifications: $ email: $ recipients: $ - omarfariajr@gmail.com $ - sconetto.joao@gmail.com $ on_success: change # default: change $ on_failure: always # default: always $ # safelist $ branches: $ only: $ - master
Imagens do Jogo
[editar | editar código-fonte]Devido a problemas com o Creative Commons do Wikiversity não foi possível inserir as imagens de forma nativa, abaixo segue a lista (com links para um host externo de imagens) com as imagens do jogo:
Tela Inicial - [9]
Seleção de Personagens - [10]
Seleção de Mapas - [11]
Aguardando Início da Partida - [12]
Tela de Opçõe - [13]
Tela Durante Partida - [14]
Vídeo do Gameplay do Jogo
[editar | editar código-fonte]Link para vídeo do jogo no Youtube: [15]
Matéria - Gerência de Configuração de Software
[editar | editar código-fonte]Experiências
[editar | editar código-fonte]Como um todo a aplicação de Gerência de Configuração do Software no jogo Ankhnowledge foi uma experiência proveitosa para equipe, os desafios enfrentados foram vistos como oportunidades as quais auxiliaram o engradecimento individual e time com o conhecimento angariado. Durante as mais diversas fases da aplicação ficou evidente para a equipe que gerir a configuração de software deve ser sempre aplicada quando possível, ela ajuda a manter a estabilidade durante o desenvolvimento além de auxiliar em outros aspectos do ciclo de vida do software, como em entregas (releases), mudanças, entre outros.
A parte negativa da matéria se deu pelo fato de algumas dificuldades enfretadas pela equipe durante a gerência de configuração, este, grande parte, se deu pelo software gerido ser legado e não ter nenhuma fonte de informação que auxiliou a equipe com as tarefas propostas na execução, mas isso será melhor elaborado a seguir.
Desafios e Dificuldades
[editar | editar código-fonte]- Desafio de compilar, instalar e rodar o jogo.
- Problema com depências (saber quais eram necessárias).
- Muitos erros.
- Erros com o empacotamento do software devido esta ser um primeiro contato com empacotamento.
- Problemas em enteder como jogar, quais os comandos e demais problemas relacionados ao gameplay.
- Inexperiência com algumas tecnologias.