Ankhnowledge
Introdução
editarFinalidade
editarEste 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
editarO 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
editarEste 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
editarhttps://github.com/fgagamedev/Ankhnowledge
Gerenciamento de Configuração de Software
editarOrganização, Responsabilidades e Interfaces
editarPapel | 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
editarAtividade | 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
editarAnkhnowledge
editarAnkhnowledge é 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
editarInstalando pelos Binários (source)
editarO 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
editarAlgumas 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
editarApó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
editarPara 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
editarMáquinas com distribuição Debian Based
editarPara 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
editarPara 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
editarPara 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
editarCaso 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
editarO 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- 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- End Turn - Um botão dedicado para terminar seu turno de jogar sem ter que usar toda a stamina do personagem.
Objetivos
editarObjetivo do jogo é simples, o explorador que chegar primeiro ao baú que está no mapa vence!
Regras do Jogo
editarOs 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- Alan, The Explorer: [1]
- Suti, The Medjay: [2]
Tipos de blocos
editar- 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
editarTendo 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
editarmaster - 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
editarPara 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
editarVisando 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
editarDevido 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
editarLink para vídeo do jogo no Youtube: [15]
Matéria - Gerência de Configuração de Software
editarExperiências
editarComo 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- 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.