Introdução editar

Finalidade editar

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

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

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

https://github.com/fgagamedev/Ankhnowledge

Gerenciamento de Configuração de Software editar

Organização, Responsabilidades e Interfaces editar

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

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

Ankhnowledge editar

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

Instalando pelos Binários (source) editar

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

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 gcccpp e g++, os demais pacotes são instalados pelo script de instalação do jogo.

Instalando o Jogo editar

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

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

Máquinas com distribuição Debian Based editar

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

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

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

Caso tenha instalado pelo pacote pode-se desinstalar de duas maneiras:

  1. Pelo assistente de instalação de software da sua distribuição clicando em 'Remover'
  2. 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

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

  • 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 editar

Objetivo do jogo é simples, o explorador que chegar primeiro ao baú que está no mapa vence!

Regras do Jogo editar

Os jogadores devem ter em mente algumas particularidades do jogo:

  1. Apenas os tijolos marrons são movíveis, os tijolos cinza são fixos.
  2. Não se pode mover tijolos caso tenha um jogador no lado em que se quer mover os tijolos.
  3. 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.
  4. 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.
  5. 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)
  1. 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]

Política de Branches editar

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

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

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

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

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

Link para vídeo do jogo no Youtube: [15]

Matéria - Gerência de Configuração de Software editar

Experiências editar

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

  • 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.