Wenova: Rise of Conquerors

Plano de Gerência de Configuração de Software editar

Introdução editar

 
Logo do Jogo

Visão Geral editar

Este documento tem como objetivo definir o plano de gerência de configuração do jogo Wenova: Rise of Conquerors. Serão apresentados o contexto a ser aplicado, os objetivos da gerência de configuração, os papéis e responsabilidades da equipe, as ferramentas utilizadas e o cronograma.

Contexto editar

Wenova: Rise of Conquerors é um jogo que está sendo desenvolvido conjuntamente nas disciplinas de Introdução ao Desenvolvimento de Jogos, Música para Jogos e Design para Jogos da Universidade de Brasília. É um jogo de luta multiplayer de 4 jogadores que batalham em duplas entre si. O jogo é desenvolvido utilizando a linguagem de programação C++ e a biblioteca multimídia SDL.

Objetivos editar

Os principais objetivos da gerência de configuração do projeto são:

  1. Configuração automática de ambiente: Definir ambiente de desenvolvimento para o projeto.
  2. Integração Contínua: Configurar a integração contínua no repositório oficial do projeto.
  3. Políticas de uso do repositório: Definir a política de commits, issues e branches da aplicação.
  4. Manual de Configuração: Criar um manual de configuração de ambiente para contribuidores.
  5. Empacotamento Debian e RPM: Empacotar o jogo para instalação em sistema baseados em Debian, Red Hat e SUSE.

Papéis e Responsabilidades editar

Papel Responsabilidade Responsáveis
Desenvolvedor Desenvolver funcionalidades do jogo Igor Ribeiro, Vitor Barbosa, João Paulo Busche e João Vitor Araujo
Gerente de configuração de software Planejar e gerenciar atividades de configuração do jogo Mateus Manuel e João Vitor Araujo
Auditor de configuração de software Realizar auditorias e validar atividades Matheus Faria

Ferramentas editar

Ferramenta Descrição
Git Sistema de controle de versão dos arquivos do jogo.
GitHub Repositório remoto escolhido para hospedagem dos arquivos e que auxiliará no processo da política de branches.
Travis CI Serviço web de integração contínua para projetos do GitHub. Nele será colocado o Makefile compilará o projeto.
GNU Make Utilitário que contém instruções para a construção automática do código-fonte e de dependências.
Vagrant Ferramenta que permite a criação de ambiente virtual. No projeto será utilizado o VirtualBox como solução de virtualização utilizada pelo vagrant.
VirtualBox Software de virtualização que viabiliza a instalação de sistemas operacionas distintos.
Chef Ferramenta para criação e configuração automática de ambiente. No projeto será escrita uma receita para a construção do ambiente de desenvolvimento.

Cronograma editar

Atividade Data de Início Data de Entrega
Plano de Gerência de Configuração de Software 17/04/2017 24/04/2017
Configuração automática do ambiente 24/04/2017 01/05/2017
Políticas de uso do repositório 01/05/2017 08/05/2017
Manual de configuração 08/05/2017 15/05/2017
Integração Contínua 15/05/2017 22/05/2017
Empacotamento Debian e RPM 17/05/2017 17/06/2017

Execução da Gerência de Configuração de Software editar

Configuração Automática de Ambiente editar

Na fase de planejamento foi especificado que se utilizaria o Chef para a automatização de configuração do ambiente. Entretanto, com o estudo sobre as possibilidades do vagrant, foi constatado que para a configuração inicial necessária, o mesmo supre de forma satisfatória. Assim sendo, foi criando um arquivo Vagrantfile, no qual foi principalmente explorada a sessão de provision para a instalação dos recursos essencias para ao desenvolvimento do jogo.

Abaixo é possível verificar como ficou o arquivo do vagrant. De qualquer maneira será estudado mais para frente a possibilidade da utilização do Chef, já que novas bibliotecas poderão ser requisitadas, pois o projeto se encontra em desenvolvimento.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"

  config.ssh.forward_agent = true
  
  config.vm.synced_folder "../Wenova", "/home/vagrant/Wenova"

  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install g++ -y
    sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev -y
    sudo apt-get install git vim -y
    sudo apt-get install language-pack-pt -y
    git config --global core.editor "vim"
  SHELL

Políticas de Uso do Repositório editar

Política de Commits editar

Os commits e suas mensagens seguirão os seguintes padrões:

  • Um commit deve ser feito para cada componente funcional da funcionalidade descrita no nome da branch.
  • O título do commit deve começar com um verbo no imperativo indicando o escopo dele.
  • O título deve começar com letra maiúscula.
  • O título deve ter 50 caracteres ou menos.

Política de Issues editar

As issues criadas no repositório serão mapeadas de acordo com as funcionalidades definidas pela equipe de desenvolvimento. Cada issue representa uma funcionalidade, também poderão ser criadas issues relacionadas a bugs e refatorações a serem feitas no projeto. As issues devem ter um label indicando de qual tipo ela é - feature, bug ou refactoring - e devem utilizar o assign para definir os responsáveis por ela. O fechamento de cada issue é feito pelos gerentes de configuração ao integrarem a funcionalidade ou correção na branch de desenvolvimento.

Política de Branches editar

O projeto contará com 3 níveis de branches: master - devel - issues. A branch master receberá um pull request para cada entrega na disciplina de Introdução ao Desenvolvimento de Jogos (entregas de 30%, 70% e 100% do jogo). A branch devel receberá pull requests de funcionalidades implementadas ou bugs corrigidos. As branches de issue serão criadas a partir da versão mais atualizada da devel e uma branch será criada para a resolução de cada issue. Uma vez resolvida a issue, a integração dela na devel será feita através de um rebase seguido de um pull request para esta.

Política de Aprovação do Código editar

A aprovação e integração do código será feita a cada pull request da equipe de desenvolvimento para a branch devel. Os pull requests serão analisados pela equipe de gerência de configuração de software e será feita se tais condições forem satisfeitas:

  • Não houver conflito com a devel atual.
  • A ferramenta de integração contínua indicar compilação sem warning.
  • A funcionalidade estiver completa ou o bug resolvido.
  • Nenhum novo bug aparente foi introduzido.

Manual de Configuração editar

Instalação de Dependências editar

Para instalar as dependências do jogo, é possível utilizar esses métodos:

  1. Instalação via Vagrant
  2. Instalação manual

Instalação via Vagrant editar

Passo 1: Instale o Vagrant

Acesse o link abaixo para fazer o download do pacote compatível com seu sistema operacional. Há pacotes disponíveis para Windows, sistemas Debian-like, CentOS e MAC OS X:

   https://www.vagrantup.com/downloads.html

Passo 2: Clone o repositório

Apóis instalar o Vagrant, você pode clonar o projeto com o comando git clone:

$ git clone https://github.com/LManaslu/Wenova.git

Passo 3: Subindo a Máquina Virtual (VM)

Acesse a pasta do repositório clonado:

$ cd Wenova

Na pasta, há um Vagrantfile com todas as configurações para executar a máquina virtual no seu projeto.

Para iniciá-la, execute o comando up:

$ vagrant up

A primeira vez demorará vários minutos.

Passo 4: Accesse a Máquina Virtual

$ vagrant ssh

Na máquiva virtual, o caminho da pasta do clone do projeto estará sincronizado com /home/vagrant/Wenova

Quando for preciso sair da VM, você pode usar o comando logout:

$ logout

Na próxima vez, para rodar a VM, você precisará realizar os passos 3 e 4 novamente.

Instalação Manual editar

Se você preferir, pode instalar as dependências do jogo manualmente, utilizando comandos bash.

Passo 1: Clone o repositório

$ git clone https://github.com/LManaslu/Wenova.git

Passo 2: Instale o compilador de C++

$ sudo apt-get install g++

Passo 3: Instale as bibliotecas SDL

$ sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl2-mixer-dev

Compilar o código editar

Para compilar o código do jogo, dentro da pasta do jogo, você pode usar o Makefile disponível no repositório, há vários comandos make disponíveis:

  1. Compilar
  2. Limpar pasta obj/
  3. Limpar pasta obj/ e deletar executável do jogo

Compilar editar

Para compilar todos os arquivos .cpp da pasta src/ e todos os cabeçalhos .h da pasta include/, use o comando make:

$ make

Opcionalmente, para uma compilação mais rápida, você pode usar a flag -j:

$ make -j

Limpar pasta obj/ editar

Para remover todos os arquivos .d e .o da pasta obj/ , utilize o comando clean:

$ make clean

Limpar pasta obj/ e deletar executável do jogo editar

Para remover todos os arquivos .d e .o da pasta obj/ e excluir o binário executável da pasta bin/, utilize o comando dist-clean:

$ make dist-clean

Execução do Jogo editar

Para rodar o jogo compilado, utilize o comando run:

$ make run

Integração Contínua editar

Para a realização da integração contínua foi escolhida a ferramenta travis. Abaixo segue a configuração utilizada. As builds podem ser vistas em https://travis-ci.org/LManaslu/Wenova.

sudo: required
dist: trusty
language: cpp

install:
  - sudo apt-get update
  - sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl2-mixer-2.0-0 libsdl2-mixer-dev -y
compiler:
   - g++
script:
  - make

Empacotamento Debian editar

O empacotamento foi feito por meio do dpkg-deb, com os arquivos de configuração gerados manualmente. A pasta de empacotamento continha a pasta DEBIAN, que possui os arquivos de configuração dentro dela. Foram criadas, dentro da pasta de empacotamento, as pastas opt e usr. Na pasta opt, foi criada uma pasta chamada wenova, para que os recursos visuais, de áudio e de level design do jogo sejam instalados na pasta /opt/wenova do sistema em que ele será instalado. Na pasta usr foi criada uma pasta bin que contém o arquivo binário do jogo, para que ele possa ser executado pelo comando wenova a partir do terminal. A estrutura de pastas pode ser vista abaixo:

.
├── DEBIAN
│   ├── changelog
│   ├── control
│   └── copyright
├── opt
│   └── wenova
│       ├── edit_state
│          ├── floor
│          └── test_fighter
│       ├── flesh
│       ├── font
│       ├── hud
│       ├── joysticks
│       ├── menu
│       └── stage_1
└── usr
    └── bin
        └── wenova

14 directories, 62 files

Após a organização das pastas de empacotamento 32 bits e 64 bits, foram criados 3 arquivos na pasta DEBIAN, o control, copyright e changelog.

O arquivo control define os metadados do pacote, como informações de nome, versão, dependências, arquitetura e outros.

Package: wenova
Version: 0.4.1
Architecture: amd64
Maintainer: João Vitor Araujo <joao18araujo@gmail.com>
Installed-Size: 5800
Depends: libc6, libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, libsdl2-mixer-2.0-0
Homepage: https://github.com/LManaslu/Wenova
Priority: optional
Section: misc
Size: 5800
Original-Maintainer: João Vitor Araujo <joao18araujo@gmail.com>
Description: Multiplayer fighting game 2x2
 Game developed by UnB students to the Introduction to Game Development course

Acima é apresentado o arquivo control do pacote 64 bits, o control do pacote é idêntico, exceto pela linha de arquitetura, que é escrita dessa forma:

Architecture: i386

O arquivo changelog indica as mudanças dessa nova versão do pacote, não é um arquivo obrigatório para que o empacotamento aconteça, mas é necessário se o pacote for submetido para a comunidade Debian.

wenova (0.4-1) unstable; urgency=medium

  * Initial release
  * Fighter jumping, crouching, idle, falling and running
  * Joystick implemented
  * Changeable resolution
  * First stage with animations
  * Menu completed

 -- João Vitor Araujo <joao18araujo@gmail.com>  Sun, 11 Jun 2017 11:51:08 -0300

O arquivo copyright define a licença do pacote na versão atual.

MIT License

Copyright (c) 2017 LManaslu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMIT License

Copyright (c) 2017 LManaslu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.MITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Com a pasta e os arquivos de configuração criados, foram gerados dois binários, um para cada arquitetura, em máquinas virtuais de configuração mínimas de 32 e 64 bits. Após isso, foi construído o pacote pela ferramenta dpkg-deb, o comando usado foi:

dpkg-deb --build deb_package_64 .
dpkg-deb --build deb_package_32 .

Esse comando construiu ambos os pacotes, com nomes de acordo com formato pré-estabelecido <nomedopacote>_<versao>_<arquitetura>.deb, gerando, então, os pacotes wenova_0.4.1_amd64.deb e wenova_0.4.1_i386.deb.

Como definido no arquivo control, os pacotes dependem das seguintes bibliotecas:

  • libc6
  • libsdl2-2.0-0
  • libsdl2-image-2.0-0
  • libsdl2-ttf-2.0-0
  • libsdl2-mixer-2.0-0

A instalação do pacote através do terminal pode ser feita pelo comando sudo dpkg -i wenova_0.4.1_<arquitetura>.deb, os arquivos contidos na pasta do pacote de 64 bits estão disponíveis em https://github.com/LManaslu/Wenova/tree/debian/deb_package_64 e os arquivos da pasta de 32 bits estão disponíveis em https://github.com/LManaslu/Wenova/tree/debian/deb_package_32. Os arquivos .deb podem ser encontrados em https://github.com/LManaslu/Wenova/tree/debian/debian_packages.

Empacotamento RPM editar

Para o empacotamento foi utilizado a distribuição Fedora e por isso instalou-se os seguintes pacotes para auxiliar na construção do pacote:

$ yum install @development-tools
$ yum install fedora-packager

Então, foi construída a árvore de diretório requirida. Copiou-se o código para a pasta BUILD e foi adicionada a pasta SOURCES o .tar.gz gerado. Por fim, segue abaixo o spec criado.

Name: wenova
Summary: Wenova: Rise of Conquerors
Version: 0.1
Release: 1
License: MIT
Group: Amusements/Games
Source: wenova-0.1.tar.gz
URL: https://github.com/LManaslu/Wenova
Vendor: LManaslu
Packager: Mateus Manuel <mateusmanuel21@gmail.com>
BuildRoot: %{_tmppath}/%{name}-buildroot
Requires: gcc, make, SDL2_image, SDL2_mixer, SDL2_ttf

%description
Wenova: Rise of Conquerors is a game that development is doing by the courses Introduction to Game Development, Music for Games and Design for Games from University of Brasília. It´s a multiplayer fight game of 4 players that fight in pairs. The development is doing with C++ programming language and SDL multimedia lib.

%prep
make clean

%build
make

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/etc/wenova

make reset

cp -a bin/wenova $RPM_BUILD_ROOT/usr/bin/
cp -a res/ $RPM_BUILD_ROOT/etc/wenova

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)

/usr/bin/wenova
/etc/wenova

A partir da pasta SPECS, foi possível gerar o .rpm com o comando a seguir.

$ rpmbuild -ba wenova-0.1.spec

Referências editar