• Nenhum resultado encontrado

Criação de plataforma para gestão de torneios online

N/A
N/A
Protected

Academic year: 2021

Share "Criação de plataforma para gestão de torneios online"

Copied!
134
0
0

Texto

(1)

Universidade de Aveiro Departamento deElectr´onica, Telecomunicac¸˜oes e Inform´atica,

2016

Daniel

Gomes

Oliveira

Cria¸

ao de Plataforma para Gest˜

ao de Torneios

(2)
(3)

Universidade de Aveiro Departamento deElectr´onica, Telecomunicac¸˜oes e Inform´atica,

2016

Daniel

Luis Gomes de

Oliveira

Cria¸

ao de Plataforma para Gest˜

ao de Torneios

Online

Dissertac¸˜ao apresentada `a Universidade de Aveiro para cumprimento dos requisitos necess´arios `a obtenc¸˜ao do grau de Mestre em Engenharia de Computadores e Telem´atica, realizada sob a orientac¸˜ao cient´ıfica do Doutor Joaquim Manuel Henriques de Sousa Pinto, Professor do Departamento de Eletr´onica, Telecomunicac¸˜oes e Inform´atica da Universidade de Aveiro.

(4)
(5)

Dedico todo o trabalho realizado ao longo do curso `a minha m˜ae, que estar´a sempre no meu pensamento. Ao meu pai, pela paciˆencia e pelo apoio incondicional. Ao meu irm˜ao, por estar sempre presente quando foi preciso. A todos as amizades que fiz durante o curso que influenciaram o meu trajeto e o melhoraram. `A Tatiana pela motivac¸˜ao dada nos momentos em que foi mais preciso e pela paciˆencia nos momentos menos bons.

(6)
(7)

o j´uri / the jury

presidente / president Professor Doutor Joaquim Arnaldo Carvalho Martins

Professor Catedr´atico da Universidade de Aveiro

vogais / examiners committee Professor Doutor Andr´e Frederico Guilhoto Monteiro

Professor Auxiliar Convidado Instituto Superior Miguel Torga

Professor Doutor Joaquim Manuel Henriques de Sousa Pinto

Prof. Auxiliar do Dep. Eletr´onica, Telecomunicac¸˜oes e Inform´atica da Universidade de Aveiro

(8)
(9)

agradecimentos Agradec¸o toda a ajuda disponibilizada pelo meu orientador, Professor Dou-tor Joaquim Manuel Henriques de Sousa Pinto que se mostrou dispon´ıvel sempre que precisei. Queria tamb´em agradecer ao Francisco Oliveira e ao Andr´e, da empresa Digitalmente, que tamb´em foram uma importante ajuda no desenvolvimento deste trabalho.

(10)
(11)

Resumo Todos os anos existem centenas de torneios organizados por clubes, princi-palmente nos escal˜oes de formac¸˜ao. Para cada torneio ´e necess´ario realizar um conjunto de ac¸˜oes no que toca `a organizac¸˜ao desde a parte inicial em que ´e necess´ario contactar as equipas, at´e `a entrega dos pr´emios aos ven-cedores, passando por toda a estruturac¸˜ao necess´aria. Inicialmente foram testados v´arios sistemas j´a existentes, no entanto nenhum era especifico o suficiente para o pretendido, sendo grande parte destinado a utilizadores in-dependentes e n˜ao tanto a clubes. O objetivo desta dissertac¸˜ao ´e a criac¸˜ao de um sistema que agilize todo este processo e que permita a reutilizac¸˜ao de informac¸˜ao relativa a equipas e jogadores entre diferentes torneios. Adicio-nalmente, existir´a uma ´area p´ublica que ir´a permitir o seguimento online do torneio pelos potenciais interessados.

(12)
(13)

Abstract Every year there are hundreds of tournaments organized by clubs, mainly at the training levels. For each tournament it is necessary to carry out a set of actions regarding the organization from the initial part in which it is necessary to contact the teams, until the delivery of the prizes to the winners, going through all the necessary structuring. In a first stage, several existing systems were tested, however none were specific enough for the intended, being almost all intended for independent users and not so much for clubs. The purpose of this thesis is to create a system that will streamline this process and allow the reuse of information regarding teams and players between different tournaments. In addition, there will also be a public area that will allow online tournament tracking by potential contenders.

(14)
(15)

Conte´

udo

Conte´udo i

Lista de Figuras iii

Lista de Listagens vii

Lista de Tabelas ix Acr´onimos xi 1 Introduc¸˜ao 1 1.1 Motiva¸c˜ao . . . 1 1.2 Objetivos . . . 1 1.3 Estrutura . . . 2 2 Estado de Arte 3 2.1 Sistemas existentes relacionados . . . 3

2.1.1 Tipos de estruturas organizacionais . . . 3

2.1.2 Tournament Software . . . 5 2.1.3 Konkuri . . . 7 2.1.4 Enjore . . . 8 2.1.5 Leverade . . . 12 2.1.6 Challonge! . . . 17 2.1.7 Tournament Scheduler . . . 19 2.2 Compara¸c˜ao . . . 21 2.3 Standards de desenvolvimento . . . 24 2.3.1 MVC . . . 24 2.3.2 MVP . . . 25 2.3.3 MVVM . . . 25 2.4 Tecnologias utilizadas . . . 27 2.4.1 PHP . . . 27 2.4.2 Bootstrap . . . 27 2.4.3 MySQL . . . 27 2.4.4 Laravel Framework . . . 27

Intera¸c˜ao com a Base de Dados . . . 27

(16)

3 Requisitos e Arquitetura do Sistema 37

3.1 Organiza¸c˜ao do sistema . . . 37

3.2 Casos de uso . . . 40

3.3 Estrutura da Base de Dados . . . 46

3.3.1 Primeira fase . . . 46 3.3.2 Segunda fase . . . 47 3.3.3 Terceira fase . . . 49 3.3.4 Quarta fase . . . 51 3.3.5 Fase final . . . 52 3.4 Arquitectura . . . 54 3.4.1 Estrutura . . . 54 3.4.2 Models . . . 56 3.4.3 Views . . . 58 3.4.4 Controllers . . . 63 3.4.5 Mapa da aplica¸c˜ao . . . 64

3.4.6 Sorteio das equipas pelos grupos . . . 70

3.4.7 Distribui¸c˜ao dos jogos . . . 76

4 Resultados 81 4.1 Resultados . . . 81

4.1.1 Opera¸c˜oes comuns . . . 81

4.1.2 Organizador do torneio . . . 89

4.1.3 Diretor de um clube . . . 94

4.1.4 Coordenador de uma equipa . . . 96

4.1.5 Extras . . . 96

Calend´ario de jogos edit´avel . . . 96

Caixa de pesquisa . . . 97

Edi¸c˜ao do regulamento e do convite . . . 97

Upload de ficheiros extra . . . 98

Barra informativa . . . 99

Pr´emios personalizados . . . 100

Ordena¸c˜ao personalizada de grupos . . . 100

Identifica¸c˜ao dos campos com recurso ao Google Maps . . . 101

5 Conclus˜ao 103 5.1 Conclus˜ao . . . 103

5.2 Trabalho Futuro . . . 104

(17)

Lista de Figuras

2.1 Exemplo de estrutura baseada em eliminat´orias simples para 8 equipas . . . . 4

2.2 Exemplo de estrutura baseada em eliminat´orias duplas para 4 equipas . . . . 4

2.3 Exemplo de estrutura baseada em grupos seguido de eliminat´orias para 16 equipas . . . 5

2.4 P´agina inicial Tournaments Software . . . 6

2.5 Apresenta¸c˜ao dos torneios existentes . . . 7

2.6 P´agina inicial Konkuri . . . 7

2.7 P´agina de apresenta¸c˜ao de torneio Konkuri . . . 8

2.8 P´agina inicial Enjore sem log in efetuado . . . 9

2.9 P´agina inicial Enjore com log in efetuado . . . 9

2.10 P´agina de adi¸c˜ao de equipas Enjore . . . 10

2.11 P´agina de escalonamento do torneio onde ´e poss´ıvel sortear as equipas pelos jogos Enjore . . . 11

2.12 P´agina de detalhes de jogo Enjore . . . 11

2.13 P´agina inicial Leverade . . . 12

2.14 P´agina de utilizador p´ublica Leverade . . . 13

2.15 P´agina de administrador Leverade . . . 13

2.16 Formul´ario de adi¸c˜ao de torneio Leverade . . . 14

2.17 P´agina de apresenta¸c˜ao de torneio Leverade . . . 14

2.18 ´Area de submiss˜ao de ficheiros Leverade . . . 15

2.19 ´Area de registo de equipas Leverade . . . 15

2.20 ´Area de convite Leverade . . . 16

2.21 ´Area de escalonamento dos jogos Leverade . . . 17

2.22 P´agina inicial Challonge! . . . 18

2.23 P´agina de cria¸c˜ao de um torneio Challonge! . . . 18

2.24 P´agina de apresenta¸c˜ao de um torneio Challonge! . . . 19

2.25 P´agina inicial Tournament Scheduler! . . . 19

2.26 P´agina de apresenta¸c˜ao de um torneio Tournament Scheduler! . . . 20

2.27 Diagrama MVC . . . 24

2.28 Diagrama MVP . . . 25

2.29 Diagrama MVVM . . . 26

2.30 Resultado de Club::where(’created by’, Auth::user()->id) . . . 29

2.31 Resultado de Club::where(’created by’, Auth::user()->id)->get() . . . . 29

2.32 Exemplo da organiza¸c˜ao de uma aplica¸c˜ao . . . 34

(18)

3.2 Diagrama dos casos de uso . . . 42

3.3 Estrutura inicial . . . 46

3.4 Estrutura segunda fase . . . 48

3.5 Estrutura terceira fase . . . 50

3.6 Estrutura quarta fase . . . 51

3.7 Estrutura final . . . 52 3.8 Estrutura simplificada . . . 55 3.9 Estrutura simplificada . . . 55 3.10 Modelos . . . 56 3.11 Views . . . 58 3.12 Diagrama simplificado . . . 61 3.13 Controladores . . . 63 3.14 Diagrama demonstrativo . . . 69

3.15 Escolha do tipo de estrutura . . . 70

3.16 Exemplo de estrutura¸c˜ao por elimina¸c˜ao para 8 equipas . . . 71

3.17 Exemplo de estrutura¸c˜ao por elimina¸c˜ao para 5 equipas . . . 72

3.18 Exemplo de estrutura¸c˜ao por elimina¸c˜ao para 6 equipas . . . 72

3.19 Exemplo de estrutura¸c˜ao por elimina¸c˜ao para 10 equipas . . . 73

3.20 Escolha do n´umero de grupos . . . 73

3.21 Escolha da estrutura para a pr´oxima fase . . . 74

3.22 Escolha das equipas qualificadas . . . 74

3.23 Estrutura de fase de grupos seguida de fases de elimina¸c˜ao . . . 75

3.24 Esrutura de fase de grupos seguida de jogos para apurar a qualifica¸c˜ao final . 76 3.25 Modo como ´e percorrido o grupo para a cria¸c˜ao dos jogos . . . 77

3.26 Modo como s˜ao percorridos os grupos para a cria¸c˜ao dos jogos . . . 77

3.27 Exemplo de atribui¸c˜ao de c´odigos para fase de grupos seguida de elimina¸c˜ao . 78 3.28 Exemplo de atribui¸c˜ao de c´odigos para estruturas baseadas em elimina¸c˜ao . . 79

4.1 P´agina principal . . . 82

4.2 P´agina de descri¸c˜ao de Torneio . . . 83

4.3 Separador categorias . . . 83

4.4 Separador com os grupos . . . 84

4.5 Separador com os jogos . . . 84

4.6 Separador com os pr´emios . . . 85

4.7 Separador com a localiza¸c˜ao do torneio . . . 85

4.8 P´agina de descri¸c˜ao de Clube . . . 86

4.9 P´agina de descri¸c˜ao de Equipa . . . 86

4.10 P´agina de descri¸c˜ao de Jogador . . . 87

4.11 P´agina de descri¸c˜ao de Utilizador . . . 87

4.12 P´agina de Log In . . . 87

4.13 P´agina de Registo . . . 88

4.14 P´agina de Perfil . . . 88

4.15 P´agina de Administra¸c˜ao . . . 89

4.16 P´agina de Cria¸c˜ao de um torneio . . . 89

4.17 P´agina de Adi¸c˜ao de Categoria . . . 90

4.18 P´agina de Gest˜ao de Convites . . . 90

(19)

4.20 P´agina de grupos . . . 91

4.21 P´agina de jogos . . . 92

4.22 P´agina de calend´ario de jogos . . . 92

4.23 Altera¸c˜ao de campo ou submiss˜ao de resultado . . . 93

4.24 P´agina de edi¸c˜ao dos convites . . . 93

4.25 P´agina de edi¸c˜ao do regulamento . . . 94

4.26 P´agina de cria¸c˜ao de um Clube . . . 95

4.27 P´agina de edi¸c˜ao de campos f´ısicos do clube . . . 95

4.28 P´agina de cria¸c˜ao de uma equipa . . . 96

4.29 P´agina de cria¸c˜ao de um jogador . . . 96

4.30 Distribui¸c˜ao dos jogos no calend´ario . . . 97

4.31 Exemplo de pesquisa . . . 97

4.32 Regulamento edit´avel . . . 98

4.33 Upload de ficheiros . . . 99

4.34 Convites recebidos apresentados na barra informativa . . . 99

4.35 Estado dos torneios . . . 99

4.36 Alertas recebidos . . . 100

4.37 Upload de ficheiros . . . 100

4.38 Factores de desempate para ordena¸c˜ao dos grupos . . . 101

(20)
(21)

Lista de Listagens

1 Exemplo de Query 1 . . . 28

2 Exemplo de Query 2 . . . 28

3 Exemplo do m´etodo de uma rela¸c˜ao 1-1 . . . 29

4 Exemplo do uso de uma rela¸c˜ao 1-1 . . . 29

5 Exemplo do m´etodo de uma rela¸c˜ao 1-1(Inverso) . . . 30

6 Exemplo do uso de uma rela¸c˜ao 1-1(Inverso) . . . 30

7 Exemplo do m´etodo de uma rela¸c˜ao 1-Muitos . . . 30

8 Exemplo do uso de uma rela¸c˜ao 1-Muitos . . . 30

9 Exemplo do m´etodo de uma rela¸c˜ao 1-Muitos (Inverso) . . . 30

10 Exemplo do uso de uma rela¸c˜ao 1-Muitos (Inverso) . . . 31

11 Exemplo de m´etodo de uma rela¸c˜ao Muitos-Muitos . . . 31

12 Exemplo de m´etodo de uma rela¸c˜ao Muitos-Muitos . . . 31

13 Exemplo do uso do m´etodo definido . . . 31

14 Exemplo do uso do m´etodo definido . . . 32

15 Exemplo de uma Migration . . . 32

16 View base para a parte p´ublica . . . 59

17 View base para a parte administrativa . . . 60

18 home.blade.php/welcome.blade.php . . . 60

19 dashboard.blade.php . . . 61

(22)
(23)

Lista de Tabelas

2.1 Tabela comparativa 1 . . . 21 2.2 Tabela comparativa 2 . . . 22 2.3 Tabela comparativa 3 . . . 22 2.4 Tabela comparativa 4 . . . 23 2.5 Tabela comparativa 5 . . . 23 2.6 Alguns m´etodos disponiveis para a manipula¸c˜ao de Collections . . . 28 2.7 Tabela de comandos . . . 33 3.1 Rotas resource resultantes . . . 64

3.2 Rotas definidas para o controlador HomeController . . . 65

3.3 Rotas definidas para o controlador UserController . . . 65

3.4 Rotas definidas para o controlador MainTournamentController . . . 65

3.5 Rotas definidas para o controlador TournController . . . 66

3.6 Rotas definidas para o controlador ClubController . . . 66

3.7 Rotas definidas para o controlador TeamController . . . 66

3.8 Rotas definidas pelo controlador PlayerController . . . 66

3.9 Rotas definidas para o controlador AwardController . . . 67

3.10 Rotas definidas para o controlador InviteController . . . 67

3.11 Rotas definidas para o controlador FieldController . . . 67

3.12 Rotas definidas para o controlador FixtureController . . . 68

(24)
(25)

Acr´

onimos

CRUD Create, Read, Update and Delete

JSON JavaScript Object Notation

PHP PHP: Hypertext Preprocessor

HTML HyperText Markup Language

MVC Model-View-Controller

MVVM Model-View-ModelView

MVP Model-View-Presenter

(26)
(27)

Cap´ıtulo 1

Introdu¸

ao

1.1

Motiva¸

ao

A pr´atica desportiva, seja qual for a idade do praticante, tem uma contribui¸c˜ao signifi-cativa na sua sa´ude e bem-estar. Mais especificamente os desportos coletivos, s˜ao bastante importantes durante a fase de adolescˆencia, funcionando muitas vezes como uma ”fuga”para os problemas que surgem nestas idades. Outros fatores bastante importantes que os desportos coletivos podem oferecer, neste caso o futebol de forma¸c˜ao, ´e o sentido de responsabilidade, de disciplina e conv´ıvio, bastante importantes na forma¸c˜ao e educa¸c˜ao de uma pessoa. No futebol de forma¸c˜ao, principalmente nos escal˜oes iniciais, como n˜ao existem campeonatos en-tre os diferentes clubes, s˜ao organizados torneios. Adicionalmente, tamb´em ´e costume serem realizados torneios durante a pr´e-´epoca, onde as equipas de escal˜oes que participem em cam-peonatos, se preparam para a competi¸c˜ao. Existem, portanto, centenas de torneios realizados anualmente por todo pais pelos clubes com equipas de forma¸c˜ao, por´em, para cada torneio a equipa organizadora tem de realizar um conjunto de tarefas, nomeadamente escolher as equipas, convidar as equipas, escolher a estrutura do torneio, realizar o sorteio, organizar um

calend´ario, escrever um regulamento, entre muitas outras. Todas estas tarefas podem ser

uniformizadas de forma a ajudar n˜ao s´o o clube organizador, como tamb´em os clubes parti-cipantes. Para al´em de tudo, nem sempre ´e f´acil oferecer `as pessoas que querem acompanhar os torneios acesso a hor´arios de jogos, resultados de jogos realizados, localiza¸c˜ao dos jogos, constitui¸c˜ao das equipas e toda a informa¸c˜ao referente ao torneio. Assim sendo, este sistema pretende n˜ao s´o oferecer uma plataforma que facilite o trabalho das equipas, mas, tamb´em, permitir que qualquer pessoa interessada tenha acesso a toda a informa¸c˜ao do torneio.

1.2

Objetivos

Esta disserta¸c˜ao tem como objetivo final o desenvolvimento de uma plataforma que per-mita aos clubes, inicialmente clubes de forma¸c˜ao de futebol presentes em Portugal, uma forma de facilitar e uniformizar todo o processo de prepara¸c˜ao e realiza¸c˜ao de um torneio de futebol, desde o envio de convites at´e `a atribui¸c˜ao de pr´emios. ´E tamb´em pretendido que a aplica¸c˜ao disponibilize a possibilidade de partilha de informa¸c˜ao relativa aos diferentes clubes entre torneios diferentes, assim como suporte para armazenamento de ficheiros relativos aos clu-bes e utiliza¸c˜ao de Google Maps na localiza¸c˜ao dos clubes e dos seus campos. Pretende-se, tamb´em, que exista uma ´area de acesso p´ublico para que qualquer pessoa possa consultar

(28)

informa¸c˜oes sobre os torneios existentes.

1.3

Estrutura

A disserta¸c˜ao est´a organizada em 5 cap´ıtulos. O primeiro cap´ıtulo cont´em uma introdu¸c˜ao ao projeto, expondo a motiva¸c˜ao e os objetivos. No segundo cap´ıtulo s˜ao comparados os sistemas j´a existentes, real¸cando as suas vantagens e o que os diferencia. Ainda neste cap´ıtulo s˜ao analisados os diferentes standards de desenvolvimento existentes e ´e feita, tamb´em, uma breve descri¸c˜ao das tecnologias utilizadas. No cap´ıtulo trˆes s˜ao apresentados os requisitos para o desenvolvimento da aplica¸c˜ao, onde consta tamb´em uma descri¸c˜ao da base de dados. No quarto cap´ıtulo ´e explicada toda a arquitetura que est´a por detr´as do sistema, sendo ainda explicada a sua implementa¸c˜ao e organiza¸c˜ao. No cap´ıtulo quatro, s˜ao apresentados os resultados alcan¸cados. Finalmente, no ponto 5, ´e conclu´ıda a tese com referˆencia, tamb´em, para o trabalho futuro.

(29)

Cap´ıtulo 2

Estado de Arte

Este cap´ıtulo tem como objetivo a apresenta¸c˜ao e compara¸c˜ao de trabalhos com fun¸c˜oes semelhantes `as pretendidas, destacando as diferen¸cas que potenciam a realiza¸c˜ao deste projeto.

Posteriormente ser˜ao comparados os diferentes standards de desenvolvimento web e, por

´

ultimo, ser˜ao descritas as tecnologias utilizadas.

2.1

Sistemas existentes relacionados

Neste momento est˜ao j´a dispon´ıveis um conjunto de software destinados ao suporte de atividade desportiva, em particular a cria¸c˜ao de torneios. Nesta sec¸c˜ao ser˜ao descritos os sistemas encontrados durante a fase de pesquisa e recolha de informa¸c˜ao para a fase de desenvolvimento. De modo a facilitar a perce¸c˜ao das diferentes estruturas de torneio referidas nos sistemas testados, foi feita previamente uma breve explica¸c˜ao dos tipos de estrutura organizacional que um torneio pode tomar.

2.1.1 Tipos de estruturas organizacionais

Nesta sec¸c˜ao ser˜ao contemplados os seguintes tipos:

• Eliminat´orias simples; • Eliminat´orias duplas;

• Grupos seguidos de eliminat´orias; • Round Robin;

O primeiro tipo de estrutura, eliminat´orias simples, ´e bastante intuitivo, as equipas s˜ao sorteadas de modo a jogarem entre si passando `a eliminat´oria seguinte a equipa que ganhar (Figura 2.1).

(30)

Figura 2.1: Exemplo de estrutura baseada em eliminat´orias simples para 8 equipas O segundo tipo, eliminat´orias duplas, consiste numa vers˜ao mais complexa das elimi-nat´orias simples. Neste caso, as equipas que perdem tˆem ainda uma hip´otese de ganhar o torneio tendo de jogar na chamada Losing bracket. A figura 2.2 demonstra como seria feita a divis˜ao para um torneio com 4 equipas.

Figura 2.2: Exemplo de estrutura baseada em eliminat´orias duplas para 4 equipas O terceiro tipo, grupos seguidos de eliminat´orias, consiste primeiramente no sorteio das

(31)

equipas pelo n´umero de grupos definido pelo utilizador, sendo que depois de realizados os jogos da chamada fase de grupos, ir˜ao ser apuradas equipas para jogar a seguinte fase, que ser´a de elimina¸c˜ao. Na figura 2.3 est´a representado um exemplo de uma estrutura deste tipo, em que 16 equipas s˜ao distribu´ıdas por 4 grupos, qualificando-se as duas primeiras equipas de cada grupo.

Figura 2.3: Exemplo de estrutura baseada em grupos seguido de eliminat´orias para 16 equipas Quanto ao quarto tipo, Round Robin consiste basicamente num grupo em que todas as equipas pertencentes a esse grupo se tˆem de defrontar, at´e que cada equipa tenha defrontado todas as outras. Este tipo pode ser conciliado com uma qualifica¸c˜ao pr´evia.

2.1.2 Tournament Software

O primeiro website encontrado foi o Tournament Software [1] cuja p´agina inicial ´e apre-sentada na figura 2.4.

(32)

Figura 2.4: P´agina inicial Tournaments Software

os torneios e campeonatos existentes. Ap´os a cria¸c˜ao de uma conta, ´e permitida a inscri¸c˜ao em torneios classificados como abertos, no entanto, n˜ao ´e poss´ıvel a cria¸c˜ao de torneios mesmo com conta criada. A p´agina que apresenta os torneios existentes e permite a sua pesquisa est´a representada na figura 2.5, onde s˜ao mostrados os torneios referentes `a modalidade futebol. Em adi¸c˜ao `a disponibiliza¸c˜ao dos torneios existentes, h´a por todo o website referˆencia ao software que permite a cria¸c˜ao e organiza¸c˜ao de torneios e ligas, tendo, no entanto, um custo para quem pretender utilizar.

O website permite, contudo, fazer a descarga de um demo do que seria a vers˜ao final do software, com algumas fun¸c˜oes bloqueadas. Ap´os a utiliza¸c˜ao do demo do software e da leitura do manual disponibilizado [2] foi poss´ıvel perceber as funcionalidades oferecidas, assim como o funcionamento do software.

O software revelou-se bastante completo, contendo cinco tipos de estrutura¸c˜ao(Elimina¸c˜ao simples e dupla, Round Robin, Elimina¸c˜ao com qualifica¸c˜ao pr´evia e Round Robin com qua-lifica¸c˜ao pr´evia), suporte para sorteio de grupos e jogos sendo que ´e necess´ario definir, pos-teriormente, a localiza¸c˜ao e data destes, permitindo ainda ao utilizador fazer um controlo de custos do torneio. Depois de criado o torneio ´e poss´ıvel public´a-lo online na p´agina do software onde pode ser consultado pelos interessados. Todas as fun¸c˜oes referidas requerem um pagamento pr´evio.

O sistema apresentado n˜ao permite, no entanto, o armazenamento de clubes, equipas ou jogadores para partilha entre os v´arios torneios utilizados na plataforma. Tamb´em em falta, est´a o suporte para armazenamento de ficheiros relacionados com o torneio e a possibilidade de adicionar pr´emios para al´em dos atribu´ıdos `as equipas vencedoras.

Concluindo, apesar do sistema ser bastante completo, tem um custo elevado e requer a descarga de uma aplica¸c˜ao e instala¸c˜ao no computador pessoal do utilizador. Foi, por´em, bastante ´util para perceber que informa¸c˜oes s˜ao necess´arias para a organiza¸c˜ao de um torneio.

(33)

Figura 2.5: Apresenta¸c˜ao dos torneios existentes

2.1.3 Konkuri

Outro sistema que tem como fun¸c˜ao base a cria¸c˜ao de um torneio ´e o Konkuri [3]. A p´agina inicial permite a cria¸c˜ao de um torneio sem que seja necess´ario fazer log in (Figura 2.6).

Figura 2.6: P´agina inicial Konkuri

(34)

a necessidade de descarregar qualquer tipo de programa. Embora seja gratuito, obriga `a utiliza¸c˜ao de cr´editos para algumas fun¸c˜oes poderem ser utilizadas. Estes cr´editos devem ser previamente comprados pelo utilizador.

Quanto `a utiliza¸c˜ao, ´e bastante intuitiva e o utilizador n˜ao ´e obrigado a criar uma conta para proceder `a cria¸c˜ao de um torneio, sendo, no entanto, necess´ario registar-se caso pretenda guardar o torneio. A figura 2.7 apresenta a p´agina que ´e mostrada ap´os a cria¸c˜ao de um torneio, que ´e por omiss˜ao criado para oito equipas.

Figura 2.7: P´agina de apresenta¸c˜ao de torneio Konkuri

S˜ao oferecidas trˆes possibilidades de estrutura(Elimina¸c˜ao simples, um grupo com todas as equipas ou grupos seguidos de elimina¸c˜ao) e a possibilidade de adicionar at´e oito compe-tidores gratuitamente. Caso o utilizador pretenda adicionar mais do que oito compecompe-tidores ou pretenda adicionar equipas com v´arios jogadores, ter´a de usar cr´editos sendo esta uma das fun¸c˜oes pagas. Mesmo que sejam adicionados competidores ou equipas, estes n˜ao s˜ao armazenados e n˜ao podem ser reutilizados em outros torneios. Tamb´em n˜ao est´a presente o suporte para convites entre clubes/equipas criadas, nem a possibilidade de armazenar ficheiros relativos ao torneio.

´

E poss´ıvel fazer o sorteio das equipas pelos grupos/jogos, sendo necess´ario definir poste-riormente a data do jogo. N˜ao existe a possibilidade de adicionar o local onde se realizar´a cada encontro.

Apesar de n˜ao ter suporte para convites, o que ser´a crucial no projeto que ser´a desen-volvido, a aplica¸c˜ao disponibiliza uma interface interessante no que toca `a apresenta¸c˜ao dos torneios e acompanhamento do processo de execu¸c˜ao dos mesmos.

2.1.4 Enjore

O Enjore [4], tal como os outros websites apresentados, ´e uma plataforma que se destina `

(35)

registar uma conta ou efetuar log in com o facebook e ver as informa¸c˜oes disponibilizadas referentes ao sistema. Ainda que o bot˜ao para criar torneios esteja vis´ıvel, ap´os pressionar o bot˜ao o utilizador ´e reencaminhado para a p´agina de log in.

Figura 2.8: P´agina inicial Enjore sem log in efetuado

Depois de efetuado o log in, o utilizador ´e reencaminhado para a p´agina 2.9 onde pode gerir toda a sua informa¸c˜ao.

(36)

Qualquer utilizador pode consultar os torneios existentes, no entanto, ´e obrigat´orio registar-se para conregistar-seguir criar o registar-seu torneio. Depois do registo ´e solicitada a cria¸c˜ao de uma ’orga-niza¸c˜ao’ que ser´a a entidade a que o utilizador e todos os seus torneios/campeonatos estar˜ao associados.

Como estruturas dispon´ıveis, est˜ao presentes elimina¸c˜ao simples, Round Robin e elimina¸c˜ao seguida de grupos. Depois de criado o torneio, ´e poss´ıvel adicionar equipas e, a cada equipa, ´e poss´ıvel adicionar jogadores. Estes dados s˜ao guardados apenas para a organiza¸c˜ao em quest˜ao, n˜ao sendo poss´ıvel fazer a sua reutiliza¸c˜ao para outros torneios que n˜ao perten¸cam `

a organiza¸c˜ao do utilizador, como ´e explicito na figura 2.10.

Figura 2.10: P´agina de adi¸c˜ao de equipas Enjore

O sistema suporta, tamb´em, o sorteio das equipas pelos jogos (Figura 2.11), sendo, no entanto, necess´ario definir manualmente a data e o campo para cada jogo depois destes terem sido gerados, como ´e demonstrado na figura 2.12 que mostra os detalhes de um jogo. Apesar de ser poss´ıvel definir uma morada para os campos, n˜ao existe suporte do Google Maps.

(37)

Figura 2.11: P´agina de escalonamento do torneio onde ´e poss´ıvel sortear as equipas pelos jogos Enjore

Figura 2.12: P´agina de detalhes de jogo Enjore

N˜ao est´a implementado um sistema de convites entre organiza¸c˜oes/equipas e os torneios e os utilizadores n˜ao podem solicitar a sua presen¸ca nos torneios apresentados. Estes s˜ao vis´ıveis publicamente apenas para consulta de informa¸c˜ao.

Por ´ultimo, apenas existe a atribui¸c˜ao de pr´emios para as equipas vencedoras n˜ao havendo a possibilidade de definir pr´emios personalizados. O armazenamento de ficheiros associados

(38)

a cada torneio tamb´em n˜ao ´e poss´ıvel.

2.1.5 Leverade

De todos os sistemas testados o que mais se aproxima dos objetivos do projeto ´e o Leverade [5], cuja p´agina inicial ´e apresentada na figura 2.13.

Figura 2.13: P´agina inicial Leverade

´

E um sistema que requer o registo e o pagamento por parte do utilizador para a sua utiliza¸c˜ao, disponibilizando, no entanto, quinze dias de utiliza¸c˜ao gr´atis, o que permitiu test´ a-lo.

Depois de ter sido criada uma conta e efetuado o log in, o utilizador ´e reencaminhado para a p´agina representada na figura 2.14, que funciona como um tipo de dashboard, dispo-nibilizando toda a informa¸c˜ao relativa ao utilizador.

(39)

Figura 2.14: P´agina de utilizador p´ublica Leverade

Usando o bot˜ao localizado no canto superior direito da p´agina da figura 2.14 o utilizador pode alterar para a vista de administrador (Figura 2.15). Aqui, ´epode-se pesquisar todos os torneios criados pelo utilizador, sendo, ainda, poss´ıvel criar um novo, ou competi¸c˜ao como ´e chamado na plataforma, surgindo durante este processo um formul´ario com alguns dados para preencher 2.16.

(40)

Figura 2.16: Formul´ario de adi¸c˜ao de torneio Leverade

Ap´os a cria¸c˜ao do torneio o utilizador ´e reencaminhado para a p´agina de administra¸c˜ao do mesmo (Figura 2.17), onde s˜ao apresentados sete separadores cada um com fun¸c˜oes especificas.

(41)

O primeiro separador (Configuration) destina-se `a configura¸c˜ao do torneio, onde podem ser alteradas informa¸c˜oes como o nome, a localiza¸c˜ao da sede do torneio com recurso ao Google Maps, entre outros. E tamb´´ em aqui que se encontra a ´area onde ´e poss´ıvel fazer upload de ficheiros relativos ao torneio, como ´e demonstrado na figura 2.18.

Figura 2.18: ´Area de submiss˜ao de ficheiros Leverade

O segundo separador (Registration) destina-se `a personaliza¸c˜ao das op¸c˜oes de registo, no caso do organizador pretender utilizar o modo de registo p´ublico.

No terceiro separador ´e tratada a informa¸c˜ao referente `as equipas participantes, sendo

poss´ıvel efetuar o registo de equipas, que ser´a guardado na base de dados. No entanto,

apenas ´e permitida a partilha de equipas entre competi¸c˜oes criadas pelo mesmo utilizador (Figura 2.19).

Figura 2.19: ´Area de registo de equipas Leverade

(42)

equipas, uma op¸c˜ao de convite em que ´e gerado um Link que ser´a enviado para o email da equipa que o organizador pretende convidar, podendo esta, potencialmente, fazer o registo no torneio (Figura 2.20).

Figura 2.20: ´Area de convite Leverade

Apesar de suportar convites, a sua troca n˜ao ´e estritamente feita atrav´es do website, pois o convite n˜ao ´e direcionado a nenhum utilizador em particular, mas apenas a um email que o organizador assume como sendo da equipa. A cada equipa ´e poss´ıvel, ainda, associar jogadores.

Quanto `as estruturas organizativas, est˜ao dispon´ıveis quatro (Liga, elimina¸c˜ao simples, grupos e grupos seguidos de elimina¸c˜ao), sendo poss´ıvel realizar em todas o sorteio de grupos e de jogos (Figura 2.21), embora seja necess´ario definir a data e o campo onde se v˜ao realizar os encontros depois do sorteio. Estas a¸c˜oes podem ser realizadas no quarto separador (Standings and calendar). A localiza¸c˜ao dos campos ´e feita com ajuda do Google Maps.

(43)

Figura 2.21: ´Area de escalonamento dos jogos Leverade

O quinto separador (Stats) apresenta as estat´ısticas dos jogadores e o sexto (Sanctions) permite sancionar jogadores. O ´ultimo separador (Economic control) destina-se somente ao controlo de custos do torneio.

Como referi anteriormente, este foi o sistema mais completo e aproximado do que seriam os objetivos finais do projeto que vai ser desenvolvido. No entanto, o projeto final ter´a como objetivo dar suporte total a todos os passos do torneio e possibilitar a comunica¸c˜ao entre os diferentes intervenientes das diferentes equipas, sendo destinado mais a organiza¸c˜oes reais e n˜ao tanto a qualquer utilizador que pretenda organizar um torneio.

2.1.6 Challonge!

O Challonge! [6] trata-se de uma sistema bastante mais simples destinado principalmente a torneios de jogos de computador online. A p´agina inicial sem log in(Figura 2.22) permite pesquisar os torneios existentes atrav´es da caixa de procura, utilizar um Bracket Generator para escalonar um torneio com base no n´umero de equipas ou ent˜ao proceder ao registo na p´agina por forma a poder criar um torneio e partilh´a-lo.

Depois de efetuado o log in ´e poss´ıvel proceder `a cria¸c˜ao de um torneio, surgindo a p´agina destinada a este fim (Figura 2.23). Aqui ´e necess´ario inserir os dados relativos ao torneio, assim como escolher, tamb´em, a estrutura pretendida. E poss´ıvel escolher entre´ quatro estruturas(Elimina¸c˜ao simples, elimina¸c˜ao dupla ,Round Robin e grupos seguido de elimina¸c˜ao). Quanto `a escolha das equipas que ir˜ao participar no torneio, o organizador pode optar entre duas possibilidades, designadamente ser ele a escolher as equipas que v˜ao participar, ou criar uma p´agina de registo a que cada equipa ter´a de aceder para se registar no torneio.

(44)

Figura 2.22: P´agina inicial Challonge!

Figura 2.23: P´agina de cria¸c˜ao de um torneio Challonge!

Depois de criado e de serem adicionadas as equipas necess´arias, ´e poss´ıvel realizar o sorteio das equipas pelos jogos (Figura 2.24). N˜ao ´e permitido adicionar nem a data dos jogos nem a sua localiza¸c˜ao.

Concluindo, ´e um sistema muito simples que apenas cont´em uma parte do que ser´a o objetivo final do projeto.

(45)

Figura 2.24: P´agina de apresenta¸c˜ao de um torneio Challonge!

2.1.7 Tournament Scheduler

Tamb´em bastante simples e com a fun¸c˜ao apenas de gerar e sortear os jogos necess´arios

para determinado n´umero de equipas, existe o Tournament Scheduler [7]. A sua p´agina

inicial serve, igualmente de p´agina de cria¸c˜ao de um torneio, como se pode verificar na figura 2.25.

(46)

Ap´os a inser¸c˜ao do n´umero de equipas, a estrutura(Round Robin ou double Round Robin) e as localiza¸c˜oes dos jogos ´e poss´ıvel gerar os encontros que ser˜ao necess´arios para apurar o vencedor do torneio. Tanto nas equipas como nas localiza¸c˜oes dos campos, apenas ´e permitido definir o seu nome.

Depois de gerado, ´e fornecido um Link para uma p´agina somente para consulta de in-forma¸c˜ao do torneio, e um Link de administrador para atualizar os resultados. Tanto a p´agina p´ublica como a de administrador tˆem o mesmo aspeto, apresentado na figura 2.26, sendo que na p´agina de administrador ´e poss´ıvel inserir e modificar os resultados dos jogos. O primeiro pode ser partilhado entre os interessados que queiram seguir a evolu¸c˜ao do torneio; o segundo serve apenas para realizar altera¸c˜oes ou inserir resultados. Nenhum torneio pode ser visto publicamente sem o Link p´ublico, que apenas o organizador tem em posse inicialmente.

(47)

2.2

Compara¸

ao

Esta sec¸c˜ao pretende clarificar as diferen¸cas existentes entre os diferentes sistemas testados e o que ´e pretendido alcan¸car com este projeto, real¸cando a necessidade da sua cria¸c˜ao.

Como suporte foram criadas cinco tabelas comparativas, cada uma referente a pontos de compara¸c˜ao distintos.

Na tabela 2.1 foram contemplados os pontos relativos `a cria¸c˜ao de torneios, `a possibilidade de participa¸c˜ao em torneios criados por outros utilizadores e aos tipos de estrutura disponi-bilizados por cada sistema. Constata-se que, embora todos os sistemas permitam a cria¸c˜ao de torneios, apenas o Enjore permite realiza-lo gratuitamente. Quanto `a participa¸c˜ao em torneios criados por outros utilizadores, apenas ´e poss´ıvel fazˆe-lo no Tournament Software, onde os torneios s˜ao disponibilizados online, e no Leverade atrav´es do convite por email.

No que toca aos tipos de estrutura apresentados, todas as aplica¸c˜oes contˆem elimina¸c˜ao simples e grupos seguidos de elimina¸c˜ao, divergindo apenas em algumas estruturas adicionais apresentadas pelos diferentes sistemas.

Website Criac¸˜ao de torneios Participac¸˜ao em torneios Tipos de estrutura

Tournament Software Mediante pagamento Gratuita

Elimina¸c˜ao simples e dupla,

Round Robin, Elimina¸c˜ao com qualifica¸c˜ao pr´evia e Round Robin com

qualifica¸c˜ao pr´evia

Konkuri Gratuita at´e 4 equipas ou

8 participantes individuais

O organizador define as equipas, n˜ao sendo poss´ıvel a uma equipa de fora solicitar a sua participa¸c˜ao

Elimina¸c˜ao simples,

grupos seguidos de elimina¸c˜ao e todos contra todos

Enjore Gratuita

O organizador define as equipas, n˜ao sendo poss´ıvel a uma equipa de fora solicitar a sua participa¸c˜ao

Elimina¸c˜ao simples,

Round Robin e elimina¸c˜ao seguida de grupos

Leverade Mediante pagamento

Mediante pagamento ´e poss´ıvel participar em torneios criados por outros utilizadores, atrav´es de um Link enviado por email

Liga, elimina¸c˜ao simples, grupos e grupos seguidos de elimina¸c˜ao

Tabela 2.1: Tabela comparativa 1

Na tabela 2.2 foram comparadas as v´arias formas como ´e efetuado o registo de clubes, equipas e jogadores para utiliza¸c˜ao no torneio. Em nenhuma das aplica¸c˜oes testadas ´e poss´ıvel guardar clubes, equipas ou jogadores para serem utilizados por outros torneios criados por uti-lizadores diferentes, sendo poss´ıvel, no entanto, em alguns casos a partilha dentro de torneios do mesmo utilizador(Leverade). Apenas no Konkuri n˜ao ´e permitida a cria¸c˜ao de clubes ou adi¸c˜ao de jogadores `as equipas.

(48)

Website Registo de clubes Registo de equipas Registo de jogadores Tournament Software

´

E poss´ıvel registar clubes, no entanto n˜ao ´e feita a partilha entre torneios

´

E poss´ıvel registar equipas, no entanto n˜ao ´e feita a partilha entre torneios

´

E poss´ıvel registar jogadores, no entanto n˜ao ´e feita a partilha entre torneios

Konkuri N˜ao suportado

´

E poss´ıvel registar equipas, no entanto n˜ao ´e feita a partilha entre torneios

N˜ao suportado

Enjore

´

E poss´ıvel registar clubes, no entanto n˜ao ´e feita a partilha entre torneios

´

E poss´ıvel registar equipas, no entanto n˜ao ´e feita a partilha entre torneios

´

E poss´ıvel registar jogadores, no entanto n˜ao ´e feita a partilha entre torneios

Leverade

´

E poss´ıvel registar clubes, no entanto n˜ao ´e feita a partilha entre torneios

´

E poss´ıvel registar clubes,

no entanto, a partilha entre torneios ´e feita apenas entre torneios

do mesmo organizador

´

E poss´ıvel registar clubes, no entanto a partilha entre torneios ´e feita apenas entre torneios do mesmo organizador

Tabela 2.2: Tabela comparativa 2

Na tabela 2.3 foi analisado o suporte para o sorteio de grupos e para o sorteio de jogos. Todos cumpriram este requisito, embora tanto o Tournament Software como o Leverade

apenas o permitam mediante pagamento. Em nenhum dos sistemas testados ´e feito o sorteio

em rela¸c˜ao aos campos ou `as datas, sendo sempre necess´aria a sua defini¸c˜ao posterior.

Website Sorteio de grupos Sorteio de jogos

Tournament Software Mediante pagamento

Mediante pagamento os jogos s˜ao sorteados, no entanto ´e necess´ario definir manualmente a data e o campo onde cada

jogo se ir´a realizar

Konkuri Suportado

Jogos s˜ao sorteados, no entanto ´e necess´ario definir manualmente a data e o campo onde cada jogo se ir´a realizar

Enjore Suportado

Jogos s˜ao sorteados, no entanto ´e necess´ario definir manualmente a data e o campo onde cada jogo se ir´a realizar

Leverade Mediante pagamento

Mediante pagamento os jogos s˜ao sorteados, no entanto ´e necess´ario definir manualmente a data onde cada

jogo se ir´a realizar Tabela 2.3: Tabela comparativa 3

No que concerne `a localiza¸c˜ao dos campos, datas de jogos e ao modo como s˜ao definidos os pr´emios foram contemplados na tabela 2.4. Em rela¸c˜ao `a localiza¸c˜ao dos campos, apenas o Konkuri n˜ao permite definir em que campo se realizar´a cada jogo. Embora todos os restantes possibilitem a localiza¸c˜ao, apenas o Leverade a viabiliza com recurso ao Google Maps.

Todos os sistemas testados suportam a defini¸c˜ao da data de cada jogo e todos atribuem pr´emios `as equipas vencedores, n˜ao permitindo ,no entanto, adicionar pr´emios personalizados, como por exemplo pr´emios para as equipas com menos cart˜oes amarelos/vermelhos.

(49)

Website Localizac¸˜ao dos campos Datas de jogos Pr´emios Tournament Software

Mediante pagamento permite a utiliza¸c˜ao de localiza¸c˜ao de campos sem suporte do Google Maps

Mediante pagamento Apenas pr´emios para as equipas vencedoras. N˜ao suporta pr´emios personalizaveis

Konkuri N˜ao Suportado Suportado Apenas pr´emios para as equipas vencedoras.

N˜ao suporta pr´emios personalizaveis

Enjore

Mediante pagamento permite a utiliza¸c˜ao de localiza¸c˜ao de campos sem suporte do Google Maps

Suportado Apenas pr´emios para as equipas vencedoras. N˜ao suporta pr´emios personalizaveis

Leverade Mediante pagamento Mediante

pagamento

Apenas pr´emios para as equipas vencedoras. N˜ao suporta pr´emios personalizaveis

Tabela 2.4: Tabela comparativa 4

A tabela 2.5 evidencia as diferen¸cas existentes em rela¸c˜ao ao suporte para troca de convites entre os organizadores e as equipas participantes e o suporte para armazenamento de ficheiros. Apenas o Leverade permite realizar ambas as fun¸c˜oes.

Website Suporte para troca de convites Suporte para ficheiros

Tournament Software N˜ao suportado N˜ao suportado

Konkuri N˜ao Suportado N˜ao suportado

Enjore N˜ao suportado N˜ao suportado

Leverade Mediante pagamento e atrav´es de link de convite Mediante pagamento

Tabela 2.5: Tabela comparativa 5

Ap´os a an´alise das diferentes aplica¸c˜oes encontradas, embora houvesse `a partida uma es-pecifica¸c˜ao e um conjunto de objetivos pr´e-definidos, foi poss´ıvel recolher alguma informa¸c˜ao sobre como estruturar e o que deve ser inclu´ıdo no projeto final. Assinala-se, por´em, que, enquanto que os sistemas testados se destinam mais a utilizadores independentes que preten-dem organizar um torneio, o pretendido no sistema a ser desenvolvido ´e o suporte para clubes de forma¸c˜ao. Como tal, ´e fundamental que exista uma base de dados com informa¸c˜ao dos clubes, equipas e jogadores, atualizada constantemente, e que possa ser partilhada entre os diferentes torneios, seja qual for o organizador do torneio. Esta fun¸c˜ao, como demonstrado anteriormente, n˜ao est´a dispon´ıvel em nenhum dos sistemas testados.

O sistema de convites tamb´em n˜ao est´a presente em nenhum dos sistemas, em que o mais pr´oximo foi o Leverade, que disponibiliza a possibilidade de convidar equipas atrav´es do email. No entanto, ´e necess´ario registar a equipa no ato de inscri¸c˜ao n˜ao sendo reutilizados dados de equipas existentes. O sistema de convites que se pretende construir tem por objetivo que os utilizadores consigam tratar de toda a log´ıstica associada ao convite e respetiva aceita¸c˜ao e confirma¸c˜ao de presen¸ca atrav´es do website.

(50)

2.3

Standards de desenvolvimento

Nesta sec¸c˜ao ir˜ao ser expostos alguns dos standards de desenvolvimento web existentes.

2.3.1 MVC

O modelo MVC tem por base trˆes entidades:

• Model - Representa a informa¸c˜ao que est´a presente na base de dados. A manipula¸c˜ao dos dados presentes na base de dados ´e feita atrav´es destes modelos, independentemente do tipo de base de dados, desde MySQL at´e um simples ficheiro XML. A configura¸c˜ao da base de dados ´e feita no ficheiro .env gerado automaticamente aquando da cria¸c˜ao do projeto.

• View - Representa as p´aginas que contˆem a parte visual de modo a permitir ao utilizador interagir com a aplica¸c˜ao.

• Controller - Intermedi´ario entre o Model e a View, aqui ´e tratada a informa¸c˜ao, quer seja apenas para apresentar em uma p´agina(View) informa¸c˜ao presente na base de dados(Model), quer seja para guardar na base de dados informa¸c˜ao que o utilizador introduziu.

Como ´e evidenciado na figura 2.27, neste modelo, depois de ser recebido o pedido, ´e o controlador que interage com o modelo para recolher os dados necess´arios disponibilizando-os depois na view respetiva.

´

E usado atualmente por muitas frameworks incluindo Ruby on Rails, Spring Framework e Laravel Framework utilizada neste projeto.

(51)

2.3.2 MVP

O modelo MVP (Figura 2.28 adaptada de [8]) ´e um modelo derivado do modelo MVC,

em que o controller existente no modelo MVC ´e substitu´ıdo pelo presenter [8].

Figura 2.28: Diagrama MVP

Tal como o modelo MVC, este modelo tem por base trˆes aspetos, sendo os dois primeiros (Model e View) semelhantes ao modelo descrito no ponto anterior:

• Model - Representa a informa¸c˜ao que est´a presente na base de dados. A manipula¸c˜ao dos dados presentes na base de dados ´e feita atrav´es destes modelos, independentemente do tipo de base de dados, desde MySQL at´e um simples ficheiro XML. A configura¸c˜ao da base de dados ´e feita no ficheiro .env gerado automaticamente aquando da cria¸c˜ao do projeto.

• View - Representa as p´aginas que contˆem a parte visual de modo a permitir ao utilizador interagir com a aplica¸c˜ao.

• Presenter - ´E respons´avel pelo tratamento de todos os eventos provenientes da interface

apresentada pela view. Recebe o input dos utilizadores atrav´es das views e depois

processa os dados com a ajuda do model, passando-os depois novamente para a view. O presenter tem o trabalho de servir de suporte `a view, sendo a comunica¸c˜ao entre eles feita atrav´es de uma interface.

O presenter e as views tˆem uma rela¸c˜ao de um para um, sendo que a cada view est´a associado um presenter.

2.3.3 MVVM

O modelo MVVM (Figura 2.29 adaptada de [8]) ´e, tamb´em, um modelo derivado do

(52)

Figura 2.29: Diagrama MVVM

Tal como o modelo MVC, este modelo tem por base trˆes aspetos, sendo os dois primeiros (Model e View) semelhantes ao modelo descrito no ponto anterior:

• Model - Representa a informa¸c˜ao que est´a presente na base de dados. A manipula¸c˜ao dos dados presentes na base de dados ´e feita atrav´es destes modelos, independentemente do tipo de base de dados, desde MySQL at´e um simples ficheiro XML. A configura¸c˜ao da base de dados ´e feita no ficheiro .env gerado automaticamente aquando da cria¸c˜ao do projeto.

• View - Representa as p´aginas que contˆem a parte visual de modo a permitir ao utilizador interagir com a aplica¸c˜ao.

• View Model - Implementa m´etodos e comandos que ajudam a manter o estado da view

e a manipular o modelo como resultado de a¸c˜oes realizadas na view. A comunica¸c˜ao entre a view e o view model ´e feita atrav´es de um mecanismo de binding.

(53)

2.4

Tecnologias utilizadas

A escolha destas foi motivada pelo facto de terem sido recomendadas pela empresa, que, desta forma, pˆode oferecer uma melhor ajuda sempre que foi necess´ario.

2.4.1 PHP

PHP ´e uma linguagem de programa¸c˜ao destinada a desenvolvimento web e pode ser

em-butida em HTML. O seu c´odigo ´e interpretado do lado do servidor pelo m´odulo PHP[9],

que tamb´em gera a p´agina web a ser visualizada no lado do cliente. O principal objetivo da

linguagem ´e permitir que programadores web desenvolvam paginas geradas automaticamente

com rapidez[10] [11]. A programa¸c˜ao em PHP ´e muito parecida com a programa¸c˜ao em C, Java ou Perl e a estrutura¸c˜ao do c´odigo ´e muito simples e intuitiva. O PHP ´e um software gratuito, com o c´odigo disponibilizado sob a PHP License, e pode ser instalado gratuitamente.

2.4.2 Bootstrap

O Bootstrap ´e uma web framework gratuita destinada ao desenvolvimento da parte visual de websites e aplica¸c˜oes web. Como tal, foca-se apenas na parte de front-end, e para al´em de templates, cont´em uma vasta variedade de bot˜oes, formul´arios, barras de navega¸c˜ao e

outros elementos que podem ser utilizados[12]. Apresenta tamb´em como vantagens o facto

de ser otimizado para o desenvolvimento de layouts responsivos e de funcionar em todos os navegadores atuais.

2.4.3 MySQL

MySQL ´e uma das base de dados mais popular no mundo, sendo neste momento

desen-volvida, distribu´ıda e suportada pela empresa Oracle. ´E gratuita e uma garantia de boa

performance, confi´avel e de f´acil utiliza¸c˜ao, ideal tanto para pequenas aplica¸c˜oes como para aplica¸c˜oes mais compostas.[13] [11] [14]

2.4.4 Laravel Framework

Para o desenvolvimento da aplica¸c˜ao foi utilizado o framework Laravel [15] [16], que se baseia no modelo de arquitetura MVC, explicado no pr´oximo ponto. Para al´em de melhorar a eficiˆencia na elabora¸c˜ao do c´odigo, a framework ´e escal´avel e robusta [17]. ´E chamada de uma framework ’full stack’, pois lida com todas as tarefas da aplica¸c˜ao desde a gera¸c˜ao da base de dados at´e `a gera¸c˜ao do HTML. Outra vantagem consiste na facilidade oferecida para configurar o projeto aquando da sua cria¸c˜ao, sendo bastante f´acil criar e colocar uma aplica¸c˜ao a funcionar, tendo apenas de se editar um ou outro ficheiro de configura¸c˜ao.

Interac¸˜ao com a Base de Dados

A intera¸c˜ao com a base de dados ´e feita atrav´es do Eloquent ORM[18] inclu´ıdo na

framework, que consiste numa implementa¸c˜ao PHP ActiveRecord[18] em que cada tabela

presente na base de dados tem um ’Model’ correspondente [19]. O modo como s˜ao feitos os

pedidos `a base de dados(Querys) s˜ao facilitados, substituindo a escrita de c´odigo SQL por m´etodos, como apresentado no exemplo 1, em que ´e pedido `a tabela correspondente ao mo-delo ’Fixture’ presente na base de dados que retorne o elemento com o id passado ao m´etodo

(54)

’find’ como argumento. ´E igualmente poss´ıvel sobrepor m´etodos para pedidos mais elabora-dos, como ´e demonstrado no exemplo 2, em que para al´em de ser usado o m´etodo ’where’ para filtrar, ´e, tamb´em usado o m´etodo ’orderBy’ para ordenar os elementos e, finalmente, o m´etodo first para retornar o primeiro elemento do resultado dos dois m´etodos anteriores.

$ f i x t u r e = F i x t u r e : : f i n d ( $ f i x t u r e i d ) ;

Listagem 1: Exemplo de Query 1

$ m a i n t o u r n a m e n t = MainTournament : : where (’ c r e a t e d _ b y ’, Auth : : u s e r ( )−>i d ) −>orderBy (’ n a m e ’,’ ASC ’)

−> f i r s t ( ) ;

Listagem 2: Exemplo de Query 2

Qualquer conjunto de resultados retornado pelo Eloquent constitui uma instˆancia da

classe Collection, a partir da qual ´e poss´ıvel usar um conjunto vasto de m´etodos que

per-mitem manipular essa Collection. A tabela 2.6 apresenta alguns dos m´etodos dispon´ıveis

adaptados da documenta¸c˜ao disponibilizada [20], assim como uma breve descri¸c˜ao da sua fun¸c˜ao.

M´etodo Descric¸˜ao Utilizac¸˜ao

contains Avalia se a cole¸c˜ao cont´em um elemento $collection− > contains(0Desk0); count Retorna o n´umero total de elementos da cole¸c˜ao $collection− > count();

isEmpty Avalia se a cole¸c˜ao tem elementos $collection− > isEmpty(); random Retorna um elemento aleat´orio da cole¸c˜ao $collection− > random(); sort Ordena por ordem crescente a cole¸c˜ao $sorted = $collection− > sort(); sortBy Ordena por ordem crescente a cole¸c˜ao com base

na {key} passada como argumento $sorted = $collection− > sortBy(

0price0);

toJson Converte a cole¸c˜ao em JSON $collection− > toJ son(); toArray Converte a cole¸c˜ao em um array PHP $collection− > toArray(); where

Filtra a cole¸c˜ao, obtendo os elementos em que a {key} passada como argumento 1 ´e igual ao valor passado como argumento 2

$f iltered = $collection− > where(0price0, 100);

Tabela 2.6: Alguns m´etodos disponiveis para a manipula¸c˜ao de Collections

No entanto, para poder usar estes m´etodos, ´e necess´ario, como foi dito, que o objeto seja uma instˆancia de Collection. Para isso ´e preciso usar o m´etodo get sobre o resultado

retornado pela base de dados. Na figura 2.30 ´e apresentado o objeto resultante da Query

sem recurso ao m´etodo get. Sendo da classe Builder, n˜ao ´e possivel utilizar os m´etodos de manipula¸c˜ao de Collection.

(55)

Figura 2.30: Resultado de Club::where(’created by’, Auth::user()->id)

Recorrendo ao m´etodo get, figura 2.31, o resultado obtido ´e agora uma Collection,

tornando-se poss´ıvel a sua manipula¸c˜ao atrav´es dos m´etodos dispon´ıveis.

Figura 2.31: Resultado de Club::where(’created by’, Auth::user()->id)->get()

Por ´ultimo, ´e tamb´em muito intuitivo o modo como s˜ao tratadas as rela¸c˜oes na base de dados. Se o modelo estiver devidamente constru´ıdo ´e poss´ıvel obter, facilmente, dados de tabelas relacionadas, seja qual for o tipo de rela¸c˜ao [21].

Para demonstrar como ´e replicada uma rela¸c˜ao do tipo um para um (One-to-One), ´e utilizado como exemplo a rela¸c˜ao entre um utilizador e o seu n´umero de telefone, sendo

que um utilizador apenas pode estar associado a um n´umero de telefone. Na Listagem 3,

est´a o m´etodo phone, que teria de ser definido no modelo correspondente ao Utilizador. Atrav´es dele ´e poss´ıvel obter o n´umero de telefone correspondente ao utilizador que invoca o m´etodo(Listagem 4).

p u b l i c f u n c t i o n phone ( ) {

r e t u r n $ t h i s −>hasOne (’ App \ P h o n e ’) ; }

Listagem 3: Exemplo do m´etodo de uma rela¸c˜ao 1-1

$phone = $ u s e r −>phone ;

Listagem 4: Exemplo do uso de uma rela¸c˜ao 1-1

Por outro lado, e de modo a poder realizar a opera¸c˜ao inversa, isto ´e, ter acesso ao utilizador a partir do seu n´umero de telefone, teria de ser definido o m´etodo inverso no modelo correspondente ao Telefone (Listagem 5). O modo como ´e utilizada ´e semelhante ao anterior (Listagem 6).

(56)

p u b l i c f u n c t i o n u s e r ( ) {

r e t u r n $ t h i s −>b e l o n g s T o (’ App \ U s e r ’) ; }

Listagem 5: Exemplo do m´etodo de uma rela¸c˜ao 1-1(Inverso)

$ u s e r = $phone−>u s e r ;

Listagem 6: Exemplo do uso de uma rela¸c˜ao 1-1(Inverso)

Esta rela¸c˜ao ´e estabelecida atrav´es da chave estrangeira, que o Laravel assume por omiss˜ao que seja o nome do modelo seguido de _id. Neste caso ir´a existir uma chave es-trangeira na tabela Phones com o nome user_id de modo a associar um telefone a um utilizador. ´E tamb´em poss´ıvel especificar o nome da chave estrangeira no segundo argumento do m´etodo hasOne caso este seja diferente.

Para uma rela¸c˜ao do tipo um para muitos (One-to-Many), ´e tido agora como exemplo a rela¸c˜ao entre um Post online e os coment´arios associados a esse Post, sendo que um Post pode ter v´arios coment´arios (One-to-Many). Na Listagem 7, ´e vis´ıvel o m´etodo comments, que seria definido no Model Post e devolve todos os comments associados ao Post que invoca o m´etodo(Listagem 8).

p u b l i c f u n c t i o n comments ( ) {

r e t u r n $ t h i s −>hasMany (’ App \ C o m m e n t ’) ; }

Listagem 7: Exemplo do m´etodo de uma rela¸c˜ao 1-Muitos

$comments = $ p o s t −>comments ;

Listagem 8: Exemplo do uso de uma rela¸c˜ao 1-Muitos

Assim como para uma rela¸c˜ao de um para um, numa rela¸c˜ao de um para muitos tamb´em ´e poss´ıvel definir a rela¸c˜ao inversa. Seguindo o exemplo referido, o inverso seria aceder ao Post com base num Comment. Para isso teria de ser definido uma fun¸c˜ao no modelo correspondente

ao Comment semelhante `a apresentada na listagem 9. O modo como este m´etodo pode ser

acedido, retornando o Post ao qual corresponde o Comment que invoca o m´etodo ´e representado na Listagem 10.

p u b l i c f u n c t i o n p o s t ( ) {

r e t u r n $ t h i s −>b e l o n g s T o (’ App \ P o s t ’) ; }

(57)

$ p o s t = $comment−>p o s t ;

Listagem 10: Exemplo do uso de uma rela¸c˜ao 1-Muitos (Inverso)

Assim como no caso das rela¸c˜oes um para um, a tabela comments vai ter uma coluna com a chave estrangeira post_id, que indica qual o Post a que pertence determinado Comment. ´E igualmente poss´ıvel especificar uma chave estrangeira com nome diferente caso seja necess´ario. Em rela¸c˜oes do tipo muitos para muitos (Many-to-Many) ´e necess´aria a cria¸c˜ao de uma tabela, normalmente chamada de tabela pivot, para guardar a informa¸c˜ao da rela¸c˜ao. Este

tipo de tabelas tˆem habitualmente o nome dos dois modelos relacionados separados por um

’_’.

Na explica¸c˜ao seguinte ser´a usado como exemplo as diferentes fun¸c˜oes que cada utilizador pode desempenhar (Roles), que representa uma rela¸c˜ao muitos para muitos (Many-to-Many). Quanto aos m´etodos que tˆem de ser definidos em cada modelo, no modelo User existiria o m´etodo roles (Listagem 11), que retornar´a todas os roles associados a um utilizador, e no modelo Role existiria o m´etodo users (Listagem 12), que retornar´a todos os utilizadores associados a determinado role. O uso do m´etodo withPivot permite adicionar aos resultados retornados as colunas cujos nomes s˜ao passados como argumento .

p u b l i c f u n c t i o n r o l e s ( ) {

r e t u r n $ t h i s −>belongsToMany (’ App \ R o l e ’)−>w i t h P i v o t (’ d a t e ’) ; }

Listagem 11: Exemplo de m´etodo de uma rela¸c˜ao Muitos-Muitos

p u b l i c f u n c t i o n u s e r s ( ) {

r e t u r n $ t h i s −>belongsToMany (’ App \ U s e r ’)−>w i t h P i v o t (’ d a t e ’) ; }

Listagem 12: Exemplo de m´etodo de uma rela¸c˜ao Muitos-Muitos

Nas Listagens 13 e 14 est˜ao dois exemplos de como se pode tirar proveito destas rela¸c˜oes no desenvolvimento do c´odigo. No primeiro exemplo (Listagem 13) ´e realizada uma query para obter todas as roles pertencentes ao utilizador definido anteriormente. ´E, depois, encadeado

o m´etodo orderBy, por forma a ordenar os resultados retornados pela ordem passada como

argumento (name). Deste modo o resultado obtido neste exemplo ser´a o conjunto das roles do

utilizador que invocou o m´etodo, ordenadas crescentemente pelo nome. No segundo exemplo

(Listagem 14) ´e utilizada a rela¸c˜ao no sentido inverso, obtendo todos os utilizadores associados a determinada role.

$ r o l e s = $ u s e r −>r o l e s ( )−>o r d e r B y (’ n a m e ’)−>g e t ( ) ;

(58)

$ u s e r s = $ r o l e −>u s e r s ;

Listagem 14: Exemplo do uso do m´etodo definido

A manuten¸c˜ao da base de dados pode ser feita atrav´es de Migrations, que permitem gerir

facilmente a estrutura da base de dados, registando as mudan¸cas realizadas e permitindo

anul´a-las. Estas est˜ao diretamente relacionadas com a classe Schema, que ´e usada para a cria¸c˜ao e manipula¸c˜ao das tabelas [22]. A Listagem 15 demonstra a cria¸c˜ao de uma Migration.

´

E composta por dois m´etodos: um para quando a migration ´e executada(up), que neste caso resulta na cria¸c˜ao da tabela fields; e outro para quando a migration ´e anulada (down) que resulta na elimina¸c˜ao da tabela fields. ´E poss´ıvel ver o uso da classe Schema na cria¸c˜ao e elimina¸c˜ao da tabela na Listagem 15.

<?php u s e I l l u m i n a t e \ D a t a b as e \ Schema \ B l u e p r i n t ; u s e I l l u m i n a t e \ D a t a b as e \ M i g r a t i o n s \ M i g r a t i o n ; c l a s s C r e a t e F i e l d s T a b l e e x t e n d s M i g r a t i o n { /* * * Run the m i g r a t i o n s . * * @ r e t u r n v o id */ p u b l i c f u n c t i o n up ( ) { Schema : : c r e a t e (’ f i e l d s ’, f u n c t i o n ( B l u e p r i n t $ t a b l e ) { $ t a b l e −>i n c r e m e n t s (’ id ’) ; $ t a b l e −>i n t e g e r (’ c l u b _ i d ’)−>u n s i g n e d ( ) ; $ t a b l e −>i n t e g e r (’ n u m b e r ’) ; $ t a b l e −>s t r i n g (’ n a m e ’) ; $ t a b l e −>d o u b l e (’ l a t i t u d e ’, 1 5 , 1 1 ) ; $ t a b l e −>d o u b l e (’ l o n g i t u d e ’, 1 5 , 1 1 ) ; $ t a b l e −>t i m e s t a m p s ( ) ; } ) ; // F o r e i g n K ey s Schema : : t a b l e (’ f i e l d s ’, f u n c t i o n ( $ t a b l e ) { $ t a b l e −>f o r e i g n (’ c l u b _ i d ’)−> r e f e r e n c e s (’ id ’)−>on (’ c l u b s ’)−>o n D e l e t e (’ c a s c a d e ’) ; } ) ; } /* * * R e v e r s e the m i g r a t i o n s . * * @ r e t u r n v oi d */ p u b l i c f u n c t i o n down ( ) { Schema : : drop (’ f i e l d s ’) ; } }

Listagem 15: Exemplo de uma Migration

(59)

permitem gerir as Migrations, e consequentemente, a base de dados. Estes comandos e uma breve descri¸c˜ao da fun¸c˜ao de cada um s˜ao apresentados na tabela 2.7.

Comando Descric¸˜ao

php artisan migrate Executa todas as migrations da aplica¸c˜ao

php artisan migrate:rollback Desfaz as altera¸c˜oes realizadas at´e `a ´ultima opera¸c˜ao php artisan migrate:reset Desfaz todas as migrations da aplica¸c˜ao

php artisan migrate:refresh Desfaz todas as migrations da aplica¸c˜ao e executa-as novamente Tabela 2.7: Tabela de comandos

Existe ainda a possibilidade de inicializar a base de dados atrav´es de Seeders [23]. A utiliza¸c˜ao de Seeders facilita bastante quando ´e necess´ario inserir uma grande quantidade de dados na base de dados, para realizar testes por exemplo. Para isso ´e preciso inserir no ficheiro DatabaseSeeder.php, que ´e gerado automaticamente na cria¸c˜ao da aplica¸c˜ao, qual a tabela e os dados que se pretende inserir. Para popular a base de dados deste modo, ´e necess´ario ap´os

a modifica¸c˜ao do ficheiro DatabaseSeeder.php, executar o comando php artisan db:seed

na linha de comandos.

Quanto `a organiza¸c˜ao da aplica¸c˜ao, todos os projetos, depois de criados, s˜ao organizados da forma apresentada na figura 2.32.

(60)

Figura 2.32: Exemplo da organiza¸c˜ao de uma aplica¸c˜ao

Nesta estrutura ´e poss´ıvel identificar os diferentes elementos da organiza¸c˜ao MVC expli-cada anteriormente. O ficheiro respons´avel pelo tratamento do Routing ´e o ficheiro

app\Http\routes.php. Este cont´em toda a informa¸c˜ao para que cada Request recebido seja

reencaminhado para o respetivo Controller. Todos os Controllers s˜ao colocados na pasta

app\Http\Controllers, s˜ao estes que v˜ao interagir com a base de dados atrav´es dos Models, que s˜ao tipicamente colocados na raiz da pasta app.

Os ficheiros associados `a base de dados est˜ao presentes na pasta database, e ´e aqui que v˜ao estar definidas as migrations e as seeds, nas pastas correspondentes.

Todos os ficheiros relativos `as Views, respons´aveis pela parte visual da aplica¸c˜ao, ser˜ao

colocados na pasta resources\views, onde ´e criada normalmente uma sub pasta por modelo,

em que cada sub pasta cont´em as views relativas a esse modelo.

2.4.5 Extras

Para al´em das tecnologias anteriormente referidas, foram utilizados diferentes packages, entre os quais Full Calendar[24], para apresentar a distribui¸c˜ao dos jogos com suporte de um calend´ario; Datatables[25] para apresentar as tabelas; DOMPDF[26] para convers˜ao de

(61)

pretendido descarrega-los; Intervention Image[27] para tratamento das imagens referentes ao logo dos clubes, fotos dos jogadores e utilizadores .

(62)
(63)

Cap´ıtulo 3

Requisitos e Arquitetura do Sistema

Neste cap´ıtulo ser˜ao descritos os requisitos do sistema, que resultaram de uma s´erie de reuni˜oes n˜ao s´o com a empresa, como, tamb´em com outras pessoas do meio, familiarizadas com todo o processo e passos necess´arios para a organiza¸c˜ao de um torneio.

Primeiro ser´a explicada a organiza¸c˜ao do sistema, como est´a estruturado e os seus dife-rentes elementos.

Numa segunda parte v˜ao ser expostos os requisitos que o sistema dever´a cumprir. Para o efeito vai ser apresentado um diagrama de casos de uso, onde v˜ao ser evidenciados os diferentes tipos de utilizadores da plataforma e as a¸c˜oes que cada um pode realizar na mesma.

Na terceira parte ir´a constar a evolu¸c˜ao da base de dados desde o esbo¸co inicial at´e ao resultado final.

Finalmente, ser´a, depois, descrita a arquitetura de sistema concebida para alcan¸car os resultados finais pretendidos.

3.1

Organiza¸

ao do sistema

A plataforma dever´a suportar um sistema de utilizadores que poder˜ao ser diretores de clubes, coordenadores de equipas ou somente organizadores de torneios. Dever´a, igualmente, ter suporte para armazenar informa¸c˜ao de clubes, equipas e jogadores, por forma a ser par-tilhada entre os diferentes torneios sem que seja necess´ario introduzir a mesma informa¸c˜ao cada vez que ´e criado um torneio.

O sistema tem de ser capaz de acompanhar todos os passos necess´arios desde a cria¸c˜ao do torneio at´e `a sua conclus˜ao:

1. Cria¸c˜ao do torneio principal;

2. Adicionar ao torneio principal uma categoria/escal˜ao de idade;

3. Convidar equipas para participarem no torneio, em uma categoria especifica;

4. Depois de estarem confirmadas as equipas necess´arias para a realiza¸c˜ao do torneio, ser´a preciso definir a sua estrutura;

5. Ser´a agora poss´ıvel realizar o sorteio dos grupos e posteriormente dos jogos;

6. `A medida que os jogos v˜ao sendo realizados, ser´a necess´ario que v˜ao sendo inseridos os seus resultados;

(64)

7. Depois de serem inseridos os resultados de todos os jogos, os pr´emios devem ser auto-maticamente calculados e associados aos vencedores;

Relativamente `a cria¸c˜ao do torneio principal, ´e necess´ario que o utilizador defina o seu nome, a sua data de inicio, o intervalo de horas a que pretende que os jogos sejam realizados e, ainda, escolher o clube que ser´a o anfitri˜ao do torneio. Depois de criado o torneio, o organi-zador pode adicionar uma categoria ao torneio principal. Para cada categoria ir´a ser definido o n´umero de equipas participantes, o escal˜ao de idade, a dura¸c˜ao de cada jogo, o intervalo entre jogos e, finalmente, a ordem pela qual pretende que os grupos sejam ordenados(Pontos, Golos Marcados, Golos Sofridos e Diferen¸ca de Golos).

Depois de adicionada a categoria, o utilizador deve conseguir convidar as equipas que pretende que participem no seu torneio. O processo de convites dever´a consistir em trˆes passos: primeiramente o organizador envia o convite para o clube, convidando determinada equipa desse clube para o seu torneio; depois, o respons´avel pelo clube convidado ap´os receber o convite, pode aceit´a-lo ou rejeit´a-lo. No caso de aceitar o convite, tem, ainda, de aguardar que o organizador do torneio confirme a sua presen¸ca. Este terceiro passo de confirma¸c˜ao por parte do organizador foi adicionado para que no caso de mais equipas do que as necess´arias terem aceite o convite, o organizador possa escolher as equipas que pretende ter no torneio.

Logo que o n´umero de equipas que confirmaram a presen¸ca alcance as equipas que o orga-nizador definiu, este pode escolher a estrutura pretendida. Quanto `as estruturas dispon´ıveis, variam consoante o n´umero de equipas participantes, estando no geral dispon´ıveis:

• Eliminat´orias

• Grupos seguidos de eliminat´orias

• Grupos seguidos de jogos para apurar posi¸c˜oes finais

Os dois primeiros tipos, foram j´a explicados anteriormente no ponto 2.1.

Como a maior parte dos torneios organizados pelos clubes se destinam a escal˜oes mais jovens, foi proposto outro tipo de estrutura em que todas as equipas realizavam o mesmo n´umero de jogos para justificar a desloca¸c˜ao, muitas vezes longa, para a localiza¸c˜ao do tor-neio. Como tal, o terceiro tipo de torneios tem por base uma fase de grupos, idˆentica `a referida anteriormente, mas agora seguida de jogos para apurar as posi¸c˜oes no torneio. Desta forma, para apurar o 1o e 2o lugar defrontar-se-˜ao as equipas que acabaram em primeiro em

cada grupo, para o 3o e 4o as equipas que terminaram em 2o lugar em cada grupo e assim

(65)

Figura 3.1: Exemplo de estrutura baseada em grupos seguido de um jogo para 16 equipas Depois de escolhida a estrutura, ´e poss´ıvel sortear as equipas pelos grupos (grupos de 2 caso seja a estrutura por eliminat´orias) e, posteriormente, gerar os jogos que ser˜ao divididos pelo intervalo de tempo definido pelo organizador e pelos campos existentes no clube anfitri˜ao do torneio. Tanto a data de realiza¸c˜ao como o campo em que ´e realizado o jogo deve poder ser alterado posteriormente consoante as preferˆencias do organizador.

Chegando `a data da realiza¸c˜ao do torneio, o organizador dever´a poder inserir os resultados `

a medida que os jogos se v˜ao realizando.

Finalmente, depois de todos os jogos serem realizados, os pr´emios s˜ao distribu´ıdos. Dever´a ser poss´ıvel para al´em dos pr´emios de equipas inserir pr´emios personalizados.

Imagem

Figura 2.3: Exemplo de estrutura baseada em grupos seguido de eliminat´ orias para 16 equipas Quanto ao quarto tipo, Round Robin consiste basicamente num grupo em que todas as equipas pertencentes a esse grupo se tˆ em de defrontar, at´ e que cada equipa t
Figura 2.11: P´ agina de escalonamento do torneio onde ´ e poss´ıvel sortear as equipas pelos jogos Enjore
Figura 2.13: P´ agina inicial Leverade
Figura 2.14: P´ agina de utilizador p´ ublica Leverade
+7

Referências

Documentos relacionados

[r]

ensino superior como um todo e para o curso específico; desenho do projeto: a identidade da educação a distância; equipe profissional multidisciplinar;comunicação/interatividade

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

Apresenta-se neste trabalho uma sinopse das espécies de Bromeliaceae da região do curso médio do rio Toropi (Rio Grande do Sul, Brasil), sendo também fornecida uma chave

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Analysis of relief and toponymy of the landscape based on the interpretation of the military topographic survey: Altimetry, Hypsometry, Hydrography, Slopes, Solar orientation,

servidores, software, equipamento de rede, etc, clientes da IaaS essencialmente alugam estes recursos como um serviço terceirizado completo...