Glossário

editar
Termo Descrição
'.deb' Extenção "Debian", para arquivos prontos para rodar diretamente em sistemas operacionais compatíveis com o Debian, tais como o Ubuntu e o Mint
'.exe' Extenção "EXEcutable file", para arquivos prontos para rodar diretamente em sistemas operacionais DOS, Windows, OS/2 e VMS
Empacotamento Ação de definir e reunir recursos que juntos, em um pacote, possuem alguma funcionalidade ou fazem parte de um sistema maior
FGA Faculdade do Gama, pertencente à UnB
GCS Gerência de Configuração de Software
IJE Disciplina de Introdução à jogos eletrônicos
LWW Last World War, o jogo que será utilizado no projeto
UnB Universidade de Brasília

Contexto do projeto

editar

O projeto que será executado por esse planejamento envolve fazer o empacotamento do jogo LWW para que então, esse possa ser distribuído digitalmente por meio de uma plataforma que está sendo desenvolvido para IJE, 1.2017.

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

editar

Introdução

editar

Esse documento possui a intenção de definir atividades, processos e ferramentas de GCS para a execução do objetivo do projeto.

Objetivo

editar

O objetivo do projeto é planejar e executar o empacotamento do jogo LWW para plataformas linux compatíveis e Windows. Com o empacotamento feito, será possível utilizar os pacotes gerados na plataforma que está sendo desenvolvida.

Escopo

editar
  • Pacotes .deb, para distribuições linux compatíveis, tais como o Ubuntu;
  • Pacotes .exe, para distribuições Windows;
  • Utilização da ferramenta Conan, para auxiliar o empacotamento;
  • Utilização de um contêiner da ferramenta Docker, para descobrir quais são as dependências do LWW e para auxiliar no deploy;
  • Descobrir e definir quais são as bibliotecas e outras dependências, para que o usuário final não tenha surpresas.

Gerência de Configuração de Software

editar

Cronograma

editar
Data Marco
24/04/2017 Apresentação dos planos de GCS dos projetos
25/04/2017 Estudo sobre empacotamento Debian
25/04/2017 Estudo sobre empacotamento Windows
09/05/2017 Começo da implementação do empacotamento do projeto
29/05/2017 Andamento dos projetos - Ponto de Controle 1
05/06/2017 Andamento dos projetos - Ponto de Controle 2
19/06/2017 Apresentação final dos projetos

Papéis

editar
Membro Tarefa
Matheus de Oliveira Desenvolver e aplicar o planejamento de GCS
Stefânia Bezerra Desenvolver e aplicar o planejamento de GCS

Sobre o LastWorldWar

editar

História do jogo

editar

O jogo consiste em conquista de território assim como o acúmulo de alguns itens.

O Jogo

editar

Comandos

editar

Botões

0 - Muda modo de visualização

1 - Selecionar unidade 1

2 - Selecionar unidade 2

3 - Unidade 2 atacar unidade 1

A, S, D, W - Movimenta o personagem

Imagens do jogo

editar

Na imagem abaixo, você tem o inicio do jogo, para movimentar o tanque, ou o soldado, ou o navio, você clica e utiliza as teclas 'A,S,D,W' para definir sua movimentação.

A imagem abaixo mostra os três personagens na posição diferente da do inicio do jogo.

 
Imagem dos movimentos

Quando se muda o modo de visualização, é mostrado o tipo de recurso que se tem naquela parte do mapa, como mostrado nas imagens abaixo:

 
Imagem dos recursos
 
Imagem de recursos

Vídeo de Gameplay

editar

O vídeo poderá ser acessado no Google Drive pelo link abaixo.

- LastWorldWar Gameplay: https://drive.google.com/file/d/0B_udPAYDuuIycV90bDREaDBoR2M/view

Execução das Atividades

editar

Manual de Instalação

editar

1ª Passo: Clonar o repositório

editar
$ git clone https://github.com/fgagamedev/LastWorldWar

2ª Passo: Instalando o compilador

editar
$ sudo apt-get install g++

3ª Instalando o SDL

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

Compilando o jogo

editar

1 - Entre na pasta do jogo e utilize o comando make.

2 - Execute o arquivo LastWorldWar ou utilize o comando make init.

É necessário o compilador 'gcc' e as bibliotecas 'SDL 1.2' e 'SDL_IMAGE 1.2'.

Compilando

editar

Para compilar todos os arquivos do jogo, utilize o seguinte comando:

$ make

Limpar pasta

editar

Para remover os arquivos  .d e .o, utilize o seguinte comando:

$ make clean

Executando o jogo

editar

Para executar o jogo e começar a jogar, utilize o seguinte comando:

$ make init

ou também pode executar o comando seguinte:

$ ./LastWorldWar

Mudando o UNIX Makefile para o CMAKE

editar

Um dos objetivos do projeto é o empacotamento do jogo. Para isso, é necessário utilizar algumas ferramentas que tornem esse processo mais simples e robusto. Uma das primeiras mudanças foi mudar o UNIX Makefile já presente no projeto para o CMake.

O CMake é capaz de criar Makefiles de forma muito mais simplificada e com suporte a várias plataformas. Além disso, essa mudança é uma chance de organizar melhor a estrutura do projeto.

O Makefile original é representado abaixo:

all:
	#g++ -g `sdl-config --cflags --libs` server.cpp -Wall -W -pedantic -ansi -lSDL -lSDL_image -lSDL_ttf -lSDL_net -o server

	g++ -g `sdl-config --cflags --libs` LastWorldWar.cpp Cenario.cpp Tile.cpp ClasseUnidade.cpp Unidade.cpp Random.cpp Draw.cpp Territorio.cpp ImageHandlerSDL.cpp biblioteca.cpp Network.cpp game.cpp AudioHandler.cpp FontHandler.cpp -Wall -W -pedantic -ansi -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net globals.cpp globalsGame.cpp Nacao.cpp Timer.cpp -o LastWorldWar -std=c++0x

init: LastWorldWar
	./LastWorldWar

clean:
	rm -rf LastWorldWar

Utilizando o CMake, é criado um arquivo CMakeLists.txt, que tem a função de indicar como a build será feita, gerando no final um Makefile correspondente às configurações indicadas no arquivo. A primeira versão criada do CMakeLists.txt é representada abaixo:

# Using the lastest version available for CMake to date
cmake_minimum_required(VERSION 3.8)

# Project's name
project(LastWorldWar)

# Get all .cpp files and set they to the source code
file(GLOB SOURCE_FILES *.cpp *.h)

# Set the output folder where your program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

# Set the libraries - Must have
find_package(SDL REQUIRED)
include_directories(${SDL2_INCLUDE_DIR})

# Set compiler flags
set(CMAKE_CXX_FLAGS "sdl-config --cflags --libs -Wall -W -pedantic -ansi -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net -std=c++0x -o -g")

# The following folder will be included
include_directories("${PROJECT_SOURCE_DIR}")

# Run the executable
add_executable(LastWorldWar ${SOURCE_FILES})
target_link_libraries(LastWorldWar ${SDL_LIBRARY})

A versão final do Cmake se encontra logo abaixo:

# Using the lastest version available for CMake to date
cmake_minimum_required(VERSION 3.8)

# Project's name
project(LastWorldWar)

# Set the libraries - Must have
find_package(SDL REQUIRED)
find_package(SDL_image REQUIRED)
find_package(SDL_mixer REQUIRED)
find_package(SDL_ttf REQUIRED)
find_package(SDL_net REQUIRED)

# The following folder will be added as "include" in C++ compilation
include_directories(include)

# Set all source files to a variable
file(GLOB SOURCE_CODE source/*.cpp)

# Set compiler flags
set(CMAKE_CXX_FLAGS "${SDL_CFLAGS} -Wall -W -pedantic -ansi -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net -std=c++0x -o -g")

# Executable for Main Game
add_executable(LastWorldWar LastWorldWar.cpp ${SOURCE_CODE})
include_directories(LastWorldWar ${SDL_INCLUDE_DIR} ${SDLIMAGE_INCLUDE_DIR} ${SDLMIXER_INCLUDE_DIR} ${SDLTTF_INCLUDE_DIR} ${SDLNET_INCLUDE_DIR})
target_link_libraries(LastWorldWar ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLMIXER_LIBRARY} ${SDLTTF_LIBRARY} ${SDLNET_LIBRARY})

# Executable for Server
add_executable(LastWorldWarServer server.cpp ${SOURCE_CODE})
include_directories(LastWorldWarServer ${SDL_INCLUDE_DIR} ${SDLIMAGE_INCLUDE_DIR} ${SDLMIXER_INCLUDE_DIR} ${SDLTTF_INCLUDE_DIR} ${SDLNET_INCLUDE_DIR})
target_link_libraries(LastWorldWarServer ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLMIXER_LIBRARY} ${SDLTTF_LIBRARY} ${SDLNET_LIBRARY})

# Installation - Install each needed file to a designated folder
INSTALL(TARGETS LastWorldWar DESTINATION LastWorldWar_GAME)
INSTALL(TARGETS LastWorldWarServer DESTINATION LastWorldWar_GAME)
INSTALL(FILES build/lazy.ttf build/mapaTeste.tmx DESTINATION LastWorldWar_GAME)
INSTALL(DIRECTORY build/images build/sound_effects build/soundtrack DESTINATION LastWorldWar_GAME)



# SECTION - Packaging for Debian systems
## Needed for .deb generation
SET(CPACK_GENERATOR "DEB" "NSIS")
SET(CPACK_NSIS_MODIFY_PATH ON)
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "FgaGameDev <https://github.com/fgagamedev/LastWorldWar>")

## Setting dependences - Auto Discovery
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)

## Installation info
set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/)

## Adding info
set(CPACK_PACKAGE_CONTACT "https://github.com/fgagamedev/LastWorldWar")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LastWorldWar game, from UnB-FGA students.")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")

## This should be the last item on this file
include(CPack)

Executando com o CMake

editar

Com o CMakeLists.txt preparado, é necessário iniciar o comando CMake no diretório em que o arquivo se encontra. No caso:

$ cmake .

Então, o CMake irá processar o que foi descrito no CMakeLists.txt e executar o que foi indicado. Ao finalizar, um novo Makefile é criado. É necessário utilizá-lo para compilar o jogo como o comando abaixo:

$ make

Por fim, é possível iniciar o jogo utilizando o comando:

./LastWorldWar

Empacotamento

editar

Após a configuração do Cmake, é possível criar qualquer tipo de empacotamento. Para a disciplina os empacotamentos utilizados seriam o .deb, para o Linux, e o .exe, para o Windows.

Empacotamento .deb

editar

Para executar o empacotamento .deb é necessário seguir os seguintes passos:

  1. Execute o Cmake
    $ cmake .
  2. Em seguida deve-se construir o pacote usando:
    $ make package
  3. Logo em seguida irá gerar um arquivo com o seguinte nome
    LastWorldWar-1.0.0-Linux.deb
  4. Para poder encontrar o jogo é necessário usar:
    /usr/local/LastWorldWar_GAME

Ferramentas utilizadas

editar

Considerações finais

editar

Pontos negativos

editar
  • O progresso do jogo não foi identificado mesmo conversando com o desenvolvedor do jogo.
  • Dificuldade de trabalhar com o Docker
  • Dificuldade em empacotar o jogo pelo meio tradicional
  • Dificuldade em realizar a compilação do .exe
  • Dificuldade em criar o Docker

Pontos positivos

editar
  • Descobriu-se que o Cmake é uma ótima ferramenta

Referências

editar
  1. LWW no GitHub: https://github.com/fgagamedev/LastWorldWar