Imagina na Copa
Plano de Gerenciamento de Configuração de Software
editarO seguinte plano de gerenciamento de configuração de software descreve os principais objetivos e requisitos do projeto, e quais os passos que serão seguidos para a conclusão do plano.
Tema
editarImagina na Copa (InC) é um projeto iniciado e concluído durante a disciplina de Introdução à Jogos Eletrônicos no primeiro semestre de 2014. Tal projeto consolidou um produto: Um jogo plataforma/shooter para um ou dois jogadores.
Entretanto, a distribuição atualmente é feita através da cópia do código fonte do projeto. O usuário que deseja jogar InC deve utilizar da ferramenta make, disponível no repositório do projeto, para compilar e gerar o executável do jogo.
Objetivos
editar- Identificar itens de configuração do projeto
- Formalizar estado atual do projeto
- Gerar distribuição para Windows, Debian-based e RedHat-based Linux distros
Project Backlog
editarDuas categorias de requisitos são definidas para este plano: Épicos e Tarefas.
Épicos são conjuntos de tarefas que, ao serem realizadas, agregam grande valor ao projeto. Épicos possuem o prefixo Ei, onde i é o identificador do épico. Tarefas são atividades que, ao serem realizadas, contribuem para o desenvolvimento do épico. Tarefas possuem o prefixo EiTjk, onde i é o identificador do épico de origem, e jk o identificador da tarefa.
- E1: Criar Método de Gerenciamento de Configuração de InC
E1T01: Catalogar itens de configuração E1T02: Validar itens de configuração E1T03: Gerar issues para correção de eventuais discrepâncias E1T04: Criar manuais de configuração E1T05: Definir suíte de integração contínua
- E2: Aplicar Método de Gerenciamento de Configuração de InC
E2T06: Configurar Chef E2T07: Aplicar suíte de integração contínua E2T08: Desenvolver Cmake
- E3: Gerar Sistema de Distribuição de InC
E3T09: Gerar build DEB E3T10: Gerar build RPM E3T11: Gerar instalador Windows
Roadmap
editar- Método de Gerenciamento de Configuração de InC
Data-Limite: 08/05/2017 Versão: 1.1 Tarefas: E1T01, E1T02, E1T03, E1T04, E1T04, E1T05
- Projeto Configurado e Gerenciado
Data-Limite: 22/05/2017 Versão: 1.2 Tarefas: E1T06, E1T07, E1T08
- Projeto com Distribuições Prontas
Data-Limite: 12/06/2017 Versão: 1.2 STABLE Tarefas: E3T09, E3T10, E3T11
Gerência de Configuração de Software
editarItens de Configuração
editarBaseline 1.0
editar- Código-Fonte do Projeto
- Game Design Document
- Descrição: Documento que descreve com detalhes o jogo, conforme planejado
- Mantido em: Localmente
- Acesso ao estado final: Não encontrado
- Última data de atualização: Não consta
- Mantenedores: Iago Mendes, Jonathan Moraes, Luciano Almeida
- Sprites
- Sound Effects
- Background Music
Baseline 1.01 (Atual)
editar- Código-Fonte do Projeto
- Game Design Document
- Descrição: Documento que descreve com detalhes o jogo, conforme planejado
- Mantido em: Github (Wiki)
- Acesso ao estado atual: 8.0
- Última data de atualização: 22/05/2017
- Mantenedores: Jonathan Moraes
- Sprites
- Sound Effects
- Background Music
- Documento de Gerência de Configuração do Projeto
- Descrição: Documento que contempla o planejamento e a execução de gerência de configuração do projeto.
- Mantido em: Aqui
- Mantenedores: Jonathan Moraes, Laércio Jr
Deployment
editarCMake
editarPrimeiramente para rodar o CMake é necessário ter ele instalado, para instalar basta executar os comandos:
Ubuntu/Debian
editarsudo apt-get update
sudo apt-get install -y --force-yes cmake
Fedora
editarsudo yum -y install cmake
Após ter executado os comandos de instalação vá até onde foi realizado o clone do projeto "InC", configure compilador para g++.
cd InC
cmake -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_INSTALL_PREFIX:PATH=$(readlink -e $(pwd)/..) ..
No arquivo "CMakeList.txt" irá existir o seguinte arquivo:
cmake_minimum_required(VERSION 2.8)
project(InC CXX)
set(CPPFLAGS "-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -Wextra -Wshadow")
add_definitions(-std=c++11)
set( ROOT "${CMAKE_CURRENT_SOURCE_DIR}" )
set( SRC_DIR "${ROOT}/src")
set( LIB_DIR "${ROOT}/include")
file( GLOB LIBS ${LIB_DIR}/)
file( GLOB LIBS ${LIBS_DIR}/*.h)
include_directories(${LIBS_DIR})
set(CMAKE_CXX_FLAGS ${CPPFLAGS} ${LDFLAGS})
file( GLOB SRCS ${SRC_DIR}/*.cpp)
add_executable(InC ${LIBS_DIR} ${SRCS})
INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2_IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2_TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(SDL2_MIXER REQUIRED SDL2_mixer)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS} ${SDL2_MIXER_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(InC ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${SDL2_TTF_LIBRARIES} ${SDL2_MIXER_LIBRARIES})
Rode o comando para executar o CMakeList:
cmake .
A saída será algo parecido com:
-- The CXX compiler identification is GNU 4.8.4
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- checking for one of the modules 'sdl2'
-- checking for one of the modules 'SDL2_image'
-- checking for one of the modules 'SDL2_ttf'
-- checking for one of the modules 'SDL2_mixer'
-- Configuring done
-- Generating done
-- Build files have been written to: /vagrant/InC
Pronto um arquivo Makefile já foi gerado, com isso podemos realizar o build do projeto, com o seguinte comando:
make
Após isso é só executar o jogo com o comando:
./InC
Chef
editarPrimeiramente para rodar o Chef é necessário ter ele instalado, para instalar basta executar os comandos:
Ubuntu/Debian
editarsudo apt-get update
sudo apt-get install -y --force-yes chef
Fedora
editarsudo yum -y install chef
A receita está contida no seguinte arquivo (InC-environment.rb):
execute 'apt-get update'
## Libary SDL2
execute 'apt-get install -y --force-yes libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev'
## Git for clone
execute 'apt-get install -y --force-yes git'
## Clone project
execute 'git clone https://github.com/ImaginaNaCopa/InC.git'
execute 'cd InC'
## Build essential
execute 'apt-get -y --force-yes install build-essential'
## Cmake for build
execute 'apt-get -y --force-yes install cmake'
## Set compiler g++ for c++ (files *.cpp)
execute 'cmake -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_INSTALL_PREFIX:PATH=$(readlink -e $(pwd)/..) ..'
Para executar a receita digite o seguinte comando:
sudo chef-apply InC-environment.rb
Após o comando ser concluído, o ambiente estará pronto para ser usado.
Continuous Integration
editarA ferramenta selecionada para a integração contínua é Circle CI. O script da integração pode ser visto à seguir:
dependencies:
pre:
- if ! chef -v; then
if ! [ -f chefdk_0.3.5-1_amd64.deb ]; then
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.5-1_amd64.deb;
fi;
sudo dpkg -i chefdk_0.3.5-1_amd64.deb;
fi
test:
override:
- sudo chef-apply InC-environment.rb
Tal script prepara um ambiente Ubuntu para executar receitas Chef e requisita a execução da receita descrita na seção anterior. Se não ocorrer erros, a suíte valida a versão.
Empacotamento
editarPara Distros Debian
editarOs arquivos de configuração para distribuições debian pode ser visto na branch debian do projeto, são eles:
- changelog:
inc (1.01-1) UNRELEASED; urgency=medium
* Initial release. (Closes: #XXXXXX)
-- Jonathan Moraes <arkyebr@gmail.com> Thu, 08 Jun 2017 06:46:04 -0300
- compat:
10
- control:
Source: inc
Section: games
Priority: optional
Homepage: http://github.com/ImaginaNaCopa/InC
Maintainer: Jonathan Moraes <arkyebr@gmail.com>
Standards-Version: 3.9.2
Build-Depends: debhelper (>= 7.0.50~),
build-essential,
libsdl2-dev,
libsdl2-image-dev,
libsdl2-ttf-dev,
libsdl2-mixer-dev
Package: inc
Architecture: all
Depends:
${shlibs:Depends},
${misc:Depends},
build-essential,
libsdl2-dev,
libsdl2-image-dev,
libsdl2-ttf-dev,
libsdl2-mixer-dev
Description: Platform/Shooter Game
InC is a Platform/Shooter game created using SDL.
- copyright:
This package was Debianized by Jonathan Moraes <arkyebr@gmail.com>,
on Thu Jun 8 08:58:54 BRT 2017.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
- rules:
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_install:
$(MAKE) DESTDIR=$$(pwd)/debian/inc prefix=/usr install
- source/format:
3.0 (native)
- makefile:
# Folders containing files
INCLUDES := include
SOURCES := src
RESOURCES := res
BUILD := build
prefix = /usr/local
bindir = $(prefix)/bin
sharedir = $(prefix)/share
# Compiler
export LD := $(CXX)
# Compiler flags
CPPFLAGS=-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -std=c++0x -Wextra -Wshadow
# Linking flags
LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer
# Target program name
TARGET := inc
# Automatically build a list of object files
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
HPPFILES := $(foreach dir,$(INCLUDES),$(wildcard $(dir)/*.h))
# Object files
export OFILES := $(addprefix $(BUILD)/,$(CPPFILES:.cpp=.o))
# Source files
CPPFILES := $(addprefix $(SOURCES)/,$(CPPFILES))
# Build a list of include paths
export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) -I$(CURDIR)/$(BUILD)
all: main
install: all
install inc $(DESTDIR)$(bindir)
cr: clean run
run: main
./$(TARGET)
main:$(OFILES) $(HPPFILES)
@mkdir -p $(BUILD)
@echo Linking necessary libraries...
@$(LD) $(OFILES) $(CPPFLAGS) $(LDFLAGS) -o $(TARGET)
@echo Built executable "$(TARGET)"
$(BUILD)/%.o:$(SOURCES)/%.cpp
@mkdir -p $(BUILD)
@echo Building $^ ...
@$(LD) $(CPPFLAGS) -c $^ -o $@ $(INCLUDE)
clean:
@echo Cleaning...
@rm -rf $(BUILD)/
@rm -f $(TARGET)
@rm -f $(TARGET).exe
@rm -f *.dll
@rm -f LICENSES.txt