Você está na página 1de 259

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA

SOUZA

ESCOLA TÉCNICA ESTADUAL “LAURO GOMES”

Técnico Em Desenvolvimento De Sistemas Integrado Ao Ensino


Médio

Gustavo Rabello Cardoso

Heitor Bianchi Silva

Karl Marco Sitta Marçal

Lucas Stampini Yokoyama

Roger Rocha Da Silva

Sofia Leandro De Barros Gonçalves

Vinicius Fernandes Brito

Vinicius Luccas De Faria

BENEDITO RUMO AO BAILE

São Bernardo Do Campo, São Paulo

2022
Gustavo Rabello Cardoso

Heitor Bianchi Silva

Karl Marco Sitta Marçal

Lucas Stampini Yokoyama

Roger Rocha Da Silva

Sofia Leandro De Barros Gonçalves

Vinicius Fernandes Brito

Vinicius Luccas De Faria

BENEDITO RUMO AO BAILE

Curso apresentada como requisito à obtenção


do título de Técnico em Desenvolvimento de
Sistemas do curso de Técnico em
Desenvolvimento de Sistemas Integrado ao
Ensino Médio na ETEC – Lauro Gomes São
Bernardo do Campo.

Orientador: Rosa Mitiko Shimizu

São Bernardo Do Campo, São Paulo

2022
Dedicamos esse trabalho a todos os
envolvidos no projeto, em especial aos
pais e familiares dos integrantes do grupo,
também dedicamos aos nossos
professores.
AGRADECIMENTOS
Agradecemos a todos os envolvidos no projeto, passamos por muitas
dificuldades, mas conseguimos superá-las graças ao apoio dos professores, em
especial Rosa Mitiko Shimizu.

Agradecemos também a todas as pessoas que, na história, buscaram


conhecimento, só chegamos até aqui graças a eles e suas ideia fundamentais para
os avanços tecnológicos.

E por fim, agradecemos aos amigos e familiares que acompanharam esse


projeto conosco, nos encorajaram, nos ajudaram, sempre dando suporte e ao nosso
querido professor Zamboni, vai ser lembrado para sempre.

O verdadeiro trabalho de conclusão de curso, são os amigos que fazemos


pelo caminho, obrigado a todos os colegas que viraram amigos durante este
percurso.
“O povo deve ser educado com o mesmo
cuidado e ternura com que um jardineiro
cultiva uma árvore frutífera de estimação."
(Stalin)
RESUMO

Em nossa sociedade atual existem poucos jogos que abordam o preconceito e a


desigualdade social, tendo em vista que expressões artísticas são muito importantes
para nossa época, tendo força e influência para mudar opiniões e/ou trazer
representatividade, representações que abordam temas reais e necessários, são
requeridos principalmente as pessoas mais pobres e com uma realidade diferente
das de muitos, pois muitas vezes é negado ao pobre o lazer e representatividade.
Como jogos também são formas de manifestações artísticas, com o nosso queremos
trazer uma visão a uma outra realidade, além de divertir o público enquanto os
informamos e trazemos uma representatividade importante e que falta no cenário
dos jogos. Em nosso projeto colocamos a realidade de um jovem (Benedito) que
vive em uma comunidade, passando por diversas dificuldades, sua mãe o
abandona, e ele tem que começar a trabalhar para poder se sustentar, ele tem a
ajuda de uma senhora chamada “Dona Cleusa”, ela possui um estabelecimento
denominado “Bar da Dona Cleusa”, além de ser uma figura materna para Bené, ela
oferece um emprego para o garoto. A história segue com Bené entregando
marmitas, até que começa a andar com presenças de índole duvidosa e é alvo de
uma proposta que o coloca sobre um dilema moral e o faz tomar decisões erradas,
mas uma amiga de infância chamada “Renatinha” o ajuda e dá apoio para sair dessa
situação, e mesmo não tendo bases ideológicas e familiares ele faz o correto e
termina sendo “acolhido” pela “Dona Cleusa”.

Palavras-chave: Social. Comunidade. Realidade. Representatividade. Preconceito.


Dona Cleusa. Garoto.
ABSTRACT

In our current society there are few games that address prejudice and social
inequality, considering that artistic expressions are very important for our era, having
strength and influence to change opinions and/or bring representativeness,
representations that address real and necessary themes, mainly the poorest people
and with a reality different from that of many are required, as leisure and
representation are often denied to the poor. As games are also forms of artistic
manifestations, with our game want to bring a vision to another reality, in addition to
amusing the public while informing them and bringing an important
representativeness that is lacking in the games scenario. In our project we present
the reality of a young man (Benedito) who lives in a community, going through
various difficulties, his mother abandons him, and he has to start working to support
himself, he has the help of a lady called “Dona Cleusa”, she owns an establishment
called “Bar da Dona Cleusa”, as well as being a mother figure to Benedito, she offers
him a job. The story continues with Bené delivering lunchboxes, until he begins to
hang around with presences of a dubious nature and is the target of a proposal that
puts him in a moral dilemma and makes him take the wrong decisions, but a
childhood friend called “Renatinha” helps him and he gives support to get out of this
situation, and even though he doesn't have ideological or family bases, he does the
right thing and ends up being “welcomed” by “Dona Cleusa”.

Keywords: Benedito. Bar da dona Cleusa. Renatinha. Society. Representation.


LISTA DE ILUSTRAÇÕES

Figura 1 - Google Forms ........................................................................................... 23


Figura 2 - Ícone Visual Studio Code .......................................................................... 31
Figura 3 - Ícone Unity ................................................................................................ 32
Figura 4 - ícone Heroku ............................................................................................. 33
Figura 5 - Ícone Git.................................................................................................... 34
Figura 6 - Ícone Aseprite ........................................................................................... 35
Figura 7 - Ícone Draw.io ............................................................................................ 36
Figura 8 - ícone Astah community ............................................................................. 38
Figura 9 - Ícone Word ................................................................................................ 39
Figura 10 - ícone Canvas .......................................................................................... 40
Figura 11 - Ícone Draw.io .......................................................................................... 41
Figura 12 - Ícone Visual Studio ................................................................................. 42
Figura 13 - Ícone do C# ............................................................................................. 43
Figura 14 - Ícone do JavaScript................................................................................. 44
Figura 15 - Ícone do HTML 5..................................................................................... 45
Figura 16 - Ícone do CSS 3 ....................................................................................... 46
Figura 17 - Mapa do Site Front-end .......................................................................... 48
Figura 18 - Mapa do menu do jogo ........................................................................... 49
Figura 19 - Estrutura do Site ..................................................................................... 50
Figura 20 - Fluxograma front-end .............................................................................. 90
Figura 21 - Diagrama de caso de uso ....................................................................... 91
Figura 22 - Diagrama de caso de uso do jogo .......................................................... 91
Figura 23 - Diagrama de Classe................................................................................ 92
Figura 24 - Modelo de Negócios ............................................................................. 218
Figura 25 - Análise Swott ........................................................................................ 219
Figura 26 - Análise Swott 2 ..................................................................................... 220
Figura 27 - Análise Swott 3 ..................................................................................... 221
Figura 28 - Análise Swott 4 ..................................................................................... 222
Figura 29 - Análise Swott 5 ..................................................................................... 223
Figura 30 - Página Home e Download .................................................................... 224
Figura 31 - Página Sobre os Desenvolvedores ....................................................... 225
Figura 32 - Página Sobre os Personagens ............................................................. 226
Figura 33 - Página Sobre o Jogo............................................................................. 227
Figura 34 - Página de Contato ................................................................................ 228
Figura 35 - Download .............................................................................................. 229
Figura 36 - Arquivo Baixado .................................................................................... 229
Figura 37 - Passo a passo de como extrair ............................................................. 230
Figura 38 - Pasta extraída ....................................................................................... 230
Figura 39 - Menu do Jogo ....................................................................................... 231
Figura 40 - Menu do Botão Jogar ............................................................................ 232
Figura 41 - Seleção de Fases ................................................................................. 232
Figura 42 - Opções.................................................................................................. 233
Figura 43 - Tutorial .................................................................................................. 234
Figura 44 - Carta ..................................................................................................... 234
Figura 45 - Tela de Pause ....................................................................................... 235
Figura 46 - Cenário de Dia ...................................................................................... 236
Figura 47 - Personagem pulando ............................................................................ 237
Figura 48 - Interação ............................................................................................... 238
Figura 49 - Missão................................................................................................... 238
Figura 50 - Inimigos................................................................................................. 239
Figura 51 - Marmita ................................................................................................. 240
Figura 52 - Diálogo .................................................................................................. 240
Figura 53 - Plataformas ........................................................................................... 243
Figura 54 - Cenário Noturno .................................................................................... 245
Figura 55 - Ação de Derrota .................................................................................... 246
Figura 56 - Ação de Tomar Dano ............................................................................ 247
Figura 57 - Créditos................................................................................................. 247
LISTA DE GRÁFICOS

Gráfico 1 - Primeira pergunta .................................................................................... 24


Gráfico 2 - Segunda pergunta ................................................................................... 24
Gráfico 3 - Terceira pergunta .................................................................................... 25
Gráfico 4 - Quarta pergunta....................................................................................... 25
Gráfico 5 - Quinta pergunta ....................................................................................... 26
Gráfico 6 - Sexta pergunta ........................................................................................ 26
Gráfico 7 - Sétima pergunta ...................................................................................... 27
Gráfico 8 - Oitava pergunta ....................................................................................... 27
Gráfico 9 - Nona pergunta ......................................................................................... 28
Gráfico 10 - Décima pergunta ................................................................................... 28
Gráfico 11 - Décima primeira pergunta ..................................................................... 29
Gráfico 12 - Décima segunda pergunta ..................................................................... 29
Gráfico 13 - Décima terceira pergunta ...................................................................... 30
Gráfico 14 - Ciclo de vida do software ....................................................................... 47
Gráfico 15 - Gráfico de Gantt .................................................................................... 93
Gráfico 16 - Gráfico de Pert....................................................................................... 93
LISTA DE TABELAS

Tabela 1 - Requisitos funcionais RFU. 001 ............................................................... 51


Tabela 2 - Requisitos funcionais RFU. 002 ............................................................... 51
Tabela 3 - Requisitos funcionais RFU. 003 ............................................................... 52
Tabela 4 - Requisitos funcionais RFU. 004 ............................................................... 53
Tabela 5 - Requisitos funcionais RFU. 005 ............................................................... 54
Tabela 6 - Requisitos funcionais RFU. 006 ............................................................... 55
Tabela 7 - Requisitos funcionais RFU. 007 ............................................................... 57
Tabela 8 - Requisitos funcionais RFU. 008 ............................................................... 58
Tabela 9 - Requisitos funcionais RFU. 009 ............................................................... 59
Tabela 10 - Requisitos funcionais RFU. 010 ............................................................. 60
Tabela 11 - Requisitos funcionais RFU. 011 ............................................................. 61
Tabela 12 - Requisitos funcionais RFU. 012 ............................................................. 62
Tabela 13 - Requisitos funcionais RFU. 013 ............................................................. 63
Tabela 14 - Requisitos funcionais RFU. 014 ............................................................. 65
Tabela 15 - Requisitos funcionais RFU. 015 ............................................................. 66
Tabela 16 - Requisitos funcionais RFU. 016 ............................................................. 67
Tabela 17 - Requisitos funcionais RFU. 017 ............................................................. 68
Tabela 18 - Requisitos funcionais RFU. 018 ............................................................. 69
Tabela 19 - Requisitos funcionais RFU. 019 ............................................................. 70
Tabela 20 - Requisitos funcionais RFU. 020 ............................................................. 71
Tabela 21 - Requisitos funcionais RFU. 021 ............................................................. 72
Tabela 22 - Requisitos funcionais RFU. 022 ............................................................. 73
Tabela 23 - Requisitos funcionais RFU. 023 ............................................................. 74
Tabela 24 - Requisitos funcionais RFU. 024 ............................................................. 75
Tabela 25 - Requisitos funcionais RFU. 025 ............................................................. 76
Tabela 26 - Teste dos requisitos funcionais RFU.001 ............................................... 77
Tabela 27 - Teste dos requisitos funcionais RFU.002 ............................................... 77
Tabela 28 - Detalhamento dos testes funcionais do site ........................................... 78
Tabela 29 - Teste dos requisitos funcionais RFU.003 ............................................... 78
Tabela 30 - Teste dos requisitos funcionais RFU.004 ............................................... 79
Tabela 31 - Teste dos requisitos funcionais RFU.005 ............................................... 79
Tabela 32 - Teste dos requisitos funcionais RFU.006 ............................................... 79
Tabela 33 - Teste dos requisitos funcionais RFU.007 ............................................... 80
Tabela 34 - Teste dos requisitos funcionais RFU.008 ............................................... 80
Tabela 35 - Teste dos requisitos funcionais RFU.009 ............................................... 81
Tabela 36 - Teste dos requisitos funcionais RFU.010 ............................................... 81
Tabela 37 - Teste dos requisitos funcionais RFU.011 ............................................... 81
Tabela 38 - Teste dos requisitos funcionais RFU.012 ............................................... 82
Tabela 39 - Teste dos requisitos funcionais RFU.013 ............................................... 83
Tabela 40 - Teste dos requisitos funcionais RFU.014 ............................................... 83
Tabela 41 - Teste dos requisitos funcionais RFU.015 ............................................... 84
Tabela 42 - Teste dos requisitos funcionais RFU.016 ............................................... 84
Tabela 43 - Teste dos requisitos funcionais RFU.018 ............................................... 85
Tabela 44 - Teste dos requisitos funcionais RFU.017 ............................................... 85
Tabela 45 - Teste dos requisitos funcionais RFU.019 ............................................... 86
Tabela 46 - Teste dos requisitos funcionais RFU.020 ............................................... 86
Tabela 47 - Teste dos requisitos funcionais RFU.021 ............................................... 86
Tabela 48 - Teste dos requisitos funcionais RFU.022 ............................................... 87
Tabela 49 - Teste dos requisitos funcionais RFU.023 ............................................... 87
Tabela 50 - Teste dos requisitos funcionais RFU.024 ............................................... 88
Tabela 51 - Teste dos requisitos funcionais RFU.025 ............................................... 88
Tabela 52 - Detalhamento dos requisitos funcionais do jogo .................................... 89
Tabela 53 - Requisitos não funcionais do site ........................................................... 89
Tabela 54 - Requisitos não funcionais do jogo .......................................................... 89
Tabela 55 - Dicionário de dados................................................................................ 92
Tabela 56 - Cronograma de atividades ..................................................................... 92
Tabela 57 - Custos de Ferramentas ........................................................................ 250
Tabela 58 - Custos dos Profissionais ...................................................................... 251
Tabela 59 - Custo Total do Projeto.......................................................................... 251
LISTA DE ABREVIATURAS

Associação Brasileira das Instituições de Pesquisa Tecnológica (ABIPTI)

Balanced Scorecard (BSC)

Capital Humano (CH)

Distributed version control (DVCS)

Escape (ESC)

Fluxo Alternativo (FA)

Fluxo de Erro (FE)

Hypertext Markup Language (HTML)

JavaScript (JS)

Requisitos funcionais (RFU)

Subversion (SVN)

Unified Modeling Language (UML)

Visual Studio (VS)


LISTA DE SIGLAS

Cascading Style Sheets (CSS)

Concurrent Versions System (CVS)

Joint Photographic Experts Group (JPG)

Personal Home Page (PHP)

Portable Document Format (PDF)

Portable Network Graphic (PNG)

Role-playing game (RPG)


LISTA DE ACRÔNIMOS

Computer Aided Engineering (CAE)

Instituto de Pesquisa Econômica Aplicada (IPEA)

Integrated Development Environment (IDEs)

Java and UML Developers Environment (JUDE)

National Aeronautics and Space Administration (NASA)

Organização do Tratado do Atlântico Norte (OTAN)


SUMÁRIO

1. INTRODUÇÃO ............................................................................................. 19

1.1 Motivação ....................................................................................................... 21

1.2 Desafio ............................................................................................................ 21

1.3 Objetivo .......................................................................................................... 21

1.3.1 Objetivos Gerais ...................................................................................... 21

1.3.2 Objetivos Específicos ............................................................................. 21

2. REFERENCIAL TEÓRICO........................................................................... 22

2.1 Estudo De Viabilidade ................................................................................... 22

2.2 Metodologias De Pesquisa ........................................................................... 23

2.3 Tecnologias Utilizadas .................................................................................. 31

2.3.1 Ferramentas de Desenvolvimento ......................................................... 31

2.3.2 Ferramentas de Design........................................................................... 35

2.3.3 Ferramentas de Diagramação ................................................................ 36

2.3.4 Ferramentas de Documentação ............................................................. 39

2.3.5 Ferramentas de Modelagem ................................................................... 41

2.3.6 Ferramentas de Programação ................................................................ 42

3. ANÁLISE DO SISTEMA .............................................................................. 47

3.1 Ciclo De Vida Do Software ............................................................................ 47

3.2 Mapa Do Site .................................................................................................. 48

3.2.1 Mapa do Site Front-End .......................................................................... 48

3.2.2 Mapa do Menu do Jogo .......................................................................... 49

3.3 Estrutura Do Site ........................................................................................... 50

3.4 Requisitos Funcionais................................................................................... 51

3.4.1 Requisitos Funcionais do Site ............................................................... 51

3.4.2 Requisitos Funcionais do Jogo ............................................................. 52

3.4.3 Teste dos Requisitos Funcionais do Site ............................................. 77


3.4.4 Teste dos Requisitos Funcionais do Jogo ........................................... 78

3.5 Requisitos Não Funcionais do site .............................................................. 89

3.5.1 Requisitos Não Funcionais do Jogo ......................................................... 89

3.6 Fluxograma .................................................................................................... 90

3.6.1 Fluxograma Front-End ............................................................................ 90

3.7 Diagrama De Caso De Uso ............................................................................ 91

3.7.1 Diagrama de Caso de Uso do Site ......................................................... 91

3.7.2 Diagrama de Caso de Uso do Jogo ....................................................... 91

3.8 Dicionário De Dados ...................................................................................... 92

3.9 Diagrama de Classe ....................................................................................... 92

3.10 Cronograma De Atividades ......................................................................... 92

3.11.1 Gráfico de Gantt .................................................................................... 93

3.11.2 Gráfico de Pert ...................................................................................... 93

4. DESENVOLVIMENTO ................................................................................. 94

4.1 Desenvolvimento Do Site .............................................................................. 94

4.1.1 Desenvolvimento JS ................................................................................... 94

4.1.2 Desenvolvimento do HTML .................................................................... 96

4.1.3 Desenvolvimento do CSS ..................................................................... 100

4.1.4 Desenvolvimento do PHP ..................................................................... 105

4.2 Desenvolvimento Do Jogo .......................................................................... 105

4.2.1 Desenvolvimento do Movimento do Jogador ..................................... 105

4.2.2 Desenvolvimento da Mecânica de Vida............................................... 117

4.2.3 Desenvolvimento Da Mecânica De Interação Do Jogador ................. 126

4.2.4 Desenvolvimento de Interações do Jogo ............................................ 139

4.2.5 Mecânica De Transição De Ambientes ................................................ 146

4.2.6 Mecânica De Inimigos E Desafios ....................................................... 150

4.2.7 Desenvolvimento Dos Objetivos Do Jogo .......................................... 166


4.2.8 Objetos Ou Pessoas Que Podem Sofrer Interação ............................ 171

4.2.9 Interações da Marmita .......................................................................... 176

4.2.10 Desenvolvimento da Câmera ............................................................. 188

4.2.11 Configurações e Menus ...................................................................... 197

4.2.12 Opções de Jogo e Funcionalidades .................................................. 210

5. PLANO DE NEGÓCIOS............................................................................. 218

5.1 Modelo De Negócios.................................................................................... 218

5.2 Swot .............................................................................................................. 219

6. MANUAL DO USUÁRIO ............................................................................ 224

6.1 Manual Do Usuário Site ............................................................................... 224

6.1.1 Página Home e Download .................................................................... 224

6.1.2 Desenvolvedores .................................................................................. 225

6.1.3 Personagens .......................................................................................... 226

6.1.4 Sobre o jogo .......................................................................................... 227

6.1.5 Contato................................................................................................... 228

6.1.6 Como Baixar Instalar ............................................................................ 229

6.2 Manual Do Usuário Aplicativo .................................................................... 231

6.1.1 Menu do Jogo ........................................................................................... 231

6.1.2 Opções....................................................................................................... 233

6.1.3 Jogo ........................................................................................................... 234

7. HORAS TRABALHADAS .......................................................................... 250

7.1 Custos das Ferramentas ............................................................................. 250

7.2 Custo dos Profissionais .............................................................................. 251

7.3 Custo Total do Projeto ................................................................................ 251

8. CONCLUSÃO ............................................................................................ 252

9. REFERÊNCIAS BIBLIOGRÁFICAS .......................................................... 253

10. ANEXOS .................................................................................................. 255


19

1. INTRODUÇÃO

Para entendermos a problemática e a crítica a nossa sociedade que o jogo


traz, precisamos antes entender o que é alteridade e praticá-la. Alteridade é o
exercício de colocar-se no lugar do outro para entender o que se passa em sua vida,
e a partir dela é possível tomar rumos baseado na empatia buscando ajudar o
próximo.
Nosso jogo procura promover a ideia de alteridade expondo situações que o
nosso protagonista passa como o racismo, que é um dos preconceitos sociais que
ele enfrenta e que afeta a vida dele como um jovem negro, pobre e que reside em
uma periferia.
Segundo Jacqueline de Jesus, psicóloga social e professora na
Universidade de Brasília, o racismo “é um conjunto de estereótipos, preconceitos e
discriminações que se baseia na crença da superioridade/inferioridade de um grupo
racial ou étnico em relação a outro, em uma conjuntura de dominância social”.
Porém, o racismo não são só as ofensas, a segregação e a escravidão, o racismo
está inserido nos moldes da nossa sociedade, formulando assim um problema
estrutural que acarreta problemas sérios com uma duração longa para o povo negro,
a parte mais sofrida é que muitos desses problemas são velados e “varridos para
baixo do tapete”.
O racismo insaturado em nossa sociedade faz com que os negros sejam
maioria nas favelas, representando 67% da população que chefia os lares dessas
comunidades, segundo pesquisas do Ipea. Isso ocorre pela má gestão imperial na
abolição da escravidão, com a Lei Aurea entrando em vigor, os negros não tinham
para onde ir, se situando em cortiços, lugar esse que se alojavam negros,
nordestinos, prostitutas, capoeiras, mulatos, mas com o passar dos anos o governo
do Rio de Janeiro mandou demolir os cortiços com pretexto de reurbanização,
saneamento básico e civilizar o centro da cidade, essa ação estatal ficou conhecida
como Reforma Pereira Passos, assim, mais de 2000 casas foram demolidas com
essa justificativa. Dessa forma, acabando com suas moradias, essa população se
viu obrigada a subir os morros e habitar as favelas.
20

Todos esses acontecimentos terríveis acarretaram uma série de problemas


recorrentes, como a violência policial e o extermínio de pessoas negras, segundo
um levantamento feito pela Rede de Observatórios da Segurança, uma pessoa
negra é morta pela polícia a cada quatro horas. Esse dado alarmante evidencia que
a perseguição policial é real e causada pelo racismo estrutural.
Além de todo problema racial, há também um grande problema social, com a
população mais vulnerável, eles são cada vez mais tratados como indigentes e
sucateados, seus direitos como de lazer, ir e vir, viver e muitos outros são negados,
o estado não dá assistência nenhuma, com isso os jovens pobres perdem a vida no
crime, com a necessidade de sobreviver e colocar comida na mesa eles acabam
recorrendo ao crime por ser mais fácil e muita das vezes é o exemplo que eles têm.
Com esse cenário podemos trazer uma coisa que fortifique o povo oprimido.
Nosso jogo valoriza as manifestações culturais periféricas, afinal, a arte, por meio
das músicas, danças, grafites e escritas, serve de meio de expressão e protesto do
oprimido contra esse sistema burguês, é por meio do rap, funk, hip-hop e muitos
outros movimentos artísticos. Além disso, já que o Estado nega lazer ao povo de
periferia, este grupo faz sua própria forma de lazer e é aí que nascem os bailes funk,
e é também onde nosso jogo traz a abordagem.
Nessa última década o funk, o rap, o trap, se popularizaram em larga escala,
como pode ser observado no crescimento exponencial dos números de ouvintes em
plataformas como o “Youtube”, mas mesmo sendo um fenômeno, por vir da periferia,
muitos associam ao crime, ou até insultam dizendo que não tem “conteúdo”. E a
maior parte dessas ofensas provêm de um preconceito enraizado de que tudo que
vem da periferia do “povão” é ruim, e só da elite provem música boa.

Com isso tudo explicado, temos a premissa do jogo, Bené é um jovem negro
e pobre, morador de periferia. No alto de seus 16 anos ele é abandonado pela mãe
que é usuária de drogas e tendo em vista que seu pai é ausente, ele fica sozinho, no
meio de toda sua tristeza, confusão e medo. Nosso protagonista busca refúgio no
bar da Dona Cleusa, onde ele se torna responsável por entregar as marmitas do
restaurante e vai encarar diversos problemas e tentações que encontrará em sua
jornada.
21

1.1 Motivação

Tivemos a ideia de retratar a realidade de muitos brasileiros por meio de um


jogo, onde o protagonista se aventura entregando marmitas pela periferia e
enfrentando a realidade delas. Com isso, utilizaremos os elementos do jogo, como a
parte áudio visual para representar os estilos do funk brasileiro.

1.2 Desafio

Com os problemas sociais encarados diariamente pela população brasileira,


é de se esperar que tenham jogos envolvendo esse tema, porém, não existem hoje
no mercado de entretenimento nenhum jogo que represente esse contexto, dessa
forma decidimos apresentar algo que satisfaça essa lacuna que é a falta de
representatividade de quem vive isso.
O principal desafio é encontrar uma maneira de representar essa realidade
de maneira respeitosa e que não agrida as pessoas envolvidas com isso, mostrando
de maneira realista, educativa e divertida como é viver esses desafios.

1.3 Objetivo

1.3.1 Objetivos Gerais


Conscientizar o usuário por meio de jogo e diverti-lo de forma que o
entretenimento se torne conhecimento, assim, apresenta-o a uma realidade de
forma que ele possa entender como a vida nas periferias é.

1.3.2 Objetivos Específicos


• Apresentar uma realidade ao jogador;
• A presentar a realidade das pessoas que vivem na periferia;
• Ensinar de forma divertida e intuitiva sobre a realidade de pessoas
mais vulneráveis.
22

2. REFERENCIAL TEÓRICO

2.1 Estudo De Viabilidade

Este estudo de viabilidade tem como principal função analisar a viabilidade do


nosso projeto “Benedito Rumo ao Baile”. Projeto este desenvolvido por oito
membros que dedicaram seu tempo para sua realização, que tiveram papéis
importantes na criação que vão desde o desenvolvimento do site e do jogo, design
de personagens e cenários, até a documentação de tudo que idealizamos, usamos e
desenvolvemos entorno do nosso projeto.

Com isso em mente, a equipe de desenvolvimento e documentação


realizaram uma pesquisa que analisou as plataformas de jogos presentes no Brasil e
as possiblidades de realização do nosso jogo, percebeu-se que há uma carência a
respeito de um jogo que represente a vivência que muitos adolescentes têm nas
periferias brasileiras e sua única válvula de escape do estresse dessa realidade está
presente nos bailes funks que eles frequentam em seu tempo livre.

Para a realização desse projeto tivemos quatro equipes a do desenvolvimento


do site, do jogo, do design e da documentação. O desenvolvimento do site foi
realizado por apenas uma pessoa, documentação por uma dupla, o desenvolvimento
do jogo foi realizado por duas pessoas, o design dos personagens e dos cenários do
jogo foram realizados por uma dupla e a documentação também por uma dupla.
Assim cada grupo do trabalho cooperando juntamente para a realização deste
trabalho de conclusão de curso.

Ao final do projeto, cada um dos membros do grupo possuiu como salário final
R$ 6.375,00 e o custo total dos profissionais do projeto foi de R$ 51.000,00. Assim,
a quantidade total de horas trabalhadas tendo sido de 6.800h, considerando um
expediente de seis horas diárias e o valor de R$ 7,50 por cada uma delas. O
detalhamento dos custos deste trabalho pode ser observado na Tabela 48.

Além disso, no desenvolvimento do nosso projeto, utilizamos algumas


ferramentas que são pagas e gratuitas, que somadas deram um custo total em reais
23

de R$ 1.175,62. Com o projeto terminado, obtivemos um jogo intuitivo e educativo a


respeito da realidade de muitos jovens, um jogo gratuito e fácil de ser jogado.

2.2 Metodologias De Pesquisa

Figura 1 - Google Forms

Fonte: Site Tecmundo


Através da plataforma de formulários do Google, realizamos a pesquisa de
campo no período de 06/04/2022 até 13/04/2022. Pesquisa essa divulgada
principalmente pelo Whatsapp, contendo 13 perguntas, ao fim do prazo estipulados
obtemos um total e 84 respostas que nos auxiliaram no desenvolvimento do nosso
projeto, as perguntas e suas devidas respostas foram:
24

1. Qual sua idade?

Gráfico 1 - Primeira pergunta

Fonte: Do próprio autor, 2022


2. Qual seu gênero?

Gráfico 2 - Segunda pergunta

Fonte: Do próprio autor, 2022


25

3. Qual o seu curso?

Gráfico 3 - Terceira pergunta

Fonte: Do próprio autor, 2022

4. Qual o seu ano?

Gráfico 4 - Quarta pergunta

Fonte: Do próprio autor, 2022


26

5. Joga por qual plataforma?

Gráfico 5 - Quinta pergunta

Fonte: Do próprio autor, 2022

6. Qual é o seu estilo de jogo favorito?

Gráfico 6 - Sexta pergunta

Fonte: Do próprio autor, 2022


27

7. Para você o jogo ideal precisa majoritariamente de qual desses atributos?

Gráfico 7 - Sétima pergunta

Fonte: Do próprio autor, 2022

8. Se interessaria por um jogo que se passa no cenário periférico brasileiro?

Gráfico 8 - Oitava pergunta

Fonte: Do próprio autor, 2022


28

9. Se interessa mais por jogos 2d ou 3d?

Gráfico 9 - Nona pergunta

Fonte: Do próprio autor, 2022

10. Dentre esses jogos, qual o seu favorito?

Gráfico 10 - Décima pergunta

Fonte: Do próprio autor, 2022


29

11. Se interessaria por um jogo de aventura 2d?

Gráfico 11 - Décima primeira pergunta

Fonte: Do próprio autor, 2022


12. Qual o tempo de campanha ideal para um jogo?

Gráfico 12 - Décima segunda pergunta

Fonte: Do próprio autor, 2022


30

13. Jogaria esse jogo: "Um garoto brasileiro, foge da sua realidade por meio do
funk e festas, vai atrás de bailes pelos estados do Brasil e então tem que
passar por diversas dificuldades e desafios até ficar bem consigo mesmo”?

Gráfico 13 - Décima terceira pergunta

Fonte: Do próprio autor, 2022


31

2.3 Tecnologias Utilizadas

2.3.1 Ferramentas de Desenvolvimento

Figura 2 - Ícone Visual Studio Code

Fonte: Site Visual Studio Code


Visual Studio Code é uma ferramenta de edição e códigos que contêm o seu
código fonte aberto desenvolvido pela Microsoft, permite a criação de softwares
Desktop com HTML, CSS e JavaScript. Essa ferramenta é compatível com
Windows, Mac e Linux. É um software customizável com uma utilização fácil de ser
entendida, com uma construção bem planejada e com atalhos de teclado uteis e
versáteis.

Estamos utilizando o Visual Studio Code para programar o site, utilizando de


suas ferramentas profissionais para facilitar a programação, e por ser mais leve que
o seu irmão Visual Studio, ajuda bastante, por ser mais otimizado podemos sempre
fazer mudanças rápidas e aplicá-las, assim testando de maneira rápida a
funcionalidade do site e mantendo ele totalmente funcional mais facilmente.
32

Figura 3 - Ícone Unity

Fonte: Site PSX Brasil


O Unity é uma ferramenta que permite a criação de jogos multiplataforma, ou
seja, permite ao programador criar jogos para todas as plataformas que aceitam
jogos, utilizando de um editor visual e programação através do scripting, oferecendo
aos criadores ferramentas de ponta e profissionais permitindo a eles criarem um
jogo que tenha todos os seus requisitos preenchidos.

Algumas funcionalidades do Unity:

• Motor gráfico para renderização de gráficos 2D e 3D;


• Motor de física que simula as interações entre objetos;
• Sistema de iluminação;
• Animações;
• Sons;
• Programação de inteligência artificial;
• Programação por scripting;
• Simulação de partículas.

A Unity é uma plataforma gratuita, ela oferece suporte para projetos pequenos e
independentes, além de ser compatível com o Visual Studio e o C#, e existem
muitos materiais de estudos na internet que auxiliam na construção do projeto, nós
estamos utilizando-o como motor gráfico para a produção do jogo.
33

Figura 4 - ícone Heroku

Fonte: Site Devmedia


Heroku é uma plataforma amplamente confiável como uma oferta de serviço que
permite aos desenvolvedores realizar implantação, escalonamento e gerenciamento
de aplicativos sem complicações. Esta plataforma oferece suporte para uma ampla
gama de linguagens de programação, como Java, Ruby, PHP, Node.js, Python,
Scala e Clojure. O Heroku executa aplicativos por meio de contêineres virtuais
conhecidos como Dynos.

O Heroku cobra de seus usuários com base no número de máquinas virtuais que
são necessárias para seus aplicativos. A plataforma Heroku e os aplicativos criados
pelo usuário usam Amazon Web Services como infraestrutura subjacente. Os
desenvolvedores podem obter um rápido desenvolvimento de aplicativos usando-o,
pois é bastante conveniente.
34

Figura 5 - Ícone Git

Fonte: Site Atlassian


O Git é um projeto de código aberto maduro e com manutenção ativa
desenvolvido em 2005 por Linus Torvalds, o famoso criador do kernel do sistema
operacional Linux. Um número impressionante de projetos de software depende do
Git para controle de versão, incluindo projetos comerciais e de código-fonte aberto.
Os desenvolvedores que trabalharam com o Git estão bem representados no pool
de talentos de desenvolvimento de software disponíveis e funcionam bem em uma
ampla variedade de sistemas operacionais e IDEs (Ambientes de Desenvolvimento
Integrado).

Tendo uma arquitetura distribuída, o Git é um exemplo de DVCS (portanto,


Sistema de Controle de Versão Distribuído). Em vez de ter apenas um único local
para o histórico completo da versão do software, como é comum em sistemas de
controle de versão outrora populares como CVS ou Subversion (também conhecido
como SVN), no Git, a cópia de trabalho de todo desenvolvedor do código também é
um repositório que pode conter o histórico completo de todas as alterações.

Além de ser distribuído, o Git foi projetado com desempenho, segurança e


flexibilidade em mente.
35

2.3.2 Ferramentas de Design

Figura 6 - Ícone Aseprite

Fonte: Site Aseprite


Lançado em 2014, o Aseprite é um software focado para desenvolvedores de
jogos e animadores, que permite a eles criarem sprites e pixel arts para seus
projetos. Apresenta uma interface fácil de ser utilizada, contém uma área de criação
de pixel art repleta de pinceis, uma paleta de cores personalizáveis e modos de
mesclagem. Contém também um conjunto de ferramentas de animação, incluindo
uma linha do tempo, marcação de quadro-chave e um modo de onion skin.
Infelizmente não é um programa que pode ser utilizado de maneira gratuita,
custando atualmente 38 reais na STEAM, uma plataforma de venda de jogos e
softwares.

Estamos usando o Aseprite para fazer aquilo que ele foi criado para fazer,
sprites e pixel art, esse programa vem auxiliando de maneira indispensável nosso
projeto, sendo necessário para o progresso do trabalho de conclusão de curso. É
usado na criação dos personagens, modelagens de objetos, do chão, do céu, do
fundo dos níveis, dos inimigos. basicamente é utilizado na criação de tudo que está
presente no nosso jogo. Por último não menos importante, é usado para a criação
de animações como correr, pular e interagir com pessoas e objetos e dos inimigos
que o Benedito enfrenta ao longo do jogo.
36

2.3.3 Ferramentas de Diagramação

Figura 7 - Ícone Draw.io

Fonte: Site Wikimedia Commons


O Draw.io é um editor gráfico online que permite o desenvolvimento de
desenhos, gráficos e fluxogramas sem a necessidade de usar um software não
gratuito e pesado, disponibilizando recursos para a criação de qualquer tipo de
desenho, possuindo uma parte dedicada à arquitetura da informação.

Ele te oferta a possibilidade se conectar ao Google Drive, assim tendo acesso


a seus fluxogramas, gráficos e desenhos de uma maneira rápida e segura, onde
ficam disponíveis para alterações, porém, ele também permite que você os salve em
PDF, PNG e JPG, mas se a opção de alterações, por isso a vantagem em conectá-lo
ao Google Drive.

O Draw.io está sendo utilizado para a confecção dos fluxogramas que são
necessários para uma análise do nosso software, explicando de maneira simples o
funcionamento dele, tanto do front-end quanto do back-end, por ter uma interface
simples e leve, ele tem uma aba de recursos voltados à arquitetura da informação,
mais um ponto positivo que nos ajuda na criação dos requisitados fluxogramas e
diagramas de caso de uso.
37
38

Figura 8 - ícone Astah community

Fonte: Site Techtudo


Astah Community é um software para modelagem UML (Unified Modeling
Language Linguagem de Modelagem Unificada) com suporte a UML 2, desenvolvido
pela Change Vision, Inc e disponível para sistemas operacionais Windows 64 bits.
Anteriormente conhecido por JUDE, um acrônimo de Java and UML Developers
Environment (Ambiente para Desenvolvedores UML e Java).

Astah Community disponibiliza para desenvolvimento, os diagramas de


Classes, Casos de Uso, Sequência, Comunicação, Máquina de Estados, Atividade,
Componentes, Implantação e Diagrama de Estrutura Composta.
39

2.3.4 Ferramentas de Documentação

Figura 9 - Ícone Word

Fonte: Site LogoMarcas


O editor de texto, mais conhecido como Word, é um dos programas do pacote
Office que permite produzir qualquer material de texto, como cartas, trabalhos
acadêmicos e estudantis, ofícios e livros. Conta com recursos de alterações das
dimensões da folha, criação de designers, incluir notas no rodapé e numeração de
páginas. Com uma interface simples que foi aperfeiçoada ao longo de anos desde
seu lançamento.

Está sendo utilizado para a documentação de todos os processos do


desenvolvimento do trabalho de conclusão de curso, utilizamos de todas as suas
ferramentas para uma facilidade na concepção da documentação do projeto, pôr a
sua interface ser simples e ser mundialmente conhecida é fácil de se habituar e usar
de suas ferramentas.
40

Figura 10 - ícone Canvas

Fonte: EAD plataforma


Basicamente, o Business Model Canvas serve para ilustrar o plano de
negócio de uma empresa.

Ele traduz de forma visualmente mais clara os aspectos mais importantes de


um plano de negócio.

O modelo Canvas não substitui o plano de negócio, ele apenas favorece o


entendimento dos pontos mais importantes que sustentam a empresa, como
estrutura de custos, parcerias, público-alvo, características do produto etc.
41

2.3.5 Ferramentas de Modelagem

Figura 11 - Ícone Draw.io

Fonte: Site Wikimedia Commons


O Draw.io é um editor gráfico online que permite o desenvolvimento de
desenhos, gráficos e fluxogramas sem a necessidade de usar um software não
gratuito e pesado, disponibilizando recursos para a criação de qualquer tipo de
desenho, possuindo uma parte dedicada à arquitetura da informação.

Ele te oferta a possibilidade se conectar ao Google Drive, assim tendo acesso


a seus fluxogramas, gráficos e desenhos de uma maneira rápida e segura, onde
ficam disponíveis para alterações, porém, ele também permite que você os salve em
PDF, PNG e JPG, mas se a opção de alterações, por isso a vantagem em conectá-lo
ao Google Drive.

O Draw.io está sendo utilizado para a confecção dos fluxogramas que são
necessários para uma análise do nosso software, explicando de maneira simples o
funcionamento dele, tanto do front-end quanto do back-end, por ter uma interface
simples e leve, ele tem uma aba de recursos voltados à arquitetura da informação,
mais um ponto positivo que nos ajuda na criação dos requisitados fluxogramas e
diagramas de caso de uso.
42

2.3.6 Ferramentas de Programação

Figura 12 - Ícone Visual Studio

Fonte: Site SempreUpdate


Desenvolvido pela Microsoft, o Visual Studio é uma IDE, do inglês Integrated
Development Environment ou Ambiente de Desenvolvimento Integrado em
português. Serve para o desenvolvimento de software, especialmente dedicado ao
.NET Framework e as linguagens de programação Visual Basic, C, C++, C# e F#.
Também podendo ser utilizado na área de desenvolvimento web, utilizando da
plataforma ASP.NET.

O VS tem duas versões a Community e a Enterprise. A Community é voltada


para pequenos desenvolvedores ou pequenas equipes, sendo gratuito nesses
casos, existindo suporte a diversas linguagens e extensões. Entretanto, a versão
Entreprise não é gratuita e sendo direcionada a grandes equipes e empresas,
havendo ferramentas para de desenvolvimento de software, de banco de dados,
colaboração, métricas, testes e relatórios. Lançado em 1997 vem recebendo
atualizações e novas versões até hoje.

Estamos a utilizar o Visual Studio para programar toda a base funcional do


jogo, desenvolvendo as mecânicas de pulo, pulo duplo e andar no geral, também
utilizamos para criar obstáculos, como pular muros, subir escadas, chãos levadiços e
enfrentar inimigos que também fazem parte do conjunto do jogo, com cada fase
43

apresentando uma mecânica nova assim somando ao jogo. Analisando o contexto


geral do desenvolvimento, podemos concluir que o VS está sendo utilizado
diretamente na programação do jogo e suas mecânicas.

Figura 13 - Ícone do C#

Fonte: Site DialHost


O C# é uma linguagem de programação criada pela Microsoft, é uma
linguagem que facilita o processo de desenvolvimento, ela possui inúmeros recursos
que proporcionam uma grande produtividade para os desenvolvedores que a
utilizam.

Ela é a linguagem mais comum disponível para a confecção do nosso jogo,


estamos usando-a para programar o jogo, utilizando suas ferramentas para criar a
movimentação, pulo, gravidade e toda a física do jogo.
44

Figura 14 - Ícone do JavaScript

Fonte: Site Medium


É uma linguagem de programação que permite a você criar conteúdo que seu
atualiza dinamicamente, controlar multimídias e imagens animadas, ela também
permite a você implementar itens complexos em páginas web.

Essa ferramenta está sendo utilizada para a confecção de animações em


nosso site, animações essas que possibilitam uma melhor aparência e facilitam a
visualização de algumas informações, auxiliando em um design mais apropriado
para o público.
45

Figura 15 - Ícone do HTML 5

Fonte: Site EAD Plus


O HTML5 (acrônimo de HiperText Markup, ou em português Linguagem de
Marcação de Hipertexto) é uma linguagem de marcação usada para descrever o
layout de páginas web. É utilizado para o estabelecimento da estrutura básica e para
inserção de conteúdo de uma página web.

O HTML5 está sendo utilizado para estruturar o site, é a principal e única


ferramenta de marcação utilizada para a criação dele.
46

Figura 16 - Ícone do CSS 3

Fonte: Site Flaticon


CSS é uma linguagem de estilo usada para estilizar elementos de uma página
desenvolvidos usando linguagens de marcação. A linguagem CSS tem a capacidade
de separar a parte estrutural escrita da parte visual.

É uma linguagem com múltiplas possibilidades de formatação que permite


mover, editar, excluir, alinhar ou manipular o espaçamento dos elementos da página
de forma simples e prática.

O CSS está sendo utilizado para a estilização do site, e para o


desenvolvimento de animações do corpo de texto da nossa landing page.
47

3. ANÁLISE DO SISTEMA

3.1 Ciclo De Vida Do Software

Gráfico 14 - Ciclo de vida do software

Esforço
10
8
6
4
2
0

Fonte: Do próprio autor, 2022


48

3.2 Mapa Do Site

3.2.1 Mapa do Site Front-End


Figura 17 - Mapa do Site Front-end

Fonte: Do próprio autor, 2022


49

3.2.2 Mapa do Menu do Jogo

Figura 18 - Mapa do menu do jogo

Fonte: Do próprio autor, 2022


50

3.3 Estrutura Do Site

Figura 19 - Estrutura do Site

Fonte: Do próprio autor, 2022


51

3.4 Requisitos Funcionais

3.4.1 Requisitos Funcionais do Site

Tabela 1 - Requisitos funcionais RFU. 001


Código: RFU. 001

Classificação: Obrigatório.

Ator: Usuário

Descrição: O usuário deve acessar nosso site


diretamente pela página única que é a
nossa “home”.

Pré-Condições: O site deve ter acabado de ser aberto.

Pós-Condições: O site deve ser aberto diretamente na


página única que é a “home”.

Fluxo Principal: 1. O usuário deve acessar nosso


site e entrar na página única.

Fluxo de Erro: Não há.

Fluxo Alternativo: [FA 001] O site está fora do ar.

1. Sistema: O site se encontra fora


do ar.

Fonte: Do próprio autor, 2022

Tabela 2 - Requisitos funcionais RFU. 002


Código: RFU. 002

Classificação: Obrigatório.

Ator: Usuário.

Descrição O usuário deve realizar a instalação do


nosso jogo, através do botão “baixar”
localizado no canto esquerdo inferior,
52

assim que ele entrar em nosso site.

Pré-Condições: O site deve estar aberto.

Pós-Condições: O arquivo do jogo deve começar a ser


instalado imediatamente.

Fluxo Principal: 1. Assim que o usuário clicar no


botão “baixar” o jogo vai começar
a ser instalado.
2. Sistema: o computador começa a
instalar os arquivos do jogo.

Fluxo de Erro: [FE 001] O botão não está funcionando e


o download não começa.

1. O usuário clica no botão “baixar”


e o download não é iniciado.

Fluxo Alternativo: [FA 002] O botão funciona de maneira


indevida.

1. Sistema: O botão funciona de


maneira errônea e leva a outro
lugar do site.
2. Sistema: Outro arquivo é
instalado no computador do
usuário.

Fonte: Do próprio autor, 2022

3.4.2 Requisitos Funcionais do Jogo

Tabela 3 - Requisitos funcionais RFU. 003


Código: RFU. 003

Classificação: Opcional

Ator: Usuário

Descrição: O personagem deve andar para a


esquerda, assim se movimentando.
53

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: O personagem deve se mover para a


esquerda.

Fluxo Principal: 1. O usuário pressiona a tecla “A”


ou a seta para a esquerda e o
personagem se projeta para a
esquerda.
2. Sistema: O sistema realiza o
movimento do personagem.

Fluxo de Erro: [FE 002] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 003] O teclado não funciona


corretamente.

1. Usuário: O teclado está quebrado


e essa tecla não funciona.
2. Sistema: A função não é
realizada e o personagem fica
estático.

Fonte: Do próprio autor, 2022

Tabela 4 - Requisitos funcionais RFU. 004


Código: RFU. 004

Classificação: Opcional

Ator: Usuário

Descrição: O personagem deve andar para a direita,


54

assim se movimentando.

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: O personagem deve se mover para a


direita.

Fluxo Principal: 1. O usuário pressiona a tecla “D”


ou a setinha para a direita o
personagem se projeta para a
direita.
2. Sistema: O sistema realiza o
movimento do personagem.

Fluxo de Erro: [FE 003] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 004] O teclado não funciona


corretamente.

1. Usuário: O teclado está quebrado


e essa tecla não funciona.
2. Sistema: A função não é
realizada e o personagem fica
estático.

Fonte: Do próprio autor, 2022

Tabela 5 - Requisitos funcionais RFU. 005


Código: RFU. 005

Classificação: Opcional

Ator: Usuário
55

Descrição: O personagem deve pular, assim se


movimentando.

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: O personagem deve se mover para


cima.

Fluxo Principal: 1. O usuário pressiona a tecla “W”,


a barra de espaço ou a setinha
para cima e o personagem se
projeta para a direita.
2. Sistema: O sistema realiza o
movimento do personagem.

Fluxo de Erro: [FE 004] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 005] O teclado não funciona


corretamente.

1. Usuário: O teclado está quebrado


e essa tecla não funciona.
2. Sistema: A função não é
realizada e o personagem fica
estático.

Fonte: Do próprio autor, 2022

Tabela 6 - Requisitos funcionais RFU. 006


Código: RFU. 006

Classificação: Opcional
56

Ator: Usuário

Descrição: O personagem deve interagir com o


cenário, personagens, itens e trocar de
cenário ao apertar a tecla “E”.

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: O personagem deve usar itens, coletar


os mesmos, falar com outros
personagens e trocar de cenários.

Fluxo Principal: 1. O usuário pressiona a tecla “E”


que faz com que o personagem
interaja com os elementos do
jogo.
2. Sistema: O sistema realiza a
respectiva interação no jogo.

Fluxo de Erro: [FE 005] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 006] O teclado não funciona


corretamente.

1. Usuário: O teclado está


quebrado e essa tecla não
funciona.
2. Sistema: A função não é
realizada e o personagem fica
estático.

Fonte: Do próprio autor, 2022


57

Tabela 7 - Requisitos funcionais RFU. 007


Código: RFU. 007

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona a tecla “Esc” em


seu teclado assim pausando o jogo.

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: O jogo deve ser pausado mostrando um


pequeno menu com os botões
“Recomeçar”, “Resumir” e “Sair”.

Fluxo Principal: 1. O usuário pressiona a tecla “Esc”


que faz com que o jogo seja
pausado.
2. Sistema: O sistema realiza a
respectiva interação no jogo.

Fluxo de Erro: [FE 005] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 006] O teclado não funciona


corretamente.

1. Usuário: O teclado está


quebrado e essa tecla não
funciona.
2. Sistema: A função não é
realizada e o personagem fica
estático.

Fonte: Do próprio autor, 2022


58

Tabela 8 - Requisitos funcionais RFU. 008


Código: RFU. 008

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão


“Recomeçar” no menu de pausa e a fase
reinicia.

Pré-Condições: O jogo deve estar aberto e rodando.

Pós-Condições: A fase em que o jogador se encontra


deve ser reiniciada desde o início.

Fluxo Principal: 1. O usuário pressiona o botão


“Recomeçar” e a fase é
reiniciada.
2. Sistema: O sistema realiza a
respectiva interação no jogo.

Fluxo de Erro: [FE 007] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 008] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não reinicia.

Fonte: Do próprio autor, 2022


59

Tabela 9 - Requisitos funcionais RFU. 009


Código: RFU. 009

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Resumir”


no menu de pausa e o jogo é retomado.

Pré-Condições: O jogo deve estar aberto e pausado.

Pós-Condições: O jogo é “despausado” e a fase retoma


de onde parou.

Fluxo Principal: 1. O usuário pressiona o botão


“Resumir” e a fase é retomada.
2. Sistema: O sistema realiza a
respectiva interação no jogo.

Fluxo de Erro: [FE 008] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 009] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não contínua
de onde parou.

Fonte: Do próprio autor, 2022


60

Tabela 10 - Requisitos funcionais RFU. 010


Código: RFU. 010

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Sair” no


menu de pausa e o jogo é fechado.

Pré-Condições: O jogo deve estar aberto e rodando e


pausado.

Pós-Condições: O jogo é encerrado e a fase retoma de


onde parou.

Fluxo Principal: 1. O usuário pressiona o botão


“Sair” e o jogo é fechado.
2. Sistema: O sistema realiza a
respectiva interação no jogo.

Fluxo de Erro: [FE 009] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 010] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e o jogo não é fechado.

Fonte: Do próprio autor, 2022


61

Tabela 11 - Requisitos funcionais RFU. 011


Código: RFU. 011

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Jogar” no


menu principal e outro menu aparece
com as opções “Continuar”, “Novo jogo”
e “Voltar”. Com todos sendo botões.

Pré-Condições: O jogo deve estar aberto e no menu


principal.

Pós-Condições: O menu de jogo aparece o usuário pode


escolher dentre as opções que
aparecerão.

Fluxo Principal: 1. O usuário pressiona o botão


“Jogar” no menu principal e outro
menu aparece com as opções
“Continuar”, “Novo jogo” e
“Voltar”. Com todos sendo
botões.
2. Sistema: O menu de opções
aparece e o usuário pode
escolher qual opção ele irá clicar.

Fluxo de Erro: [FE 010] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 011] O mouse não funciona


corretamente.
62

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não inicia.

Fonte: Do próprio autor, 2022

Tabela 12 - Requisitos funcionais RFU. 012


Código: RFU. 012

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Continuar”


e aparece um menu de seleção de
fases, onde o usuário pode selecionar de
onde ele deseja continuar levando em
conta o seu progresso salvo no jogo, ou
clicar no botão “X” que volta ao menu
jogar.

Pré-Condições: O jogo deve estar aberto e no menu


jogar.

Pós-Condições: O menu de seleção de fases aparece.

Fluxo Principal: 1. O usuário pressiona o botão


“Continuar” e aparece um menu
de seleção de fases, onde o
usuário pode selecionar de onde
ele deseja continuar levando em
conta o seu progresso salvo no
jogo, ou clicar no botão “X” que
volta ao menu jogar.
2. Sistema: O menu de seleção de
fases aparece e o usuário pode
escolher de que fase ele quer
continuar ou clicar no botão “X” e
retornar ao menu jogar.
63

Fluxo de Erro: [FE 011] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 012] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não inicia.

Fonte: Do próprio autor, 2022

Tabela 13 - Requisitos funcionais RFU. 013


Código: RFU. 013

Classificação: Opcional

Ator: Usuário

Descrição: No menu de fases, o usuário pode


selecionar e clicar na fase que ele
deseja continuar levando em conta seu
progresso dentro do jogo, esses botões
que ele pode clicar estão enumerados
de um a seis, clicando em uma dessas
fases o usuário inicia a respectiva fase
que ele selecionou.

Pré-Condições: O jogo deve estar aberto e no menu de


fases.

Pós-Condições: É iniciada a respectiva fase que o


64

usuário desejava continuar jogando.

Fluxo Principal: 1. No menu de fases, o usuário


pode selecionar e clicar na fase
que ele deseja continuar levando
em conta seu progresso dentro
do jogo, esses botões que ele
pode clicar estão enumerados de
um a seis, clicando em uma
dessas fases o usuário inicia a
respectiva fase que ele
selecionou.
2. Sistema: O usuário seleciona a
respectiva fase que ele quer e o
jogo inicia o nível diretamente do
começo dele.

Fluxo de Erro: [FE 012] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 013] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não inicia.

Fonte: Do próprio autor, 2022


65

Tabela 14 - Requisitos funcionais RFU. 014


Código: RFU. 014

Classificação: Opcional

Ator: Usuário

Descrição: No menu de fases, o usuário ao clicar no


botão “X” retorna ao menu de jogo.

Pré-Condições: O jogo deve estar aberto e no menu de


fases.

Pós-Condições: O menu de seleção de fases é fechado e


retorna ao menu jogar.

Fluxo Principal: 1. No menu de seleção de fases, o


usuário ao clicar no botão “X” e
retorna ao menu de jogo.
2. Sistema: O menu de seleção de
fases é fechado e retorna ao
menu jogar

Fluxo de Erro: [FE 013] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 014] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a fase não inicia.

Fonte: Do próprio autor, 2022


66

Tabela 15 - Requisitos funcionais RFU. 015


Código: RFU. 015

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Novo jogo”


no menu jogar e todo seu antigo
progresso é eliminado e o jogo
recomeça desde a primeira fase.

Pré-Condições: O jogo deve estar aberto e no menu


jogar.

Pós-Condições: O jogo inicia desde a primeira fase.

Fluxo Principal: 1. O usuário pressiona o botão


“Novo Jogo” e o jogo inicia na
primeira fase apagando todo o
processo, caso ele tivesse.
2. Sistema: O jogo inicia na primeira
fase apagando todo o progresso
anterior.

Fluxo de Erro: [FE 014] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 015] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
67

realizada e a fase não inicia.

Fonte: Do próprio autor, 2022

Tabela 16 - Requisitos funcionais RFU. 016


Código: RFU. 016

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Voltar” no


menu jogar que retorna ao menu
principal.

Pré-Condições: O jogo deve estar aberto e no menu


jogar.

Pós-Condições: O jogo inicia desde a primeira fase.

Fluxo Principal: 1. O usuário pressiona o botão


“Voltar” e retorna ao menu
principal.
2. Sistema: O menu jogar é fechado
e retorna ao menu principal.

Fluxo de Erro: [FE 015] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao clicar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 016] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
68

realizada e a fase não inicia.

Fonte: Do próprio autor, 2022

Tabela 17 - Requisitos funcionais RFU. 017


Código: RFU. 017

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Opções”


no menu e abre um menu de opções
contendo as opções de habilitar ou
desabilitar os efeitos sonoros e pôr ou
tirar do modo tela cheia e podendo
aumentar ou diminuir o volume do jogo.

Pré-Condições: O jogo deve estar aberto e no menu


principal.

Pós-Condições: O menu de opções é aberto.

Fluxo Principal: 1. O usuário pressiona o botão


“Opções” e o menu de opções é
aberto.
2. Sistema: O menu de opções é
aberto para o usuário.

Fluxo de Erro: [FE 016] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao pressionar o botão


uma mensagem de erro aparece
em sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 017] O mouse não funciona


corretamente.
69

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e o menu de opções
não é aberto.

Fonte: Do próprio autor, 2022

Tabela 18 - Requisitos funcionais RFU. 018


Código: RFU. 018

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Som” no


menu de opções e os efeitos sonoros do
jogo são desabilitados ou habilitados
junto da música.

Pré-Condições: O jogo deve estar aberto e no menu de


opções.

Pós-Condições: Os efeitos sonoros são habilitados ou


desabilitados junto da música.

Fluxo Principal: 1. O usuário pressiona o botão


“Som” e os efeitos sonoros são
habilitados ou desabilitados junto
da música.
2. Sistema: O jogo silencia ou
habilita os efeitos sonoros e a
música.

Fluxo de Erro: [FE 017] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
70

2. Sistema: A função não é


realizada.

Fluxo Alternativo: [FA 018] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e os efeitos sonoros
não são habilitados ou
desabilitados.

Fonte: Do próprio autor, 2022

Tabela 19 - Requisitos funcionais RFU. 019


Código: RFU. 019

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “Fullscreen”


que habilita ou desabilita o modo tela
cheia do jogo.

Pré-Condições: O jogo deve estar aberto e no menu de


opções.

Pós-Condições: Ele habilita ou desabilita o modo tela


cheia do jogo.

Fluxo Principal: 1. O usuário pressiona o botão


“Fullscreen” que habilita ou
desabilita o modo tela cheia do
jogo.
2. Sistema: O jogo sai ou entra no
modo tela cheia.

Fluxo de Erro: [FE 018] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.
71

1. Sistema: Ao teclar uma


mensagem de erro aparece em
sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 019] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e a música não é
habilitada ou desabilitada.

Fonte: Do próprio autor, 2022

Tabela 20 - Requisitos funcionais RFU. 020


Código: RFU. 020

Classificação: Opcional

Ator: Usuário

Descrição: O usuário arrasta a barra de volume


para a esquerda diminuindo o volume do
jogo ou para a direita aumentando o
volume do jogo.

Pré-Condições: O jogo deve estar aberto e no menu de


opções.

Pós-Condições: O brilho do jogo é aumentado ou


diminuído.

Fluxo Principal: 1. O usuário arrasta a barra de


volume para a esquerda
diminuindo o volume do jogo ou
para a direita aumentando o
volume do jogo.
2. Sistema: O volume do jogo
72

aumenta ou diminui.

Fluxo de Erro: [FE 019] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao arrastar o “indicador”


uma mensagem de erro aparece
em sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 020] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e o brilho do jogo não é
alterado.

Fonte: Do próprio autor, 2022

Tabela 21 - Requisitos funcionais RFU. 021


Código: RFU. 021

Classificação: Opcional

Ator: Usuário

Descrição: O usuário pressiona o botão “X” no


menu de opções e retorna ao menu
principal.

Pré-Condições: O jogo deve estar aberto e no menu de


opções.

Pós-Condições: O menu de opções é fechado e retorna


ao menu principal.

Fluxo Principal: 1. O usuário pressiona o botão “X” e


retorna ao menu principal.
73

2. Sistema: O menu de opções é


fechado e retorna ao menu
principal.

Fluxo de Erro: [FE 020] apresenta uma mensagem de


erro, o jogo fecha ou a respectiva função
não é realizada.

1. Sistema: Ao pressionar o botão


uma mensagem de erro aparece
em sua tela e o jogo é fechado
imediatamente.
2. Sistema: A função não é
realizada.

Fluxo Alternativo: [FA 021] O mouse não funciona


corretamente.

1. Usuário: O mouse está com


defeito.
2. Sistema: A função não é
realizada e o menu de opções
não é aberto.

Fonte: Do próprio autor, 2022

Tabela 22 - Requisitos funcionais RFU. 022


Código: RFU. 022

Classificação: Opcional

Ator: Usuário

Descrição: Ao receber dano, o personagem deixa


cair a “marmita”.

Pré-Condições: Estar com a “marmita” e tomar dano.

Pós-Condições: Sua “marmita” deve cair no chão.

Fluxo Principal: 1. O usuário recebe dano através


de um inimigo.
2. Sistema: Contabiliza o dano
74

sofrido e faz o personagem


perder a marmita.

Fluxo de Erro: [FE 021] A marmita não cai no chão, é


exibida uma mensagem de erro e o jogo
fecha.

1. O usuário recebe dano e a


marmita não cai, aparece uma
mensagem de erro e o jogo
fecha.
2. Sistema: A ação não é realizada.

Fluxo Alternativo: Não há.

Fonte: Do próprio autor, 2022

Tabela 23 - Requisitos funcionais RFU. 023


Código: RFU. 023

Classificação: Obrigatório

Ator: Usuário

Descrição: Pegar a “marmita” do chão

Pré-Condições: Ter perdido a “marmita” e pego ela do


chão.

Pós-Condições: A “marmita” deve ser coletada e


aparecer um ícone mostrando que você
está com ela.

Fluxo Principal: 1. O usuário deve coletar a


“marmita” do chão.
2. Sistema: Contabiliza a marmita
coletada e um ícone mostrado
isso aparece do lado da foto do
personagem.

Fluxo de Erro: [FE 022] A marmita não é coletada, e


uma mensagem de erro é exibida e o
jogo fecha.
75

1. O usuário não consegue coletar a


marmita, uma mensagem de erro
aparece e o jogo fecha.
2. Sistema: A ação não é realizada.

Fluxo Alternativo: [FA 022] O teclado do usuário está


quebrado e ele não consegue chegar até
a marmita.

1. O teclado está quebrado e o


usuário não consegue chegar até
a marmita.
2. Sistema: A marmita não é
coletada.

Fonte: Do próprio autor, 2022

Tabela 24 - Requisitos funcionais RFU. 024


Código: RFU. 024

Classificação: Obrigatório

Ator: Usuário

Descrição: Matar inimigos pisando neles.

Pré-Condições: Ter um inimigo e o usuário tentar pular e


cair sobre eles.

Pós-Condições: O inimigo deve morrer.

Fluxo Principal: 1. O usuário ao pular e cair em cima


do inimigo mata o mesmo.
2. Sistema: Contabiliza que o
inimigo foi morto.

Fluxo de Erro: [FE 023] O inimigo não é morto, aparece


uma mensagem de erro e o jogo fecha.

1. O usuário tenta matar o inimigo e


o mesmo não é morto ou aparece
uma mensagem de erro e o jogo
fecha.
76

2. Sistema: A ação não acontece.

Fluxo Alternativo: [FA 023] O teclado do usuário está


quebrado e ele não consegue matar o
inimigo.

1. O teclado está quebrado e o


usuário não consegue pular e
cair sobre o inimigo.
2. Sistema: O inimigo não é morto.

Fonte: Do próprio autor, 2022

Tabela 25 - Requisitos funcionais RFU. 025


Código: RFU. 025

Classificação: Obrigatório

Ator: Usuário

Descrição: Ao tomar uma certa quantidade de dano


ou cair nos buracos da rua o
personagem deve morrer e recomeçar
do último ponto salvo.

Pré-Condições: Estar com pouca vida ou estar caindo no


buraco da rua.

Pós-Condições: O personagem deve morrer.

Fluxo Principal: 1. O usuário deve tomar uma certa


quantidade de dano ou cair no
buraco da rua.
2. Sistema: Contabiliza que o
personagem foi morto e retorna
do último ponto salvo.

Fluxo de Erro: [FE 024] O personagem não é morto,


aparece uma mensagem de erro e o
jogo fecha.

1. O usuário recebe a quantidade


de dano necessária ou cai no
77

buraco da rua e o personagem


não é morto ou aparece uma
mensagem de erro e o jogo
fecha.
2. Sistema: A ação não acontece.

Fluxo Alternativo: [FA 024] O teclado do usuário está


quebrado e ele não consegue matar o
inimigo.

1. O teclado está quebrado e o


usuário não consegue pular ou
chegar perto do inimigo para
receber dano.
2. Sistema: O personagem não é
morto.

Fonte: Do próprio autor, 2022

3.4.3 Teste dos Requisitos Funcionais do Site

Tabela 26 - Teste dos requisitos funcionais RFU.001


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do acesso dos


usuários ao site, sendo o primeiro
contato deles com o mesmo deve ser
realizado pela tela “Home”.

Requisitos que motivaram esse teste: RFU. 001 – Acessar o site: Acessar o
site diretamente da página “Home”.

Fonte: Do próprio autor, 2022

Tabela 27 - Teste dos requisitos funcionais RFU.002


Tipo de teste: Funcional

Subtipo de teste: Requisitos


78

Objetivo do teste: Realizar a funcionalidade do botão de


instalação do nosso jogo, que se
encontra na parte inferior esquerda do
nosso site, assim que ele é aberto

Requisitos que motivaram esse teste: RFU. 002 – Baixar os arquivos do jogo:
O usuário deve realizar o download pelo
botão “baixar”.

Fonte: Do próprio autor, 2022

Tabela 28 - Detalhamento dos testes funcionais do site


Funcionalidade Estratégia do Teste Critério de Sucesso Critério de Falha Status Defeitos Encontrados

Usabilidade do site Acessar o site O primeiro contato O primeiro acesso


do usuário deve acontece no meio da
acontecer na página única ou uma
página única, mensagem e erro é
começando pela exibida.
parte “home”

Usabilidade do site Instalar nosso jogo Ao clicar no botão É exibida uma


de “baixar” o jogo mensagem de erro
começa a ser ou outro arquivo é
instalado. instalado.

Fonte: Do próprio autor, 2022

3.4.4 Teste dos Requisitos Funcionais do Jogo

Tabela 29 - Teste dos requisitos funcionais RFU.003


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a jogabilidade e a opção de o


usuário de poder andar para a esquerda
usando a tecla “A”,

Requisitos que motivaram esse teste: RFU. 003 – O personagem deve se


mover: Ao pressionar a tecla “A” o
personagem deve se direcionar a
79

esquerda.

Fonte: Do próprio autor, 2022

Tabela 30 - Teste dos requisitos funcionais RFU.004


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a jogabilidade e a opção de o


usuário de poder andar para a direita
usando a tecla “D”.

Requisitos que motivaram esse teste: RFU. 004 - O personagem deve se


mover: Ao pressionar a tecla “D” o
personagem deve se direcionar a direita.

Fonte: Do próprio autor, 2022

Tabela 31 - Teste dos requisitos funcionais RFU.005


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a jogabilidade e a opção de o


usuário de poder pular usando a tecla
“W”.

Requisitos que motivaram esse teste: RFU. 005 – O personagem deve pular:
Ao pressionar a tecla “W” ele deve pular
uma ou duas vezes, dependendo da
quantidade de vezes em que a
respectiva tecla foi pressionada.

Fonte: Do próprio autor, 2022

Tabela 32 - Teste dos requisitos funcionais RFU.006


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “E” nos


quesitos de interagir com a carta, falar com
80

personagens e trocar de cenário através das


portas.

Requisitos que motivaram esse teste: RFU. 006 - O personagem deve interagir
com o cenário: No momento em que a tecla
“E” for pressionada o personagem deve
interagir com o cenário, trocando de fase,
falando com os personagens ou interagindo
com certos objetos.

Fonte: Do próprio autor, 2022

Tabela 33 - Teste dos requisitos funcionais RFU.007


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade da tecla “Esc”,


que ao ser pressionado enquanto o jogo
está rodando deve pausar o mesmo e
abrir um menu.

Requisitos que motivaram esse teste: RFU. 007 – Testar o menu de pausa: Ao
pressionar a tecla “Esc” o jogo deve ser
pausado e um menu de pausa deve ser
apresentado.

Fonte: Do próprio autor, 2022

Tabela 34 - Teste dos requisitos funcionais RFU.008


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão


“Recomeçar” que ao ser pressionado
deve recomeçar a fase desde o começo.

Requisitos que motivaram esse teste: RFU. 008 – Testar os botões do menu
de pausa: Ao pressionar o botão
“Recomeçar” a fase deve ser reiniciada
desde o começo, assim apagando o
81

progresso do jogador.

Fonte: Do próprio autor, 2022

Tabela 35 - Teste dos requisitos funcionais RFU.009


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão


“Resumir” que ao ser pressionado deve
fazer com que a ação do botão “Esc”
seja desfeita e o jogo volte de onde
parou.

Requisitos que motivaram esse teste: RFU. 009 – Testar os botões do menu
de pausa: Ao pressionar o botão
“Resumir”, o jogo deve ser “despausado”
o meu de pause fechado e o jogo deve
retornar de onde parou.

Fonte: Do próprio autor, 2022

Tabela 36 - Teste dos requisitos funcionais RFU.010


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “Sair”


encontrado no menu de pausa, botão
esse que ao ser pressionado vai
diretamente para o menu principal.

Requisitos que motivaram esse teste: RFU. 010 – Testar os botões do menu
de pausa: Ao pressionar o botão “Sair”, o
jogo é direcionado ao menu principal.

Fonte: Do próprio autor, 2022

Tabela 37 - Teste dos requisitos funcionais RFU.011


Tipo de teste: Funcional
82

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “Jogar”


encontrado no menu principal, que ao
ser pressionado outro menu aparece
com as opções “Continuar”, “Novo jogo”
e “Voltar”. Com todos sendo botões.

Requisitos que motivaram esse teste: RFU. 011 – Testar a funcionalidade do


botão “Jogar” encontrado no menu
principal, que ao ser pressionado outro
menu aparece com as opções
“Continuar”, “Novo jogo” e “Voltar”. Com
todos sendo botões.

Fonte: Do próprio autor, 2022

Tabela 38 - Teste dos requisitos funcionais RFU.012


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão


“Continuar” que ao ser pressionado
aparece um menu de seleção de fases,
onde o usuário pode selecionar de onde
ele deseja continuar levando em conta o
seu progresso salvo no jogo, ou clicar no
botão “X” que volta ao menu jogar.

Requisitos que motivaram esse teste: RFU. 012 – Testar a funcionalidade do


botão “Continuar” que ao ser
pressionado aparece um menu de
seleção de fases, onde o usuário pode
selecionar de onde ele deseja continuar
levando em conta o seu progresso salvo
no jogo, ou clicar no botão “X” que volta
ao menu jogar.

Fonte: Do próprio autor, 2022


83

Tabela 39 - Teste dos requisitos funcionais RFU.013


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade dos botões no


menu de fases, onde usuário pode
selecionar e clicar na fase que ele
deseja continuar levando em conta seu
progresso dentro do jogo, esses botões
que ele pode clicar estão enumerados
de um a seis, clicando em uma dessas
fases o usuário inicia a respectiva fase
que ele selecionou.

Requisitos que motivaram esse teste: RFU. 013 – Testar a funcionalidade dos
botões no menu de fases, onde usuário
pode selecionar e clicar na fase que ele
deseja continuar levando em conta seu
progresso dentro do jogo, esses botões
que ele pode clicar estão enumerados
de um a seis, clicando em uma dessas
fases o usuário inicia a respectiva fase
que ele selecionou.

Fonte: Do próprio autor, 2022

Tabela 40 - Teste dos requisitos funcionais RFU.014


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão ”X”


presente menu de fases, o usuário ao
clicar no botão “X” retorna ao menu de
jogo.

Requisitos que motivaram esse teste: RFU. 014 - Testar a funcionalidade do


botão ”X” presente menu de fases, o
usuário ao clicar no botão “X” retorna ao
84

menu de jogo.

Fonte: Do próprio autor, 2022

Tabela 41 - Teste dos requisitos funcionais RFU.015


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “Novo


jogo” no menu jogar que ao ser
pressionado todo seu antigo progresso é
eliminado e o jogo recomeça desde a
primeira fase.

Requisitos que motivaram esse teste: RFU. 015 – Testar a funcionalidade do


botão “Novo jogo” no menu jogar que ao
ser pressionado todo seu antigo
progresso é eliminado e o jogo
recomeça desde a primeira fase.

Fonte: Do próprio autor, 2022

Tabela 42 - Teste dos requisitos funcionais RFU.016


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “Voltar”


no menu jogar que ao ser pressionado
retorna ao menu principal.

Requisitos que motivaram esse teste: RFU. 016 – Testar a funcionalidade do


botão “Voltar” no menu jogar que ao ser
pressionado retorna ao menu principal.

Fonte: Do próprio autor, 2022


85

Tabela 43 - Teste dos requisitos funcionais RFU.018


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão


“Opções” no menu principal que ao ser
pressionado abre um menu de opções
contendo as opções de habilitar ou
desabilitar os efeitos sonoros e pôr ou
tirar do modo tela cheia e podendo
aumentar ou diminuir o volume do jogo.

Requisitos que motivaram esse teste: RFU. 017 – Testar a funcionalidade do


botão “Opções” no menu principal que
ao ser pressionado abre um menu de
opções contendo as opções de habilitar
ou desabilitar os efeitos sonoros e pôr ou
tirar do modo tela cheia e podendo
aumentar ou diminuir o volume do jogo.

Fonte: Do próprio autor, 2022

Tabela 44 - Teste dos requisitos funcionais RFU.017


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “Som”


no menu de opções e que ao ser
pressionado os efeitos sonoros do jogo
são desabilitados ou habilitados junto da
música.

Requisitos que motivaram esse teste: RFU. 018 – Ativar ou desativar o som do
jogo: ao marcar ou desmarcar a caixa de
“Som” o som do jogo é ativado ou
desativado.

Fonte: Do próprio autor, 2022


86

Tabela 45 - Teste dos requisitos funcionais RFU.019


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão


“Fullscreen” que ao ser pressionado
habilita ou desabilita o modo tela cheia
do jogo.

Requisitos que motivaram esse teste: RFU. 019 – Testar a funcionalidade do


botão “Fullscreen” que ao ser
pressionado habilita ou desabilita o
modo tela cheia do jogo.

Fonte: Do próprio autor, 2022

Tabela 46 - Teste dos requisitos funcionais RFU.020


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade da barra de


volume que ao ser arrastado para a
esquerda diminui o volume do jogo e
para a direita aumenta o volume do jogo.

Requisitos que motivaram esse teste: RFU. 020 – Testar a funcionalidade da


barra de volume que ao ser arrastado
para a esquerda diminui o volume do
jogo e para a direita aumenta o volume
do jogo.

Fonte: Do próprio autor, 2022

Tabela 47 - Teste dos requisitos funcionais RFU.021


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade do botão “X” que


ao ser pressionado regressa para o
87

menu principal.

Requisitos que motivaram esse teste: RFU. 021 - Testar o retorno ao menu
principal: ao pressionar o botão “X” o
menu de opções é fechado e retorna ao
menu principal.

Fonte: Do próprio autor, 2022

Tabela 48 - Teste dos requisitos funcionais RFU.022


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade de ao receber


dano a “marmita” que o personagem
carrega deve ser lançada ao chão.

Requisitos que motivaram esse teste: RFU. 022 – Testar a mecânica de


receber dano: ao receber dano a
“marmita” deve cair no chão.

Fonte: Do próprio autor, 2022

Tabela 49 - Teste dos requisitos funcionais RFU.023


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade de que ao pegar


a “marmita” que está no chão um ícone
deve mostrar que ela foi pega, assim
podendo progredir no jogo.

Requisitos que motivaram esse teste: RFU. 023 – Testar a mecânica de pegar
a “marmita”: quando a “marmita” estiver
no chão o jogador deve passar por cima
dela, assim coletando a “marmita” e
podendo progredir no jogo.

Fonte: Do próprio autor, 2022


88

Tabela 50 - Teste dos requisitos funcionais RFU.024


Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade de que ao pular


e cair em cima dos inimigos eles são
mortos, assim facilitando a trajetória do
usuário.

Requisitos que motivaram esse teste: RFU. 024 – Testar a mecânica de matar
inimigos: ao pular e cair em cima de um
inimigo ele deve morrer mostrando uma
animação de morte do respectivo
inimigo.

Fonte: Do próprio autor, 2022


Tabela 51 - Teste dos requisitos funcionais RFU.025
Tipo de teste: Funcional

Subtipo de teste: Requisitos

Objetivo do teste: Testar a funcionalidade de que ao


receber uma certa quantidade de dano
ou cair nos buracos da rua, o
personagem deve morrer, assim
regredindo até o último ponto salvo.

Requisitos que motivaram esse teste: RFU. 025 – Testar a cena de morte: ao
sofrer muito dano ou cair do precipício o
personagem deve morrer, aparecendo
uma mensagem de morte e dando a
opção de o jogador sair para o menu
principal ou fechar o jogo.

Fonte: Do próprio autor, 2022


89

Tabela 52 - Detalhamento dos requisitos funcionais do jogo


Funcionalidade Estratégia do Teste Critério de Sucesso Critério de Falha Status Defeitos Encontrados

Jogabilidade Testar a O personagem O personagem não


movimentação do consegue se consegue se
personagem. movimentar para movimentar para
todas as direções. todas ou alguma
direção.

Jogabilidade Testar a mecânica O personagem O personagem não


de pulo do consegue pular. consegue pular.
personagem.

Jogabilidade Testar a interação O personagem O personagem não


do personagem com consegue interagir. consegue interagir.
os objetos e
pessoas.

Jogabilidade Testar os botões do O usuário consegue O usuário não


jogo. utilizar os botões, consegue utilizar os
botões.

Fonte: Do próprio autor, 2022

3.5 Requisitos Não Funcionais do site

Tabela 53 - Requisitos não funcionais do site


Código Descrição Tipo Classificação

RNF. 001 A interface do site deve Usabilidade Desejável


ser clara e intuitiva

Fonte: Do próprio autor, 2022

3.5.1 Requisitos Não Funcionais do Jogo

Tabela 54 - Requisitos não funcionais do jogo


Código Descrição Tipo Classificação

RNF. 002 A interface do jogo Jogabilidade Obrigatório


deve ser clara e
intuitiva.

RNF. 003 As missões devem ser Jogabilidade Desejável


fáceis de serem
entendidas.

Fonte: Do próprio autor, 2022


90

3.6 Fluxograma

3.6.1 Fluxograma Front-End


Figura 20 - Fluxograma front-end

Fonte: Do próprio autor, 2022


91

3.7 Diagrama De Caso De Uso

3.7.1 Diagrama de Caso de Uso do Site


Figura 21 - Diagrama de caso de uso

Fonte: Do próprio autor, 2022

3.7.2 Diagrama de Caso de Uso do Jogo

Figura 22 - Diagrama de caso de uso do jogo

Fonte: Do próprio autor, 2022


92

3.8 Dicionário De Dados

Tabela 55 - Dicionário de dados


Atributo Classe Domínio Descrição

“Save” Simples Binário Arquivo de


salvamento do
progresso do jogo

Do próprio autor, 2022

3.9 Diagrama de Classe

Figura 23 - Diagrama de Classe

Fonte: Do próprio autor, 2022

3.10 Cronograma De Atividades

Tabela 56 - Cronograma de atividades

Fonte: Do próprio autor, 2022


93

3.11.1 Gráfico de Gantt

Gráfico 15 - Gráfico de Gantt

Fonte: Do próprio autor, 2022

3.11.2 Gráfico de Pert

Gráfico 16 - Gráfico de Pert

Fonte: Do próprio autor, 2022


94

4. DESENVOLVIMENTO

4.1 Desenvolvimento Do Site

4.1.1 Desenvolvimento JS

//Cria uma constante cuja função é selecionar a classe indicada entre os parênteses

const menu = document.querySelector('.header .nav-bar .nav-list .menu');

//Cria uma constante cuja função é selecionar a classe indicada entre os parênteses

const mobile_menu = document.querySelector('.header .nav-bar .nav-list ul');

//Cria uma constante cuja função é selecionar a classe indicada entre os parênteses

const menu_item = document.querySelectorAll('.header .nav-bar .nav-list ul li a');

//Cria uma constante cuja função é selecionar a classe indicada entre os parênteses

const header = document.querySelector('.header.container');

//Cria uma função que é executada quando ocorre um "click"

menu.addEventListener('click', () => {

//Quando essa função é executada o "menu.classList" é alternado para o estado ativo

menu.classList.toggle('active');

//Quando essa função é executada o "mobile_menu.classList" é alternado para o


estado ativo

mobile_menu.classList.toggle('active');

});

//Cria uma função que é executado quando ocorre uma rolagem

document.addEventListener('scroll', () => {

//Cria uma variável que leva em conta a posição Y da janela

var scroll_position = window.scrollY;


95

//Cria uma estrutura que define que quando o valor da variável scroll_position for
maior que 250, a "header" passará a ter a cor #222222, caso o contrário sua cor é
transparente.

if (scroll_position > 250) {

//Torna a "header" cinza

header.style.backgroundColor = '#222222';

} else {

//Torna a "header" transparente

header.style.backgroundColor = 'transparent';

});

//Cria uma função que seleciona todos os itens do menu

menu_item.forEach((item) => {

//Cria uma função que é executada quando ocorre um "click"

item.addEventListener('click', () => {

//Quando essa função é executada o "menu.classList" é alternado para o


estado ativo

menu.classList.toggle('active');

//Quando essa função é executada o "mobile_menu.classList" é alternado para o


estado ativo

mobile_menu.classList.toggle('active');

});

});
96

4.1.2 Desenvolvimento do HTML

//Define o documento como um HTML

<!DOCTYPE html>

//Define a linguagem do documento como inglÊs

<html lang="en">

//Abre a divisão chamada de "head"

<head>

//Permite caracteres especiais UTF-8

<meta charset="UTF-8">

//Define a região de visualização padrão do documento

<meta name="viewport" content="width=device-width, initial-scale=1.0">

//Referencia o arquivo de estilização do documento

<link rel="stylesheet" href="style.css">

//Cria um título para a aba do documento

<title>BENEDITO: RUMO AO BAILE</title>

//Referencia o ícone da aba para tal resolução

<link rel="icon" type="image/png" sizes="16x16" href="img/favicons/favicon-16x16.png">

//Referencia o ícone da aba para tal resolução

<link rel="icon" type="image/png" sizes="32x32" href="img/favicons/favicon-32x32.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="57x57" href="img/favicons/apple-touch-icon-


57x57.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="60x60" href="img/favicons/apple-touch-icon-


60x60.png">

//Referencia o ícone da aba para tal resolução


97

<link rel="apple-touch-icon" sizes="72x72" href="img/favicons/apple-touch-icon-


72x72.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="76x76" href="img/favicons/apple-touch-icon-


76x76.png">

//Referencia o ícone da aba para tal resolução

<link rel="icon" type="image/png" sizes="96x96" href="img/favicons/apple-touch-icon-


96x96.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="114x114" href="img/favicons/apple-touch-icon-


114x114.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="120x120" href="img/favicons/apple-touch-icon-


120x120.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="144x144" href="img/favicons/apple-touch-icon-


144x144.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="152x152" href="img/favicons/apple-touch-icon-


152x152.png">

//Referencia o ícone da aba para tal resolução

<link rel="apple-touch-icon" sizes="180x180" href="img/favicons/apple-touch-icon-


180x180.png">

//Referencia o ícone da aba para tal resolução

<link rel="icon" type="image/png" sizes="192x192" href="img/favicons/android-icon-


192x192.png">

//Encerra a divisão "head"

</head>

//Cria a divisão "body"


98

<body>

//Cria a seção com o id "header"

<section id="header">

//Cria a divisão com o nome de "header container"

<div class="header container">

//Cria a divisão com o nome de "nav-bar"

<div class="nav-bar">

//Cria a divisão com o nome de "brand"

<div class="brand">

//Cria uma referência clicável que direciona para a tag "#hero"

<a href="#hero">

//Cria um título para ser inserido na página

<h1><span>Benedito:</span> rumo ao baile</h1>

//Fecha a referencia

</a>

//Fecha a divisão com nome "brand"

</div>

/Cria a divisão com nome "nav-list"

<div class="nav-list">

//Cria a divisão com nome "menu"

<div class="menu">

//Cria a divisão com o nome "bar"

<div class="bar">

//Fecha a divisão com nome "bar"

</div>

//Fecha a divisão com o nome "menu"

</div>

//Cria uma lista de itens


99

<ul>

//Cria um item com a tag "#hero" e que é clicável com a palavra "Home"

<li><a href="#hero" data-after="Home">Home</a></li>

//Cria um item com a tag "#services" e que é clicável com a palavra "Personagens"

<li><a href="#services" data-after="Service">Personagens</a></li>

//Cria um item com a tag "#projects" e que é clicável com a palavra "Devs"

<li><a href="#projects" data-after="Projects">Devs</a></li>

//Cria um item com a tag "#about" e que é clicável com a frase "Sobre o Jogo"

<li><a href="#about" data-after="About">Sobre o Jogo</a></li>

//Cria um item com a tag "#contact" e que é clicável com a palavra "Contato"

<li><a href="#contact" data-after="Contact">Contato</a></li>

//Fecha a lista

</ul>

//Fecha a divisão com nome "nav-list"

</div>

//Fecha a divisão com nome "nav-bar"

</div>

//Fecha a divisão com nome "header container"

</div>

//Fecha a seção com nome "Header"

</section>

//Cria a seção com id "hero"

<section id="hero">

//Cria a divisão com nome "hero container"

<div class="hero container">

//Cria uma divisão sem nome

<div>
100

//Cria um título

<h1>Embarque na jornada de <span></span></h1>

//Cria uma imagem

<h1> <img src="img/title.png" alt="titulo"> <span></span></h1>

//Cria um título

<h1>nosso jogo de plataforma<span></span></h1>

//Cria um botão clicável que resulta no donwload de um arquivo

<a href="TESTE.rar" download type="button" class="cta">Baixar</a>

//Fecha a divisão sem nome

</div>

//Fecha a divisão "hero container"

</div>

//Fecha a seção "hero"

</section>

4.1.3 Desenvolvimento do CSS

/* Importa uma fonte do Google*/

@import 'https://fonts.googleapis.com/css?family=Montserrat:300, 400,


700&display=swap';

*{

/* Define padding com valor 0*/

padding: 0;

/* Define margem com valor 0*/

margin: 0;

/* Define box-sizing como border-box*/

box-sizing: border-box;
101

/* Referência a tag HTML*/

html {

/* Define o tamanho da fonte como 10 pixels*/

font-size: 10px;

/* Define a fonte como Montserrat no modo sans-serif*/

font-family: 'Montserrat', sans-serif;

/* Define o comportamento da rolagem como suave*/

scroll-behavior: smooth;

/* Define a cor do fundo como #101010*/

background-color: #101010;

/* Referência a tag "a"*/

a{

/* Define a decoração do texto como nenhuma*/

text-decoration: none;

/* Referência a classe container*/

.container {

/* Define a altura mínima da página no valor 100vh*/

min-height: 100vh;

/* Define a largura da página em 100% */

width: 100%;

/* Define o display como flex*/

display: flex;
102

/* Define os alinhamentos dos itens como centralizados*/

align-items: center;

/* Define a justificação do conteúdo como centralizado*/

justify-content: center;

/* Referência a tag "img"*/

img {

/* Define a altura em 100%*/

height: 100%;

/* Define a largura em 100%*/

width: 100%;

/* Define a expansão do objeto como cover*/

object-fit: cover;

/* Referência a tag "p"*/

p{

/* Define a cor como branca*/

color: white;

/* Define o tamanho da fonte como 1.4rem*/

font-size: 1.4rem;

/* Define o valor da margem de cima como 5 pixels*/

margin-top: 5px;

/* Define a line-height como 2.5rem*/

line-height: 2.5rem;

/* Define a font-weight como 300*/


103

font-weight: 300;

/* Define o espaçamento da letra como 0.05rem*/

letter-spacing: 0.05rem;

/*Referência a classe "section-title"*/

.section-title {

/* Define o tamanho da font como 3rem*/

font-size: 3rem;

/* Define a font-weight como 300*/

font-weight: 300;

/* Define a cor como branca*/

color: white;

/* Define a margem de baixa como 10 pixels*/

margin-bottom: 10px;

/* Define o text-transform como maiúsculo*/

text-transform: uppercase;

/* Define o espaçamento da letra como 0.2rem*/

letter-spacing: 0.2rem;

/* Define o alinhamento do texto como centralizado*/

text-align: center;

/* Referência a classe "section-title span*/

.section-title span {

/* Define a cor como #5bf900*/


104

color: #5bf900;

/* Referência a classe "cta"*/

.cta {

/* Define o display como inline-block*/

display: inline-block;

/* Define o padding com os valores 10 pixels e 30 pixels*/

padding: 10px 30px;

/* Define a cor como branca*/

color: white;

/* Define o fundo com a cor transparente*/

background-color: transparent;

/* Define a borda como sólida, com tamanho 2 pixels e cor #5bf900*/

border: 2px solid #5bf900;

/* Define o tamanho da fonte como 2rem*/

font-size: 2rem;

/* Define o text-transform como maiúisculo*/

text-transform: uppercase;

/* Define o espaçamento da letra como 0.1rem*/

letter-spacing: 0.1rem;

/* Define a margem de cima como 30 pixels*/

margin-top: 30px;

/* Define uma transição suave com 0.3 segundos de duração*/

transition: 0.3s ease;

/* Define as propriedades da transição como background-color e color*/


105

transition-property: background-color, color;

4.1.4 Desenvolvimento do PHP

//Identifica o index.html para o heroku “hostear”.

<?php header( 'Location: /index.html' ) ; ?>

4.2 Desenvolvimento Do Jogo

4.2.1 Desenvolvimento do Movimento do Jogador

4.2.1.1 Movimento Para A Esquerda

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de Herança

public class Left : MonoBehaviour

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

{
106

//se o objeto de colisão for as paredes do cenário

if (other.gameObject.tag == "Paredes")

//desativa a possibilidade de movimento para a direção esquerda

Movimento2.left = true;

//identifica se não existe colisão

private void OnTriggerExit2D(Collider2D other)

//se o objeto de colisão for as paredes do cenário

if (other.gameObject.tag == "Paredes")

//ativa a possibilidade de movimento para a direção esquerda

Movimento2.left = false;

4.2.1.2 Movimento Para A Direita

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]
107

//cria classe de herança

public class Right : MonoBehaviour

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Paredes")

//impede que o jogador continue se movendo pra direita

Movimento2.right = true;

//identifica se não existe colisão

private void OnTriggerExit2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Paredes")

//permite que o jogador se mova pra direita

Movimento2.right = false;

}
108

4.2.1.3 Direções, Animações, Pulo e Colisões Do Jogador

//adiciona as bibliotecas do unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class Movimento2 : MonoBehaviour

//declara váriavel global que define quando o jogador pode se movimentar ou não

public static bool estaticoGlobal = true;

//variaveis de direção

public static bool left = false;

public static bool right = false;

public bool esquerda;

public bool direita;

//Variaveis do audio

public AudioSource pulando;

//Variaveis referente a movimento

public Rigidbody2D rb;

public static float moveSpeed = 6.5f;


109

public float direction;

//Variaveis referente a direção que o personagem se move

private Vector3 fcRight;

private Vector3 fcLeft;

public Transform player;

public Transform player2;

//variaveis referente a animação de movimento

public Animator animacao;

public Animator animacao2;

//Variaveis referente ao pulo,pulo duplo e força de repulsão ao enconstar nos inimigos

public bool chaoTrue;

public Transform detectarOChao;

public LayerMask defineOQueSeriaChao;

//variavel que define o tamanho do detector

public float tamanhoCirculo;

//quantidade de pulos extras

public int pulosExtras = 1;

public static bool podePular = true;

public static bool colidiu = false;

public static bool bGround;

//força de repulsão

public float bounceforce;

//invoca o objeto no primeiro momento


110

void Start()

//Definindo valores de direção

left = false;

right = false;

fcRight = transform.localScale;

fcLeft = transform.localScale;

fcRight.x = fcRight.x * -1;

//reconhece o componente utilizado

rb = GetComponent<Rigidbody2D>();

//invoca o objeto constantemente

void Update()

//codigo para aplicar o movimento de acordo com os botões

direction = Input.GetAxis("Horizontal");

// Movimento = 0 por causa do Game Over

if(PlayerHP.playerhp == 0)

rb.velocity = Vector2.zero;

//definindo colisões com base na direção

if (left == true)
111

colidiu = true;

if(right == true)

colidiu = true;

if(right == false && left == false)

colidiu = false;

//Se for possível se movimentar

if (estaticoGlobal == true)

rb.constraints = ~RigidbodyConstraints2D.FreezePosition;

//define se colidiu com inimigos e de qual direção

if (PlayerHP.tomoDano == true)

if (direita == true)

rb.AddForce(new Vector2(bounceforce * -1, 0), ForceMode2D.Impulse);

StartCoroutine("KnockBack");

if (esquerda == true)
112

rb.AddForce(new Vector2(bounceforce, 0), ForceMode2D.Impulse);

StartCoroutine("KnockBack");

if (chaoTrue)

if (Input.GetAxis("Horizontal") != 0)

//esta andando

animacao.SetBool("andando", true);

animacao.SetBool("parado", false);

animacao2.SetBool("andando", true);

animacao2.SetBool("parado", false);

else

//esta parado

animacao.SetBool("andando", false);

animacao.SetBool("parado", true);

animacao2.SetBool("andando", false);

animacao2.SetBool("parado", true);

}
113

chaoTrue = Physics2D.OverlapCircle(detectarOChao.position, tamanhoCirculo,


defineOQueSeriaChao);

//se ele apertar os botões de pulo uma força positiva é aplicada ao personagem no
eixo Y

if (podePular == true)

if (Input.GetButtonDown("Jump") && chaoTrue == true)

rb.velocity = Vector2.up * 12;

pulando.Play();

if (chaoTrue == true)

animacao.SetBool("pulando", false);

animacao2.SetBool("pulando", false);

if (chaoTrue == false)

animacao.SetBool("pulando", true);

animacao.SetBool("andando", false);

animacao2.SetBool("pulando", true);

animacao2.SetBool("andando", false);

//Define se os valores atendem os requisitos para que o player possa efetuar pulo
duplo
114

if (Input.GetButtonDown("Jump") && chaoTrue == false && pulosExtras > 0)

rb.velocity = Vector2.up * 12;

pulando.Play();

pulosExtras--;

if (chaoTrue)

pulosExtras = 1;

if(direction == -1 || direction == 1)

bGround = true;

else

bGround = false;

//Se ele se mover para a esquerda a imagem do personagem se vira para o lado
esquerdo

if (direction > 0)

player.localScale = fcRight;

player2.localScale = fcRight;

direita = true;
115

esquerda = false;

//Se ele se mover para a direita a imagem do personagem se vira para o lado direito

if (direction < 0)

player.localScale = fcLeft;

player2.localScale = fcLeft;

direita = false;

esquerda = true;

//ao colidir com inimigos

if (colidiu == false)

if (PlayerHP.tomoDano == false)

rb.velocity = new Vector2(direction * moveSpeed, rb.velocity.y);

if(colidiu == true)

if(right == true)

if(direction < 0)

rb.velocity = new Vector2(direction * moveSpeed, rb.velocity.y);


116

if (left == true)

if (direction > 0)

rb.velocity = new Vector2(direction * moveSpeed, rb.velocity.y);

//Impede o movimento em casos específicos

if (estaticoGlobal == false)

if (PlayerHP.playerhp != 0)

rb.constraints = RigidbodyConstraints2D.FreezePositionX;

animacao.SetBool("andando", false);

animacao.SetBool("parado", true);

animacao2.SetBool("andando", false);

animacao2.SetBool("parado", true);

//Impulso ao colidir com inimigos


117

IEnumerator KnockBack()

yield return new WaitForSeconds(0.1f);

PlayerHP.tomoDano = false;

4.2.2 Desenvolvimento da Mecânica de Vida

4.2.2.1 Quantidade De Vida Do Jogador

//adicionando bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class PlayerHP : MonoBehaviour

//componentes de som

public AudioSource somTomouDano;

public AudioSource marmitaSom;

public AudioSource porta;

//variaveis para o game over

public AudioSource somGmOver;


118

//diferencia sons que devem ser ativados

public int diferenciaSonsGmOver;

//Tela de Game Over

public GameObject gmOver;

//define quando é game over

private bool AtivaGmOver;

//objetos da cena

public GameObject cenarioSons;

public GameObject personagemSons;

//define se recuperou a marmita

public static bool recuperouMarmita;

//texto que deve ser ativado ao receber dano

public GameObject tomouDanoText;

//animação do jogador ao perder a marmita

public Animator marmita;

//variavel com acesso global que define a vida do jogador

public static int playerhp;

//variavel local para vizualisação dos valores pela interface do Unity

public int playerHp;

//variavel que define a vida atual

public int hpAtual;

//variavel de acesso global que define quando o personagem recebe dano

public static bool tomoDano = false;

//componente visual do personagem

public SpriteRenderer sprite;


119

//componente de fisica do Unity

public Rigidbody2D theRB2D;

//componente de fisica de colisão do Unity

public CapsuleCollider2D player;

//objeto da cena

public GameObject damageEnemy;

//animação do jogador

private Animator jogador;

//componente de fisica de colisão do Unity

public CapsuleCollider2D playerColisor;

//objeto da cena (tela de transição)

public GameObject transicao;

//variavel que identifica quando o personagem perde a marmita

public bool perdeu = false;

//invoca o metodo apenas no primeiro instante

void Start()

//define os valores das variaveis

playerhp = 2;

playerhp = playerHp;

jogador = GetComponent<Animator>();

player = GetComponent<CapsuleCollider2D>();

void Update()

{
120

if (recuperouMarmita == true)

marmitaSom.Play();

recuperouMarmita = false;

hpAtual = playerhp;

if(playerhp == 2)

FollowCamera.stpCamera = false;

marmita.SetBool("perdeu", false);

else if (playerhp == 1)

marmita.SetBool("perdeu", true);

else

if (perdeu == false)

FollowCamera.stpCamera = true;

StartCoroutine("GameOver");

perdeu = true;

}
121

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "MorteQueda")

if (diferenciaSonsGmOver == 0)

somGmOver.Play();

diferenciaSonsGmOver++;

if (other.gameObject.tag == "Enemy")

playerhp--;

tomouDanoText.SetActive(true);

somTomouDano.Play();

TextoFlutuante.textAtiva = true;

if (playerhp == 1)

SetaOff.pegou = false;

jogador.SetBool("dano", true);

StartCoroutine("DamagePlayer");

player.enabled = false;

damageEnemy.SetActive(false);

tomoDano = true;

if (playerhp == 0)
122

if (diferenciaSonsGmOver == 0)

somGmOver.Play();

diferenciaSonsGmOver++;

player.enabled = false;

damageEnemy.SetActive(false);

tomoDano = true;

jogador.SetTrigger("morto");

Movimento2.estaticoGlobal = false;

theRB2D.constraints = RigidbodyConstraints2D.FreezePositionY;

playerColisor.enabled = false;

IEnumerator DamagePlayer()

sprite.color = new Color(1f, 0.2f, 0.2f, 1f);

yield return new WaitForSeconds(0.2f);

sprite.color = new Color(1f, 1f, 1f, 1f);

yield return new WaitForSeconds(0.25f);

jogador.SetBool("dano", false);

damageEnemy.SetActive(true);
123

for (int i = 0; i < 7; i++)

sprite.enabled = false;

yield return new WaitForSeconds(0.15f);

sprite.enabled = true;

yield return new WaitForSeconds(0.15f);

player.enabled = true;

IEnumerator GameOver()

porta.enabled = false;

transicao.SetActive(true);

yield return new WaitForSeconds(1);

cenarioSons.SetActive(false);

personagemSons.SetActive(false);

gmOver.SetActive(true);

4.2.2.2 Morte Do Jogador Por Queda

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;
124

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class MorteQueda : MonoBehaviour

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//define a vida do jogador como zero

PlayerHP.playerhp = 0;

4.2.2.3 Mensagens Que Indicam Dano Do Jogador

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Cria classe de herança

public class TextoFlutuante : MonoBehaviour

//declara váriaveis e objetos

public GameObject text;


125

public static bool textAtiva;

//invoca o metodo constantemente

void Update()

//se o componente estiver ativado

if (textAtiva == true)

//invoca rotina

StartCoroutine("DropText");

//rotina

IEnumerator DropText()

//intervalo de tempo

yield return new WaitForSeconds(0.47f);

//desativa o componente

text.SetActive(false);

//declara que o componente foi desativado

textAtiva = false;

}
126

4.2.3 Desenvolvimento Da Mecânica De Interação Do Jogador

4.2.4.1 Botão De Interagir

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona a biblioteca do Unity para gerenciamento de eventos

using UnityEngine.Events;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class BotaoInterage : MonoBehaviour

//serializa variavel na interface do programa

[SerializeField]

//variavel que armazena o script "JogadorInterage" para utilizar as variaveis presentes no


código

private JogadorInterage _jogadorInterage;

[SerializeField]

//variavel que armazena o(s) evento(s)

private UnityEvent _botaoApertado;

//variavel que armazena o componente visual do objeto

public SpriteRenderer _destacaIcone;


127

//variavel que define quando o(s) evento(s) devem ocorrer

private bool _podeExecutar;

//variavel de acesso global que define quando o personagem pode se mover

public static bool onOff;

//Invoca o metodo constantemente

void Update()

//se for permitido acontecer a ação

if (_podeExecutar)

//se o jogador estiver realizando a ação

if(_jogadorInterage.EstaInteragindo)

//se o controle de movimento estiver ativo

if (onOff == false)

//desativa controle de movimento do Jogador

Movimento2.estaticoGlobal = false;

//invoca evento(s)

_botaoApertado.Invoke();

//declara que o movimento está inativo

onOff = true;

//se o controle de movimento estiver inativo

else

{
128

//ativa controle de movimento do Jogador

Movimento2.estaticoGlobal = true;

//invoca evento(s)

_botaoApertado.Invoke();

//declara que o movimento está ativo

onOff = false;

private void OnTriggerEnter2D(Collider2D collision)

_podeExecutar = true;

_destacaIcone.enabled = true;

private void OnTriggerExit2D(Collider2D collision)

_podeExecutar = false;

_destacaIcone.enabled = false;

4.2.3.2 Interações Do Jogador

//adicionando bibliotecas próprias do Unity

using System.Collections;
129

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class JogadorInterage : MonoBehaviour

//variavel que define intervalo em entre uma interação e outra

public static bool intervaloInteração = false;

//variavel de acesso global que define quando uma ação pode acontecer

public static bool interacao;

//variavel que armazena componente de som

public AudioSource porta;

//variavel que define quando a interação está ocorrendo

public bool EstaInteragindo { get; set; }

//identifica se existe colisão com um campo especifico

private void OnTriggerEnter2D(Collider2D other)

//se o obejto de colisão for um objeto interagível

if (other.gameObject.tag == "Interagiveis")

//define que a interação pode acontecer

interacao = true;
130

//identifica se não existe colisão

private void OnTriggerExit2D(Collider2D other)

//se o obejto de colisão for um objeto interagível

if (other.gameObject.tag == "Interagiveis")

//define que a interação não pode acontecer

interacao = false;

//Invoca o metodo constantemente

void Update()

//se o intervalo entre cada interação não estiver mais ativo

if (intervaloInteração == false)

//se for permitido realizar a ação de interação

if (interacao == true)

//se o Jogador estiver realizando a ação de interação

if (Input.GetButtonDown("Interage"))

//está interagindo
131

EstaInteragindo = true;

//se o Jogador não estiver realizando a ação de interação

else

//não está interagindo

EstaInteragindo = false;

4.2.3.3 Gatilho de Interação

//adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona a biblioteca do Unity para gerenciamento de eventos

using UnityEngine.Events;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class TriggerInteracao : MonoBehaviour

//serializa a variavel na interface do Unity


132

[SerializeField]

//variavel que armazena um evento

private UnityEvent chamaCena;

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//invoca o evento armazenado na variavel

chamaCena.Invoke();

//impede o movimento do jogador

Movimento2.estaticoGlobal = false;

4.2.3.4 Interação Que Ativa O Diálogo

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança


133

public class AtivaDialogo : MonoBehaviour

//declara variavel de acesso global do tipo booleana e a define como falsa

public static bool ativaDlg = false;

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o Jogador

if (other.gameObject.tag == "Player")

//altera valor da váriavel para verdadeira

ativaDlg = true;

//identifica se não existe colisão

private void OnTriggerExit2D(Collider2D other)

//se o objeto de colisão for o Jogador

if (other.gameObject.tag == "Player")

//altera o valor da váriavel para verdadeira

ativaDlg = false;

}
134

4.2.3.5 Interação Que Ativa O Diálogo Da Dona Cleusa

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class AtivaDonaCleusa : MonoBehaviour

//variavel que armazena o script "DialogueDonaCleusa" para utilizar as váriaveis e


metódos presentes no código

public DialogueDonaCleusa _jogador;

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o Jogador

if (other.gameObject.tag == "Player")

//ativa componente

_jogador.enabled = true;

//identifica se não existe colisão


135

public void OnTriggerExit2D(Collider2D other)

//se o objeto de colisão for o Jogador

if (other.gameObject.tag == "Player")

//desativa componente

_jogador.enabled = false;

4.2.3.6 Ativa Diálogo da Renatinha

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class Renata : MonoBehaviour

//Declara variaveis e objetos

public Animator renataAnim;

public Transform renataPos;

public GameObject renataObj;

public DialogoNPC dlg;

//invoca o metodo constantemente


136

void Update()

//se a quantidade de linhas lidas for igual a 4

if(dlg.lineIndex == 4)

//ativa animação

renataAnim.SetBool("DialogEnd", true);

//altera posição

renataPos.Translate(Vector2.left * 5 * Time.deltaTime);

//invoca rotina

StartCoroutine("DestroyR");

//rotina

IEnumerator DestroyR()

//intervalo de tempo

yield return new WaitForSeconds(10);

//destroi o objeto

Destroy(renataObj);

4.2.3.7 Ativa Diálogo Com Os Nóias

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;
137

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de Herança

public class JVPos : MonoBehaviour

//declara variaveis e objetos;

public Transform npc;

public GameObject npc1;

public GameObject npc2;

//se identificar contato com o Jogador

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "Player")

//altera escala do objeto

npc.localScale = new Vector3 (-1,1,1);

//desativa objeto

npc1.SetActive(false);

//ativa objeto

npc2.SetActive(true);

}
138

4.2.3.8 Ativa Interação Com o Cachorro

////adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Cria classe de herança

public class Cachorro : MonoBehaviour

//declara componentes

public AudioSource dog;

public DialogoNPC dlg;

//invoca o metódo constantemente

void Update()

//se a quantidade de linhas lidas for igual a 1

if (dlg.lineIndex == 1)

dog.enabled = true;

//ativa o som do cachorro

//se a quantidade de linhas lidar for igual a 2

if(dlg.lineIndex == 2)

//Invoca rotina

StartCoroutine("Stop");
139

//rotina

IEnumerator Stop()

//intervalo de tempo

yield return new WaitForSeconds(2);

//desativa som do cachorro

dog.enabled = false;

4.2.4 Desenvolvimento de Interações do Jogo

4.2.4.1 Interações De Diálogo

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona biblioteca de edição de texto

using TMPro;

//adiciona biblioteca de gerenciamento de cenas

using UnityEngine.SceneManagement;

//cria classe de herança

public class Dialogue : MonoBehaviour

{
140

//declara variaveis

public AudioSource audioFala;

public AudioListener camera;

public string proximaFase;

//variaveis se o dialogo for do objetivo

[SerializeField]

private JogadorInterage _jogadorInterage;

//variaveis se for um dialogo normal

[SerializeField, TextArea(2, 6)] private string[] dialogueLines;

[SerializeField] private GameObject dialoguePanel;

[SerializeField] private TMP_Text dialogueText;

public GameObject transicao;

public GameObject borda;

public bool fimDialog = false;

private float typingTime = 0.03f;

private bool dialogueStart;

public int lineIndex;

public Animator cameraZoom;

//declara propria classe

public Dialogue dialog;

//invoca o metodo constantemente

public void Update()


141

//Se o dialogo for desativado

if(AtivaDialogo.ativaDlg == false)

//zera a quantidade de linhas lidas

lineIndex = 0;

//para o audio de fala

audioFala.Stop();

//se o dialogo termina

if (fimDialog == true)

//declara variaveis para seus valores iniciais

dialog.enabled = false;

audioFala.enabled = false;

borda.SetActive(false);

Movimento2.podePular = true;

Movimento2.moveSpeed = 6.5f;

cameraZoom.SetBool("IniciaDialog", false);

//se o dialogo for de interação com um objetivo

if (CompletaObjetivo.tipoDialog == true)

//altera variavel

JogadorInterage.interacao = false;

//Invoca rotina

StartCoroutine("ProximaFase");
142

//Se a interação acontecer

if (Input.GetButtonDown("Interage"))

//se o game não for pausado

if (Pause.isGamePaused == false)

//se o dialogo não tiver chegado ao fim

if (fimDialog == false)

//se a fala tiver chegado ao fim

if (dialogueText.text == dialogueLines[lineIndex])

//invoca rotina

NextDialogueLine();

//se a fala não tiver chegado ao fim

else

//para todas as rotinas

StopAllCoroutines();

//insere instantaneamente todo o texto da fala especifica

dialogueText.text = dialogueLines[lineIndex];

//para o audio de fala

audioFala.Stop();

}
143

//se o dialogo tiver chegado ao fim

else

//para todas as rotinas

StopAllCoroutines();

//invoca rotina

NextDialogueLine();

// Metodo de dialogo

public void Dialogo()

//Se o dialogo iniciar

if (!dialogueStart)

//Se ele ainda estiver ativo

if (fimDialog == false)

//altera variaveis

Movimento2.podePular = false;

Movimento2.moveSpeed = 0;

borda.SetActive(false);

dialogueStart = true;

dialoguePanel.SetActive(true);
144

lineIndex = 0;

StartCoroutine("ShowLine");

cameraZoom.SetBool("IniciaDialog", true);

//Metodo para prosseguir para próxima linha

private void NextDialogueLine()

//se o dialog ainda estiver ativo

if (fimDialog == false)

//Enumera quantidades de linhas lidas

lineIndex++;

//se a quantidade de linhas lidas for menor que a quantidade total de linhas

if (lineIndex < dialogueLines.Length)

//invoca rotina

StartCoroutine("ShowLine");

//se a a quantidade de linhas lidas for igual que a quantidade total de linhas

else

//altera variaveis

dialogueStart = false;

dialoguePanel.SetActive(false);

borda.SetActive(true);
145

fimDialog = true;

transicao.SetActive(true);

//Rotina

private IEnumerator ShowLine()

//intervalo de tempo entre cada algarismo inserido

dialogueText.text = string.Empty;

audioFala.Play();

foreach (char ch in dialogueLines[lineIndex])

dialogueText.text += ch;

yield return new WaitForSeconds(typingTime);

//para o audio

audioFala.Stop();

//Rotina

private IEnumerator ProximaFase()

//passa para a próxima fase apos um intervalo de tempo

transicao.SetActive(true);

camera.enabled = false;

yield return new WaitForSeconds(0.75f);

CompletaObjetivo.tipoDialog = false;
146

SceneManager.LoadScene(proximaFase);

4.2.5 Mecânica De Transição De Ambientes

4.2.5.1 Interação De Entrar E Sair Dos Ambientes

////adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Cria classe de herança

public class Entrarsair : MonoBehaviour

//declara objetos de cenarios

public GameObject transicaoAtiva;

public GameObject cenario1;

public GameObject fundoCenarioAtiva;

public GameObject cenario2;

//invoca esse metódo ao entrar em um novo cenário

public void Ativa()

//Se o jogador tiver interagido (como, por exemplo, uma porta)


147

if (JogadorInterage._podeAcao == true)

//invoca Rotina

StartCoroutine("Sair");

//Invoca esse metodo ao sair de um cenario

public void Desativa()

//se o jogador tiver interagido

if (JogadorInterage._podeAcao == true)

//invoca rotina

StartCoroutine("Entrar");

//Rotina

IEnumerator Sair()

//Desativa o cenário antigo

//ativa a transição

transicaoAtiva.SetActive(true);

JogadorInterage._podeAcao = false;

yield return new WaitForSeconds(0.6f);

fundoCenarioAtiva.SetActive(false);
148

cenario1.SetActive(true);

cenario2.SetActive(false);

//ativa cenário novo

//Rotina

IEnumerator Entrar()

////Desativa o cenário antigo

//ativa a transição

transicaoAtiva.SetActive(true);

JogadorInterage._podeAcao = false;

yield return new WaitForSeconds(0.6f);

fundoCenarioAtiva.SetActive(true);

cenario1.SetActive(false);

cenario2.SetActive(true);

//ativa cenário novo

4.2.5.2 Desativa As Transições De Ambiente

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;
149

using UnityEngine;

//cria Classe de herança

public class Desativatransicao : MonoBehaviour

//declara variaveis e objetos

public GameObject transicao;

public static bool prxTrue;

//invoca o metodo constantemente

void Update()

//invoca rotina

StartCoroutine("DesativaTransicao");

//rotina

IEnumerator DesativaTransicao()

//altera variavel

prxTrue = true;

//desativa movimento do Jogador

Movimento2.estaticoGlobal = false;

//intervalo de tempo

yield return new WaitForSeconds(1.5f);

//altera variaveis

prxTrue = false;

JogadorInterage._podeAcao = true;
150

//desativa transição de cenarios

transicao.SetActive(false);

//ativa movimento do Jogador

Movimento2.estaticoGlobal = true;

4.2.6 Mecânica De Inimigos E Desafios

4.2.6.1 Ativa Os Inimigos

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class AtivaInimigos : MonoBehaviour

//declara variaveis e objetos

public GameObject ativaObjetivo;

public bool ativou = false;

public GameObject inimigos;

//se identificar colisão

private void OnTriggerEnter2D(Collider2D other)


151

// se os inimigos estiverem desativados

if (ativou == false) {

//se o objeto que passar pelo campo for o jogador

if (other.gameObject.tag == "Player")

// ativa os inimigos

ativaObjetivo.SetActive(true);

inimigos.SetActive(true);

ativou = true;

4.2.6.2 Inimigos

////adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class Enemy : MonoBehaviour

//declara variaveis e objetos

public float speed;

public float timeWalk;


152

public bool EnemyKill = false;

private Vector3 fcRight;

private Vector3 fcLeft;

private bool movingRight = true;

//invoca o metodo no primeiro instante em o objeto é ativado

void Start()

//define valores de variaveis

fcRight = transform.localScale;

fcLeft = transform.localScale;

fcRight.x = fcRight.x * -1;

//invoca o metodo constantemente

void FixedUpdate()

//se o inimigo não for eliminado

if (EnemyKill == false)

//Se move pra direita utilizando uma rotina

if (movingRight)

//define a direção

transform.localScale = fcRight;
153

//invoca a rotina

StartCoroutine("MovimentLeft");

//Se move pra esquerda utilizando uma rotina

if (movingRight == false)

//Movimento

transform.Translate(Vector2.right * speed * Time.deltaTime);

//define a direção

transform.localScale = fcLeft;

//invoca a rotina

StartCoroutine("MovimentRight");

//movimento para a esquerda

IEnumerator MovimentLeft()

//Movimento

transform.Translate (Vector2.left * speed * Time.deltaTime);

//intervalo de tempo em que o inimigo ira alterar a sua direção

yield return new WaitForSeconds(timeWalk);

//variavel que define se a direção foi alterada

movingRight = false;

//movimento para a direita

IEnumerator MovimentRight()
154

yield return new WaitForSeconds(timeWalk);

movingRight = true;

4.2.6.3 Vida Dos Inimigos

//adiciona bibliotecas proprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class EnemyHP : MonoBehaviour

//declara variaveis

public int enemyHP;

private int currentHP;

public float timeDeath;

//invoca o metodo apenas no primeiro instante apos o objeto ser ativado

void Start()

//vida do inimigo é igual a vida atual

currentHP = enemyHP;

}
155

//invoca o metodo constantemente

void Update()

//se a vida for igual a zero

if (currentHP <= 0)

//invoca rotina "Kill"

StartCoroutine("Kill");

//metodo de dano ai inimigo

public void TakeDamage(int damage)

currentHP -= damage;

//Rotina "kill"

IEnumerator Kill()

//intervalo de tempo

yield return new WaitForSeconds(timeDeath);

//Destroi o objeto "Inimigo"

Destroy(transform.parent.gameObject);

}
156

4.2.6.4 Dano Dos Inimigos Ao Jogador

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class DamageEnemy : MonoBehaviour

//declara variaveis e objetos

private Movimento2 pulos;

public int damageToDeal;

public AudioSource eliminouInimigoSom;

public GameObject eliminouInimigoText;

public Rigidbody2D theRB2D;

public float bounceforce;

//se o Jogador colidir com inimigos

private void OnTriggerEnter2D(Collider2D other)

if(other.gameObject.tag == "HurtBox")

//zera a força de impulso pra não multiplicar com a força de repulsão


157

theRB2D.velocity = Vector2.up * 0;

//inicia uma rotina no código "eliminouInimigosSom"

eliminouInimigoSom.Play();

//ativa texto flutuante

TextoFlutuante.textAtiva = true;

//Ativa texto flutuante

eliminouInimigoText.SetActive(true);

//altera variavel de vida do inimigo

other.gameObject.GetComponent<EnemyHP>().TakeDamage(damageToDeal);

//aciona a força de repulsão

theRB2D.AddForce(transform.up * bounceforce, ForceMode2D.Impulse);

4.2.6.5 Plataforma

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de Herança

public class Plataforma : MonoBehaviour

{
158

//declara variavel

public bool colidiu;

//se indetificar contato com o Objeto "Plataforma"

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "plataforma")

//transforma o Personagem em um objeto filiado a plataforma

gameObject.transform.parent = other.transform;

//detecta contato

colidiu = true;

//se indetificar que não existe mais contato com o Objeto "Plataforma"

private void OnTriggerExit2D(Collider2D other)

if (other.gameObject.tag == "plataforma")

//Define o personagem como um Objeto independente

gameObject.transform.parent = null;

//detecta contato

colidiu = false;

}
159

4.2.6.6 Movimento Da Plataforma

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de Herança

public class PlataformaMovimento : MonoBehaviour

//declara variaveis

public float speed;

public float timeWalk;

public bool Plataforma = true;

private bool movingRight = true;

//invoca o metodo constantemente

void FixedUpdate()

//Se o objeto estiver ativado

if (Plataforma)

//Movimento para direita

if (movingRight)

//invoca rotina
160

StartCoroutine("MovimentLeft");

//Movimento para a esquerda

if (movingRight == false)

//altera direção

transform.Translate(Vector2.right * speed * Time.deltaTime);

//invoca rotina

StartCoroutine("MovimentRight");

//Rotina de movimento na direção esquerda

IEnumerator MovimentLeft()

//altera direção

transform.Translate (Vector2.left * speed * Time.deltaTime);

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingRight = false;

//Rotina de movimento na direção direita

IEnumerator MovimentRight()

//intervalo de tempo
161

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingRight = true;

4.2.6.7 Movimento Da Plataforma No Eixo Y

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de Herança

public class PlataformaMovimentoY : MonoBehaviour

//declara variaveis

public float speed;

public float timeWalk;

public bool Plataforma;

private bool movingUp = true;

//invoca o metodo constantemente

void FixedUpdate()

//Se o objeto estiver ativado


162

if (Plataforma)

//Movimento para cima

if (movingUp)

//invoca rotina

StartCoroutine("Movimentup");

//Movimento para baixo

if (movingUp == false)

//altera direção

transform.Translate(Vector2.down * speed * Time.deltaTime);

//invoa rotina

StartCoroutine("Movimentdown");

//Rotina de movimento para cima

IEnumerator Movimentup()

//altera direção

transform.Translate (Vector2.up * speed * Time.deltaTime);

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingUp = false;
163

//Rotina de movimento para baixo

IEnumerator Movimentdown()

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingUp = true;

4.2.6.7 Movimentação Dos Inimigos No Eixo Y

//adiciona bibliotecas proprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class EnemyY : MonoBehaviour

//declara variaveis

public float speed;

public float timeWalk;

public bool EnemyKill = false;


164

private Vector3 fcTop;

private Vector3 fcDown;

private bool movingtop = true;

//invoca o metodo constantemente

void FixedUpdate()

//se o inimigo não for eliminado

if (EnemyKill == false)

//se o Inimigo estiver se movendo para cima

if (movingtop)

//invoca rotina

StartCoroutine("MovimentUp");

//se o inimigo estiver se movendo para baixo

if (movingtop == false)

//muda direção

transform.Translate(Vector2.down * speed * Time.deltaTime);

//invoca rotina

StartCoroutine("MovimentDown");

}
165

//rotina de movimento para cima

IEnumerator MovimentUp()

//direção

transform.Translate (Vector2.up * speed * Time.deltaTime);

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//define que deve se mover para baixo

movingtop = false;

//rotina de movimento para cima

IEnumerator MovimentDown()

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//define que deve se mover para cima

movingtop = true;

}
166

4.2.7 Desenvolvimento Dos Objetivos Do Jogo

4.2.7.1 Objetivos Entregues

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Adiciona a biblioteca para edição de texto

using TMPro;

//Cria classe de herança

public class ObjetivosEntregues : MonoBehaviour

//declara váriaveis e objetos

public TMP_Text objText;

public int numObjetivo;

//invoca o metodo constantemente

void Update()

//texto na interface da tela é igual o número de objetivos completos convertido em texto

objText.text = numObjetivo.ToString();

}
167

4.2.7.2 Objetivos Completos

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//Cria classe de Herança

public class CompletaObjetivo : MonoBehaviour

//serializa váriavies na interface do unity

[SerializeField]

//declara variaveis e componentes

private JogadorInterage _jogadorInterage;

public CapsuleCollider2D Objetivo;

public Dialogue dialog;

//variavel global que identifica o tipo de dialogo

public static bool tipoDialog = false;

//invoca o metodo apenas no primeiro instante

void Start()

//reconhece o componente previamente

Objetivo = GetComponent<CapsuleCollider2D>();

}
168

//identifica se existe colisão

private void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//define que o tipo de dialogo é um dialogo de objetivo

tipoDialog = true;

//ativa o componente

dialog.enabled = true;

4.2.7.3 Objetivo Final da Dona Cleusa

//adicionando bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona biblioteca de gerenciamente de cenas

using UnityEngine.SceneManagement;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class DonaCleusaFinal : MonoBehaviour


169

//variavel que armazena o nome da próxima cena

public string proximaFase;

//variaveis que armazena os objetos da cena

public GameObject donaCleusa;

public GameObject player;

//animação do jogador

public Animator plrAnim;

//animação da Dona Cleusa

public Animator DonaC;

//componente de dialogo presente no objeto

public DialogoNPC dlgDC;

//armazena quantidade de linhas

private int qtdLinhas;

//objetos da cena que funcionam como limites do cenário

public GameObject limiteCmr;

public GameObject limiteCmr1;

//componente de movimento do jogador

public Movimento2 mov;

//componente de audio

public AudioSource trilhaSonora;

//objeto da cena (tela de transição)

public GameObject transicao;

//componente de animação da camera

public Animator camera;

//invoca o metodo constantemente

void Update()
170

//quantidade de linhas igual a quantidade de linhas lidas

qtdLinhas = dlgDC.lineIndex;

//se a quantidade de linhas for igual a quatro

if(qtdLinhas == 4)

//aciona um movimento constante no jogador

player.transform.Translate(Vector2.left * 5f * Time.deltaTime);

//ativa animação da Dona Cleusa

DonaC.SetBool("saindo", true);

//ativa animação do jogador

plrAnim.SetBool("andando", true);

//desativa animação do jogador

plrAnim.SetBool("parado", false);

//ativa o campo que impede a camera de seguir o jogador

limiteCmr.SetActive(true);

//desativa o campo que impede que o jogador saia pra fora dos limites de visão da
camera

limiteCmr1.SetActive(false);

//desativa o controle de movimento do jogador sobre o personagem

mov.enabled = false;

//invoca uma rotina

StartCoroutine("ProximaFase");

//identifica se existe colisão

public void OnTriggerEnter2D(Collider2D other)

{
171

if (other.gameObject.tag == "Player")

camera.enabled = false;

donaCleusa.SetActive(true);

player.transform.localScale = new Vector3 (1, 1, 1);

trilhaSonora.enabled = false;

IEnumerator ProximaFase()

yield return new WaitForSeconds(1);

transicao.SetActive(true);

yield return new WaitForSeconds(2);

SceneManager.LoadScene(proximaFase);

4.2.8 Objetos Ou Pessoas Que Podem Sofrer Interação

4.2.8.1 Define Se O Jogador Já Interagiu Ou Não Com O Objeto

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;
172

//cria classe de herança

public class Interage : MonoBehaviour

//declara variaveis e objetos

public Animator _animator;

public AudioSource carta;

//invoca metodo

public void Ler()

//se a variavel for falsa

if(BotaoInterage.onOff == false)

//audio inicia

carta.Play();

//animação inicia

_animator.SetBool("pegou", true);

//se a variavel for verdadeira

if(BotaoInterage.onOff == true)

//animação para

_animator.SetBool("pegou", false);

}
173

4.2.8.2 Gatilho Para Uma Interação Acontecer

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona biblioteca para gerenciar eventos especificos

using UnityEngine.Events;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class ExitTrigger : MonoBehaviour

//declara variavel de animação

public Animator _animator;

//se indentificar colisão

private void OnTriggerExit2D(Collider2D collision)

//animação inicia

_animator.SetBool("pegou", true);

//Movimento do Jogador é desativado

Movimento2.estaticoGlobal = false;

}
174

4.2.8.3 Borda Que Sinaliza Se O Objeto Ou Personagem É Interativo

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class Icone : MonoBehaviour

//declara variaveis

private float speed = 0.75f;

private float timeWalk = 0.75f;

private Vector3 fcRight;

private Vector3 fcLeft;

private bool movingUp = true;

//invoca o metodo apenas no primeiro instante

void Start()

//define variaveis

fcRight = transform.localScale;

fcLeft = transform.localScale;

fcRight.x = fcRight.x * -1;

}
175

//Invoca o metodo constantemente

void Update()

//Se estiver se movendo para cima

if (movingUp)

//altera direção

transform.localScale = fcRight;

//invoca rotina

StartCoroutine("MovimentLeft");

//se estiver se movendo para baixo

if (movingUp == false)

//altera posição

transform.Translate(Vector2.up * speed * Time.deltaTime);

//altera direção

transform.localScale = fcLeft;

//invoca rotina

StartCoroutine("MovimentRight");

//rotina

IEnumerator MovimentLeft()

//altera posição

transform.Translate(Vector2.down * speed * Time.deltaTime);


176

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingUp = false;

//rotina

IEnumerator MovimentRight()

//intervalo de tempo

yield return new WaitForSeconds(timeWalk);

//altera variavel

movingUp = true;

4.2.9 Interações da Marmita

4.2.9.1 Interação De Queda Da Marmita

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class DropMarmita : MonoBehaviour


177

//declara objeto da cena que funciona como um icone pra destacar outro objeto

public GameObject borda;

//variavel de posição

public bool pos = false;

//declara o objeto marmita

public GameObject marmitaObj;

//variavel que define quando o objeto pode ser recuperado ou não

public bool podeRecuperar;

//componente de física do Unity

private Rigidbody2D marmitinha;

//variavel que armazena a força de impulso

private int impulso = 5;

//variavel que define quando existe colisão

public bool colidiu;

//invoca o metodo apenas no primeiro instante

void Start()

//define que o jogador pode recuperar o objeto

podeRecuperar = false;

//invoca rotina

StartCoroutine("RecMarmita");

//reconhece o componente do próprio objeto

marmitinha = GetComponent<Rigidbody2D>();

//adiciona força de impulsão ao objeto

marmitinha.AddForce(new Vector2(impulso, 2), ForceMode2D.Impulse);

}
178

//identifica se existe colisão

public void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//se o objeto puder ser recuperado

if (podeRecuperar == true)

//desativa o componente que indica a posição da marmita

SetaOff.pegou = true;

//define que a marmita não existe mais na cena

MarmitaPos.dropou = false;

//retorna a vida do jogador ao valor original

PlayerHP.playerhp = 2;

//destroi o objeto

DestroyObj();

//define que a marmita foi recuperada

PlayerHP.recuperouMarmita = true;

//se o objeto de colisão for uma plataforma

if (other.gameObject.tag == "plataforma")

//define que existe colisão

colidiu = true;
179

//ativa o componente que destaca do objeto

borda.SetActive(true);

//impede o movimento do objeto

marmitinha.constraints = RigidbodyConstraints2D.FreezePosition;

if (other.gameObject.tag == "chao")

borda.SetActive(true);

marmitinha.constraints = RigidbodyConstraints2D.FreezePosition;

colidiu = true;

if (other.gameObject.tag == "Paredes")

if (colidiu == false)

marmitinha.constraints = RigidbodyConstraints2D.FreezePositionX;

if (other.gameObject.tag == "MorteQueda")

RespawnMarmita.destroyerMarmita = true;

DestroyObj();

public void DestroyObj()


180

Destroy(marmitaObj);

public void OnTriggerExit2D(Collider2D other)

if (other.gameObject.tag == "chao")

marmitinha.constraints = ~RigidbodyConstraints2D.FreezePosition;

colidiu = false;

IEnumerator RecMarmita()

yield return new WaitForSeconds(1);

podeRecuperar = true;

4.2.9.2 Posição Da Marmita Quando Ela Está No Chão

//adiciona as bibliotecas da própria Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança


181

public class MarmitaPos : MonoBehaviour

//declara objetos e variaveis

public GameObject limiteMapa;

public GameObject marmita, spawnerMarmita;

public Transform player;

//variavel de acesso global que define quando o marmita é instanciada

public static bool dropou;

//invoca o metodo constantemente

void Update()

//define que a posição da marmita ao ser instanciada na cena será sempre igual a
posição do jogador

transform.position = Vector2.Lerp(transform.position, player.position, 1);

//se a vida do jogador for igual a um (indicando que recebeu dano)

if(PlayerHP.playerhp == 1)

//se a marmita já não tiver sido instanciada

if (dropou == false)

//instancia o objeto "marmita" na cena com base na posição do jogador

Instantiate(marmita, spawnerMarmita.transform.position,
this.gameObject.transform.rotation);

//declara que o objeto foi instanciado

dropou = true;

//ativa o componente na cena que impede que o jogador prossiga sem recuperar o
objeto
182

limiteMapa.SetActive(true);

4.2.9.3 Reposiciona A Marmita Se Ela Cair No Limbo

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Cria classe de herança

public class RespawnMarmita : MonoBehaviour

//declara váriaveis e objetos

public GameObject seta;

public GameObject marmita, spawnerMarmita;

public static bool destroyerMarmita;

//Invoca o metodo constantemente

void Update()

//se o objeto "marmita" for destruido por motivos exteriores (cair no limbo)

if (destroyerMarmita == true)

//Ativa componente de interface que indica a nova posição da marmita


183

seta.SetActive(true);

//instancia um novo objeto na posição declarada

Instantiate(marmita, spawnerMarmita.transform.position,
this.gameObject.transform.rotation);

//destroi o objeto anterior

destroyerMarmita = false;

4.2.9.4 Desliga As Setas Quando O Jogador Coleta A Marmita

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//Cria classe de herança

public class SetaOff : MonoBehaviour

//declara objetos e variaveis

public GameObject seta, parede;

public static bool pegou = true;

//invoca metodo constantemente

public void Update()


184

//se a marmita estiver ativa na cena com a possibilidade de recuperação

if(pegou == false)

//ativa limite de cenário que impede do Jogador chegar ao objetivo sem a marmita

parede.SetActive(true);

//se a marmita tiver sido recuperada

if(pegou == true)

//desativa limite de cenário que impede do Jogador chegar ao objetivo sem a


marmita

parede.SetActive(false);

//identifica se existe colisão

public void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//se a marmita não tiver sido recuperada e já estiver no campo de visão da camera

if (RespawnMarmita.destroyerMarmita == true)

//desativa componente da interface que indica a posição da marmita

seta.SetActive(false);

}
185

//identifica se não existe colisão

public void OnTriggerExit2D(Collider2D other)

//se o objeto de colisão for o jogador

if (other.gameObject.tag == "Player")

//se a marmita não estiver no campo de visão da camera

if (RespawnMarmita.destroyerMarmita == true)

//se ela não foi recuperada

if (pegou == false)

//ativa o componente de interface que indica a posição da marmita

seta.SetActive(true);

4.2.9.5 Liga As Setas Quando O Jogador Coleta A Marmita

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;
186

using UnityEngine;

//define quando a camera deve parar de seguir o personagem (paredes e limites de cenário)

[RequireComponent(typeof(Collider2D))]

//Cria classe de Herança

public class SetaOn : MonoBehaviour

//declara objeto

public GameObject seta;

//invoca Metodo constantemente

void Update()

//se o objeto marmita tiver sido recuperado

if (SetaOff.pegou == true)

//desativa componente de interface

seta.SetActive(false);

//identifica se existe colisão

public void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for a marmita

if (other.gameObject.tag == "Marmita")

//ativa componente de interface


187

seta.SetActive(true);

//declara que a marmita não foi recuperada

SetaOff.pegou = false;

4.2.9.6 Posição Das Setas Que Indicam Onde A Marmita Está

//adicionando bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class SetaRL : MonoBehaviour

//declara objetos da cena

public GameObject seta1, seta2;

//identifica se existe colisão

public void OnTriggerEnter2D(Collider2D other)

//se o objeto de colisão for o jogador


188

if (other.gameObject.tag == "Marmita")

//desativa os objetos da cena

seta1.SetActive(false);

seta2.SetActive(false);

4.2.10 Desenvolvimento da Câmera

4.2.10.1 Movimenta O Cenário Conforme O Jogador Anda

//adicionando bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//criando a classe de Herança

public class BackgroundMov : MonoBehaviour

//criando váriaveis de configurações do fundo

int numeroBack = 3;

public float velocidade;

bool movEsq = false;


189

bool movDir = false;

public GameObject posBkg;

public GameObject posBkg1;

//metódo Update

void Update()

//se o personagem estiver em movimento e não estiver colidindo com nenhum objeto

if (Movimento2.colidiu == false && FollowCamera.stpCmrCenario == false &&


Movimento2.estaticoGlobal == true)

//se o fundo estiver ativo

if (Movimento2.bGround == true)

//se o personagem estiver indo para a direita, o fundo irá se mover


constantemente na direção contrária

if (Input.GetAxis("Horizontal") > 0)

movEsq = true;

movDir = false;

if (movEsq == true)

transform.position += new Vector3(velocidade * -1 * Time.deltaTime, 0, 0);

//se o personagem estiver indo para a esquerda, o fundo irá se mover


constantemente na direção contrária
190

if (Input.GetAxis("Horizontal") < 0)

movDir = true;

movEsq = false;

if (movDir == true)

transform.position += new Vector3(velocidade * Time.deltaTime, 0, 0);

//se o fundo estiver desativado

if (Movimento2.bGround == false)

movDir = false;

movEsq = false;

//define quando o fundo sai dos limites da camera e o reposiciona

void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "LimiteFundo")

Vector3 posicao = posBkg.transform.position;

GetComponent<BoxCollider2D>().transform.position = posicao;

if (other.gameObject.tag == "LimiteFundo-x")
191

Vector3 posicao2 = posBkg1.transform.position;

GetComponent<BoxCollider2D>().transform.position = posicao2;

4.2.10.2 Para A Câmera Quando A Fase Termina

//adicionando bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class CameraStop : MonoBehaviour

//define quando a camera deve parar de seguir o personagem (paredes e limites de


cenário)

private void OnTriggerEnter2D(Collider2D other)

//se o Objeto "Jogador" (personagem) estiver dentro do campo limite

if (other.gameObject.tag == "Player")

//para a camera

FollowCamera.stpCmrCenario = true;
192

//define quando a camera deve voltar a seguir o personagem

private void OnTriggerExit2D(Collider2D other)

//se o Objeto "Jogador" (personagem) estiver fora do campo limite

if (other.gameObject.tag == "Player")

//a camera volta a seguir o personagem

FollowCamera.stpCmrCenario = false;

4.2.10.3 Para A Câmera Quando O Jogador Cai No Limpo

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class CameraStopQueda : MonoBehaviour

{
193

//Se o personagem "cair" no limbo da cena a camera irá parar de seguir com base nos
limites de cenario

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "Player")

//define game over por queda

FollowCamera1.perdeuQueda = true;

4.2.10.4 A Câmera Segue O Jogador Conforme Ele Anda

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class FollowCamera : MonoBehaviour

//criando variaveis

public Transform player;

public static bool stpCamera = false;

public static bool stpCmrCenario = false;

public float velocidade = 0.05f;


194

void Start()

//define valores iniciais

stpCamera = false;

stpCmrCenario = false;

void FixedUpdate()

//define as condições em que a camera deve seguir o personagem

if (stpCamera == false && stpCmrCenario == false)

//Objeto "Camera" segue a posição do Objeto "Jogador" constantemente

transform.position = Vector2.Lerp(transform.position, player.position, velocidade);

4.2.10.5 Cena De Introdução Da Primeira Fase

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class NewGameIntro : MonoBehaviour


195

//adcionando variaveis e objetos

public Animator introNgStart;

public GameObject introObj;

void Start()

//define valores iniciais

introNgStart.SetBool("IntroStart", true);

StartCoroutine("ExcluirIntro");

Movimento2.estaticoGlobal = false;

//Exclue objeto depois da sua animação terminar

IEnumerator ExcluirIntro()

yield return new WaitForSeconds(7);

Movimento2.estaticoGlobal = true;

yield return new WaitForSeconds(3);

Destroy(introObj);

4.2.10.6 Transição Para O Baile

//adiciona bibliotecas próprias do Unity

using System.Collections;
196

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

//cria classe de herança

public class TransicaoBaile : MonoBehaviour

//declara variaveis

public string proximaFase;

public AudioListener trilhaSonora;

public AudioSource somAmbiente;

void Start()

//Inicia a Rotina apenas uma vez

StartCoroutine("ProximaFase");

//define a troca de cenas com intervalos de tempo e altera valores de váriaveis

IEnumerator ProximaFase()

yield return new WaitForSeconds(3);

trilhaSonora.enabled = false;

somAmbiente.enabled = false;

Movimento2.podePular = false;

Movimento2.moveSpeed = 0;

yield return new WaitForSeconds(1.5f);

SceneManager.LoadScene(proximaFase);
197

4.2.11 Configurações e Menus

4.2.11.1 Configurações do Jogo

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class Configuracoes : MonoBehaviour

//declara variavel que irá salvar o progresso de fases do jogador

public int fase;

void Start()

//Sempre que o jogador começar uma nova fase, váriaveis globais são
alteradas para seus valores iniciais

TrilhasSonoras.falouDnCleusa = false;

JogadorInterage.interacao = false;

CompletaObjetivo.tipoDialog = false;

BotaoInterage.onOff = false;

Movimento2.podePular = true;

Movimento2.moveSpeed = 6.5f;
198

Movimento2.estaticoGlobal = true;

MarmitaPos.dropou = false;

SetaOff.pegou = true;

FollowCamera1.perdeuQueda = false;

Pause.isGamePaused = false;

Desativatransicao.prxTrue = false;

//Salva o progresso a cada nova fase desbloqueada

if (fase == 1 && SaveFaseCarregar.fase == 0)

SaveFaseCarregar.fase = 1;

//Componente do próprio Unity que cria um arquivo local com uma Variavel
do tipo inteira

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

if (fase == 2 && SaveFaseCarregar.fase == 1)

SaveFaseCarregar.fase = 2;

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

if (fase == 3 && SaveFaseCarregar.fase == 2)

SaveFaseCarregar.fase = 3;

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

if (fase == 4 && SaveFaseCarregar.fase == 3)


199

SaveFaseCarregar.fase = 4;

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

if (fase >= 5 && SaveFaseCarregar.fase >= 0)

SaveFaseCarregar.fase = 5;

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

4.2.11.2 Menu De Opções

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.Audio;

//Objetos que podem ser acessados no código \\

public class MenuOpcoes : MonoBehaviour

public static float armazenaVolume;

public AudioMixer mainMixer;

public static bool som = true;

public Slider slider;


200

//Declaração de variáveis e objetos\\

public void SetFullscreen(bool isFullscreen)

Screen.fullScreen = isFullscreen;

//código que ativa ou desativa o botão “fullscreen”\\

public void SetVolume(float volume)

if (som == true)

armazenaVolume = volume;

mainMixer.SetFloat("volume", volume);

//Código cria o botão “float” que regula (aumenta e diminui) o som, a variável criada pela
regulagem é armazenada\\

public void SetSound(bool setSound)

som = setSound;

if (som == false)

mainMixer.SetFloat("volume", -80);

}
201

//Código faz com que quando botão do som esteja desativado não será possível regular o
volume\\

void Update()

if (som == true)

SetVolume(armazenaVolume);

slider.value = armazenaVolume;

//código que ativa ou desativa o som e armazena essa informação\\

4.2.11.4 Posição do Bené no Começo da Fase

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class PositionBeneStart : MonoBehaviour

//declara objetos da cena

public GameObject bene;


202

public GameObject posicao;

//invocada apenas uma vez no primeiro momento que o objeto for ativado

void Start()

//define uma posição especifica para o personagem

bene.transform.position = posicao.transform.position;

4.2.11.5 Seleção de Níveis

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//Objetos que podem ser acessados no código \\

public class SaveFaseCarregar : MonoBehaviour

public GameObject botao2;

public GameObject botao3;

public GameObject botao4;

public GameObject botao5;

public GameObject botao6;

public static int fase=0;

//Declaração de variáveis e objetos\\


203

void Start()

if (PlayerPrefs.HasKey("dbFase"))

fase = PlayerPrefs.GetInt("dbFase");

else

fase = 0;

//Código presente para gerar o armazenamento das fases alcançadas e as tornar jogáveis e
selecionáveis\\

void update()

if(fase == 1)

botao2.SetActive(true);

if(fase == 2)

botao3.SetActive(true);

if(fase == 3)

botao4.SetActive(true);
204

if(fase == 4)

botao5.SetActive(true);

if(fase == 5)

botao6.SetActive(true);

//códigos para efetivar os botões e levar as fases respectivas\\

4.2.11.6 Carregar Fases

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement;

//Objetos que podem ser acessados no código \\

public class LevelManeger : MonoBehaviour {

public void LoadScene(string name){

SceneManager.LoadScene (name);

//Código para carregar cenas especificada na personalização\\

public void QuitGame(){


205

Application.Quit ();

//Código que sai do jogo para área de trabalho\\

4.2.11.7 Novo Jogo

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//cria classe de herança

public class NovoJogo : MonoBehaviour

//se a opção de Novo jogo for selecionada o método abaixo é invocado

public void Novojogo()

//define que número de fases desbloqueadas é zero, todo o progresso (caso tenha) é
perdido

SaveFaseCarregar.fase = 0;

PlayerPrefs.SetInt("dbFase", SaveFaseCarregar.fase);

4.2.11.7 Próxima Fase

//adiciona bibliotecas próprias do Unity

using System.Collections;
206

using System.Collections.Generic;

using UnityEngine;

//adiciona biblioteca própria do Unity de gerenciamento de cenas

using UnityEngine.SceneManagement;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class prxFase : MonoBehaviour

//declara variaveis e objetos

public string proximaFase;

public GameObject transicao;

public AudioListener camera;

//quando um objeto especifico (jogador) entrar no campo definido o metodo é invocado

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "Player")

//Inicia uma rotina

StartCoroutine("ProximaFase");

//define a troca de cenas com intervalo de tempo e altera valores de váriaveis

IEnumerator ProximaFase()

{
207

transicao.SetActive(true);

camera.enabled = false;

yield return new WaitForSeconds(0.75f);

SceneManager.LoadScene(proximaFase);

4.2.11.8 Trilhas Sonoras

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class TrilhasSonoras : MonoBehaviour

//declara variaveis

public AudioSource somBar;

public AudioSource somFora;

public AudioSource somFora1;

public static bool falouDnCleusa = false;

//quando um objeto especifico (jogador) entrar no campo definido o metódo é invocado

private void OnTriggerEnter2D(Collider2D other)

{
208

if (other.gameObject.tag == "Bar")

//ativa som do cenário "bar" e desativa trilhas sonoras do cenário externo

somBar.Play();

somFora.Pause();

somFora1.Stop();

private void OnTriggerExit2D(Collider2D other)

if (other.gameObject.tag == "Bar")

//desativa som do cenário "bar" e ativa trilhas sonoras do cenário externo

if (falouDnCleusa == true)

somBar.Stop();

somFora1.Play();

else

somBar.Stop();

somFora.Play();

}
209

4.2.11.9 Direção Para O Objetivo Final

//adiciona bibliotecas próprias do Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//declarando requerimento do componente "colisor 2D" para o código funcionar

[RequireComponent(typeof(Collider2D))]

//cria classe de herança

public class AtivaST : MonoBehaviour

//declara objeto da cena

public GameObject seta;

//ao trocar de cenário desativa o objeto

private void OnTriggerEnter2D(Collider2D other)

if (other.gameObject.tag == "Bar")

seta.SetActive(false);

//ao trocar de cenário ativa o objeto

private void OnTriggerExit2D(Collider2D other)

if (other.gameObject.tag == "Bar")

{
210

if (TrilhasSonoras.falouDnCleusa == true)

seta.SetActive(true);

4.2.12 Opções de Jogo e Funcionalidades

4.2.12.1 “Level Manager”

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement;

public class LevelManeger : MonoBehaviour {

public void LoadScene(string name){

SceneManager.LoadScene (name);

Time.timeScale = 1f;

public void QuitGame(){

Application.Quit ();

}
211

4.2.12.2 A Opção Do Jogador De Pausar O Jogo

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

//Objetos que podem ser acessados no código \\

public class Pause : MonoBehaviour

public static bool isGamePaused = false;

public AudioListener cameraSom;

[SerializeField] GameObject PauseMenu;

//Declaração de variáveis e objetos\\

void Update()

if (Input.GetKeyDown(KeyCode.Escape))

if (PlayerHP.playerhp != 0)

if (isGamePaused)

ResumeGame();

}
212

else

PauseGame();

//quando a tecla “esc” for pressionada, PauseGame se tornará real e ao ser pressionada
novamente se tornara falso e ResumeGame se tornara real\\

public void ResumeGame ()

PauseMenu.SetActive(false);

Time.timeScale = 1f;

cameraSom.enabled = true;

isGamePaused = false;

//quando tecla “esc” for pressionada com PauseGame ativo ou o botão de resumo for
selecionado, ResumeGame se torna real e jogo volta ao normal\\

void PauseGame()

PauseMenu.SetActive(true);

Time.timeScale = 0f;

cameraSom.enabled = false;

isGamePaused = true;

//Quando PauseGame se torna real, tempo de jogo congelado e som desativado\\


213

public void LoadMenu (string name)

cameraSom.enabled = true;

Time.timeScale = 1f;

isGamePaused = false;

SceneManager.LoadScene (name);

//quando botão de voltar ao menu for selecionado ele se torna real, tempo de jogo normal,
som ativo, é carregada a cena do menu. Mesmo código é usado para quando a tecla
recomeçar é selecionada e a cena do nível que foi salva pela última vez é carregado\\

4.2.12.3 Botão Para O Menu Principal

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public class Voltar : MonoBehaviour

void Update()

if (Input.GetKeyDown(KeyCode.Escape))

{
214

SceneManager.LoadScene (0);

4.2.12.4 Desativa E Ativa As Opções Do Menu

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class opcoesAtiva : MonoBehaviour

public GameObject menuOpc;

// Update is called once per frame

public void MenuOpcoes()

menuOpc.SetActive(true);

public void MenuPrincipal()

menuOpc.SetActive(false);

}
215

4.2.13 Créditos do Jogo

//Adiciona as bibliotecas da Unity

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//adiciona a biblioteca da Unity para gerenciar cenas

using UnityEngine.SceneManagement;

//cria classe de Herança

public class TrocaTextos : MonoBehaviour

//objetos presentes na cena (textos 2D)

public GameObject txt;

public GameObject txt1;

public GameObject txt2;

public GameObject txt3;

//tela de transição

public GameObject transicao;

//int que armazena quantos textos foram ativados

public int txtactive;

//variavel que armazena o nome da próxima cena

public string prxFase;

//invoca o metodo constantemente

void Update()

//se o Jogador pressionar a tecla "E"


216

if (Input.GetKey(KeyCode.E))

//se a trasição estiver desativada

if (Desativatransicao.prxTrue == false)

//ativa transicao

transicao.SetActive(true);

//invoca Rotina

StartCoroutine("Transicion");

//se o número de texto ativos for igual a 1

if(txtactive == 1)

//ativa o próximo texto

txt.SetActive(true);

//se o número de texto ativos for igual a 2

if (txtactive == 2)

//ativa o próximo texto

txt1.SetActive(true);

//se o número de texto ativos for igual a 3

if (txtactive == 3)

//ativa o próximo texto

txt2.SetActive(true);
217

//se o número de texto ativos for igual a 4

if (txtactive == 4)

//ativa o próximo texto

txt3.SetActive(true);

//se o número de texto ativos for igual a 5

if (txtactive == 5)

//Invoca a próxima cena

SceneManager.LoadScene(prxFase);

//rotina

IEnumerator Transicion()

//intervalo de tempo

yield return new WaitForSeconds(0.6f);

//adiciona +1 para cada texto ativo na váriavel

txtactive++;

//para a rotina

StopCoroutine("Transicion");

}
218

5. PLANO DE NEGÓCIOS

5.1 Modelo De Negócios

Figura 24 - Modelo de Negócios

Fonte: Do próprio autor, 2022


219

5.2 Swot

Figura 25 - Análise Swott

Fonte: Do próprio autor, 2022


220

Figura 26 - Análise Swott 2

Fonte: Do próprio autor, 2022


221

Figura 27 - Análise Swott 3

Fonte: Do próprio autor, 2022


222

Figura 28 - Análise Swott 4

Fonte: Do próprio autor, 2022


223

Figura 29 - Análise Swott 5

Fonte: Do próprio autor, 2022


224

6. MANUAL DO USUÁRIO

6.1 Manual Do Usuário Site

6.1.1 Página Home e Download

Figura 30 - Página Home e Download

Fonte: Do próprio autor, 2022


O usuário possui o primeiro contato com a página home e download, a qual
pode ser acessada através do link https://beneditorumoaobaile.herokuapp.com,
nesta página inicial o usuário pode obter acesso a outras páginas do site, como a de
“desenvolvedores”, “Personagens”, “Desenvolvedores”, “Sobre o jogo”, e a de
“Contato”, através do pressionamento de seus respectivos espaços na barra de
opções.
225

6.1.2 Desenvolvedores

Figura 31 - Página Sobre os Desenvolvedores

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


226

Na página “desenvolvedores”, o usuário pode conferir algumas informações


sobre os integrantes do projeto, como nome e suas respectivas funções.

6.1.3 Personagens

Figura 32 - Página Sobre os Personagens

Fonte: Do próprio autor, 2022


Na página “personagens”, o usuário pode conferir informações sobre os
personagens, além de ter a oportunidade de conhecer o design deles.
227

6.1.4 Sobre o jogo

Figura 33 - Página Sobre o Jogo

Fonte: Do próprio autor, 2022


Nessa página o usuário pode conferir” sobre o jogo” nosso jogo tem a
proposta de entregar uma experiência divertida, reflexiva e conscientizadora por
meio de um jogo de plataforma, onde um menino chamado Bené fará entregas de
marmitas por todo o Tapão Quadrado, enfrentando diversos obstáculos, aprendendo
muito sobre si mesmo e conhecendo os problemas que a periferia enfrenta.
228

6.1.5 Contato

Figura 34 - Página de Contato

Fonte: Do próprio autor, 2022


Nessa página o usuário pode conferir o nosso e-mail de contato,
beneditorumoaobaile@gmail.com.
229

6.1.6 Como Baixar Instalar

Figura 35 - Download

Fonte: Do próprio autor, 2022


Para realizar a instalação do aplicativo, o usuário deverá primeiro acessar o
site de divulgação, o qual pode ser encontrado através do link
beneditorumoaobaile.herokuapp.com. Após ele ter entrado no site, ele deverá clicar
em baixar, ao clicar o arquivo do jogo será baixado.

Figura 36 - Arquivo Baixado

Fonte: Do próprio autor, 2022


Assim que o arquivo for instalado em seu computador, você deve extrai-lo
onde você desejar e ele estará pronto para ser jogado.
230

Figura 37 - Passo a passo de como extrair

Fonte: Do próprio autor, 2022


Depois de baixar o arquivo, você deve selecionar o arquivo instalado, clicar
com o botão direito do mouse e seguir os passos na imagem e depois clicar em
“extrair aqui”, assim, o arquivo será extraído e estará pronto para ser jogado, como
mostra a imagem logo abaixo:

Figura 38 - Pasta extraída

Fonte: Do próprio autor, 2022


Agora é só executar o arquivo “Benedito Rumo ao Baile”, que o jogo iniciará.
231

6.2 Manual Do Usuário Aplicativo

6.1.1 Menu do Jogo

Figura 39 - Menu do Jogo

Fonte: Do próprio autor, 2022


Nessa tela o usuário pode conferir as seguintes opções “Jogar”, “Opções”,
“Sair”.
232

Figura 40 - Menu do Botão Jogar

Fonte: Do próprio autor, 2022


Ao clicar no botão jogar o jogador poderá conferir as opções “Continuar”,
“Novo Jogo”, e “Voltar”. No botão continuar o usuário será direcionado para a página
de seleção de fases, no botão “Novo Jogo”, o jogador recomeçará o jogo, e o botão
“Voltar” fará com que ele volte a página anterior.

Figura 41 - Seleção de Fases

Fonte: Do próprio autor, 2022

Ao clicar no botão “Continuar” o jogador acessará a página de seleção de


fases, onde ele poderá ver o progresso do jogo.
233

6.1.2 Opções

Figura 42 - Opções

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


Na tela de opções o usuário pode tirar o som do jogo, controlar o volume, e
ele também possui a opção de colocar a tela “FullScreen”.
234

6.1.3 Jogo

Figura 43 - Tutorial

Fonte: Do próprio autor, 2022


Nessa primeira parte do jogo o usuário pode conferir os botões de
movimentação, pulo e interação.

Figura 44 - Carta

Fonte: Do próprio autor, 2022

Carta da mãe de Benedito, ao clicar no botão “E” o jogador irá interagir com o
cenário.
235

Figura 45 - Tela de Pause

Fonte: Do próprio autor, 2022


Nessa tela o usuário poderá pausar o jogo, ao pausar o jogo ele terá as
seguintes opções “Recomeçar”, “Voltar” e “Sair”. Ao clicar na opção recomeçar ele
volta a jogar, já o botão voltar ele volta para a tela de início, e a opção sair ela fecha
o jogo.
236

Figura 46 - Cenário de Dia

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


237

Fonte: Do próprio autor, 2022


O jogador poderá conferir o cenário do jogo feito pelos nossos designers.

Figura 47 - Personagem pulando

Fonte: Do próprio autor, 2022


Aqui o personagem está executando a ação de pular.
238

Figura 48 - Interação

Fonte: Do próprio autor, 2022


Ao se aproximar de outros personagens, o usuário poderá ver uma barra
branca ao redor, isso indica interação, para poder interagir com o cenário e com
personagens o jogador terá que clicar no botão “E”.

Figura 49 - Missão

Fonte: Do próprio autor, 2022


Ao interagir com a “Dona Cleusa” o jogador receberá sua primeira missão
entregar todas as “marmitas”, no canto superior esquerdo o jogador poderá ver seu
objetivo.
239

Figura 50 - Inimigos

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


Ao avançar na missão o jogador encontrará novos inimigos, como a pomba e
o rato.
240

Figura 51 - Marmita

Fonte: Do próprio autor, 2022


Ao perder a marmita o personagem poderá morrer e o jogador não conseguirá
avançar na missão, para que isso não ocorra existem duas opções, não tomar dano
dos inimigos, ou retomar a marmita perdida. Vale ressaltar que a marmita funciona
como uma vida extra ao jogador.

Figura 52 - Diálogo

Fonte: Do próprio autor, 2022


241

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


242

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


243

Fonte: Do próprio autor, 2022


Ao interagir com os outros personagens o jogador poderá ler os diálogos que
o jogo proporciona. Vale ressaltar que os diálogos são de extrema importância para
o entendimento da história.

Figura 53 - Plataformas

Fonte: Do próprio autor, 2022


244

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


Ao progredir o jogador verá plataformas que se movimentam, elas servem
para auxiliar na conclusão da missão.
245

Figura 54 - Cenário Noturno

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


246

Fonte: Do próprio autor, 2022


O jogador poderá conferir o cenário do jogo feito pelos nossos designers.

Figura 55 - Ação de Derrota

Fonte: Do próprio autor, 2022


Ao perder a marmita e tomar dano dos inimigos o personagem morre.
247

Figura 56 - Ação de Tomar Dano

Fonte: Do próprio autor, 2022


Ao encostar nos inimigos o personagem perderá a marmita e ficará vermelho
indicando que ele recebeu dano.

Figura 57 - Créditos

Fonte: Do próprio autor, 2022


248

Fonte: Do próprio autor, 2022

Fonte: Do próprio autor, 2022


249

Fonte: Do próprio autor, 2022


250

7. HORAS TRABALHADAS

7.1 Custos das Ferramentas

Tabela 57 - Custos de Ferramentas

Software Licença

Astah Community Gratuito

Aseprite R$ 37,99

Canvas R$ 449,00/ano

Draw.io Gratuito

Git Gratuito

Heroku Gratuito

Microsoft 365 R$ 449,00/ano (Plano Família)

Unity 5 Gratuito

Visual Studio R$ 239,63/mês – U$ 45*

Visual Studio Code Gratuito

Custo Total dos Softwares R$ 1.175,62

Fonte: Do próprio autor, 2022


Os valores indicados com “*” indicam que foi realizada uma estimativa
referente ao preço original em dólar e a cotação em reais, pelo fato de a ferramenta
não possuir um preço cotado em dólar.
251

7.2 Custo dos Profissionais

Tabela 58 - Custos dos Profissionais


Quantidade
Nome Função Salário/Hora de Horas Salário
Trabalhadas

Gustavo Rabello Documentador R$ 7,50 850 h R$ 6.375


Cardoso

Documentador R$ 7,50 850 h R$ 6.375


Heitor Bianchi Silva

Karl Marco Sitta Marçal Programador R$ 7,50 850 h R$ 6.375

Lucas Stampini
Programador R$ 7,50 850 h R$ 6.375
Yokoyama

Vinicius Fernandes Brito Designer R$ 7,50 850 h R$ 6.375

Vinicius Luccas De Faria Programador R$ 7,50 850 h R$ 6.375

Roger Rocha Da Silva Programador R$ 7,50 850 h R$ 6.375

Sofia Leandro De Barros


Designer R$ 7,50 850 h R$ 6.375
Gonçalves

Totais: 6.800 h R$ 51.000

Fonte: Do próprio autor, 2022

7.3 Custo Total do Projeto

Tabela 59 - Custo Total do Projeto

Mão de Obra R$ 51.000

Software e Licenças R$ 1.175,62

Custo Total: R$ 52.175,62

Fonte: Do próprio autor, 2022


252

8. CONCLUSÃO

Para finalizar gostaríamos de acrescentar que o trabalho ocorreu de forma


fluida, com altos e baixos tendo a fase projetual dos elementos com um prazo
apertado, e mesmo nessas condições respeitamos os prazos estipulados,
crescemos juntos com o projeto, amadurecendo nossas ideias e percepções do
mundo conforme cada etapa do projeto sucedia-se, criamos laços não só com
nossos companheiros de equipe e professores auxiliares, mas também com a
história presente em nosso jogo, com enredo central e todo processo de construção.
Agradecemos primeiramente a Deus, e aos nossos colegas que nos apoiaram e
prestigiaram, a nossa professora coordenadora Rosa Mitiko Shimizu, que nos
instruiu e nos auxiliou em toda essa jornada. E assim podemos finalizar nosso
trabalho de conclusão de curso entregando não só um jogo, mas também uma ideia,
capaz de influenciar mentes e trazer alegria e diversão a todos, e este é nosso
grande objetivo.
253

9. REFERÊNCIAS BIBLIOGRÁFICAS

HANASHIRO, Akira. VS Code - O que é e por que você deve usar? Treinaweb.
Disponível em: https://www.treinaweb.com.br/blog/vs-code-o-que-e-e-por-que-voce-
deve-
usar#:~:text=O%20Visual%20Studio%20Code%20(VS,com%20HTML,%20CSS%20
e%20JavaScript. Acesso em: 16 nov. 2022.

UNITY TECHNOLOGIES - Manual: Unity User Manual 2021.3 (LTS). Unity.


Disponível em: https://docs.unity3d.com/Manual/index.html. Acesso em: 16 nov.
2022.

UNITY TECHNOLOGIES. Unity. Disponível em: https://unity.com/pt. Acesso em: 17


nov. 2022.

UNITY TECHNOLOGIES. Unity - manual: 2D. Disponível em:


https://docs.unity3d.com/Manual/Unity2D.html. Acesso em: 17 nov. 2022.

ASEPRITE. Disponível em: https://www.aseprite.org/. Acesso em: 16 nov. 2022.

FERREIRA, Hélder. Draw.IO - Desenhar diagramas nunca foi tão fácil - Pplware.
Pplware. Disponível em: https://pplware.sapo.pt/internet/draw-io-desenhar-
diagramas-nunca-foi-tao-facil/. Acesso em: 16 nov. 2022.

FERNANDES, Daniel. Pacote Office – O que é e quais as principais funções de cada


programa. Microlins. Disponível em:
https://www.microlins.com.br/blog/tecnologia/pacote-office-–-o-que-e-e-quais-as-
principais-funcoes-de-cada-programa/. microlins. Acesso em: 16 nov. 2022.

INTRODUÇÃO ao Visual Studio. Microsoft. Disponível em:


https://visualstudio.microsoft.com/pt-br/vs/getting-started/. Acesso em: 16 nov. 2022.

UM TOUR por C# - Visão geral. Microsoft. Disponível em:


https://learn.microsoft.com/pt-br/dotnet/csharp/tour-of-csharp/. Acesso em: 16 nov.
2022.

O QUE é o JavaScript? - Explicação sobre o JavaScript - AWS. AWS. Disponível


em: https://aws.amazon.com/pt/what-is/javascript/. Acesso em: 16 nov. 2022.
254

L, Andrei. O que é HTML? Guia Completo com Lista de Comandos Básicos HTML.
Hostinger. Disponível em: https://www.hostinger.com.br/tutoriais/o-que-e-html-
conceitos-basicos. Acesso em: 17 nov. 2022.

OKUBO, Beatriz. Você Sabe o que é CSS? Entenda Como Funciona e Para que
Serve. GoDaddy. Disponível em: https://br.godaddy.com/blog/voce-sabe-o-que-e-
css-entenda-como-funciona-e-para-que-serve/. Acesso em: 16 nov. 2022.

BARROS, Larissa. Heroku: o que é e como auxilia no desenvolvimento escalável.


ImagineDone. Disponível em: https://imaginedone.com.br/blog/o-que-e-o-heroku/.
Acesso em: 16 nov. 2022.
255

10. ANEXOS

Tipo: (livro, revista, jornal, manual, site etc.)


Site

Assunto / tema:
VS Code - O que é e por que você deve usar?
Referência bibliográfica: (conforme Norma ABNT)
HANASHIRO, Akira. VS Code - O que é e por que você deve usar? Treinaweb.
Disponível em: https://www.treinaweb.com.br/blog/vs-code-o-que-e-e-por-que-
voce-deve-
usar#:~:text=O%20Visual%20Studio%20Code%20(VS,com%20HTML,%20CSS%
20e%20JavaScript. Acesso em: 16 nov. 2022.

Resumo / conteúdo de interesse:


Resumo do conceito e funcionalidade do Vs Code.
Citações:
1 - O VS Code é capaz de fazer muitas coisas que nos ajudam a trabalhar melhor.

A princípio ele é uma ferramenta muito simples, mas ele possui uma loja de
extensões imensa, e que continua crescendo.

Ou seja, com essa enorme coleção de extensões, podemos adicionar diversas


funcionalidades ao VS Code de forma bem simples. Dessa maneira, ele pode
facilmente ser comparado a grandes IDEs pagas.

Considerações do pesquisador (aluno):


O texto presente no site traz para o leitor de forma sucinta e direta um resumo da
finalidade do software que foi utilizado pelo grupo para programar o site.
Indicação da obra:
Público geral que busca se informar sobre o tema, principalmente interessados na
área da tecnologia.
Local:
https://www.treinaweb.com.br/blog/vs-code-o-que-e-e-por-que-voce-deve-
usar#:~:text=O%20Visual%20Studio%20Code%20(VS,com%20HTML,%20CSS%
20e%20JavaScript
256

Tipo: (livro, revista, jornal, manual, site etc.)


Site
Assunto / Tema:
A plataforma líder para criação de 3d em tempo real

Referência bibliográfica: (conforme Norma ABNT)


UNITY TECHNOLOGIES. Unity. Disponível em: https://unity.com/pt. Acesso em:
17 nov. 2022.

Resumo / conteúdo de interesse:


Resumos e funcionalidades do Unity.
Citações:
1 - Acelere seu processo de desenvolvimento de jogos para dispositivos móveis
com o novo modelo de jogos de corrida da Unity. Aprenda a iterar e prototipar
mais rápido, para que possa gastar mais tempo melhorando seu jogo.

Considerações do pesquisador (aluno):


O texto presente no site traz para o leitor de forma sucinta e direta um resumo da
finalidade do software que foi utilizado pelo grupo para programar o jogo.
Indicação da obra:
Público geral que busca se informar sobre o tema, principalmente interessados na
área da tecnologia.

Local:
https://unity.com/pt
257

Tipo: (livro, revista, jornal, manual, site etc.)


Site
Assunto / Tema:
Desenhar diagramas nunca foi tão fácil

Referência bibliográfica: (conforme Norma ABNT)


FERREIRA, Hélder. Draw.IO - Desenhar diagramas nunca foi tão fácil - Pplware.
Pplware. Disponível em: https://pplware.sapo.pt/internet/draw-io-desenhar-
diagramas-nunca-foi-tao-facil/. Acesso em: 16 nov. 2022.

Resumo / conteúdo de interesse:


Resumos e funcionalidades do Draw.io
Citações:
1 - O Draw.IO anteriormente chamado de Diagramly, assenta na plataforma do
Google Drive e permite criar diagramas, fluxogramas, mockups, esquemas etc.,
tudo a partir do seu browser.

Considerações do pesquisador (aluno):


O texto presente no site traz para o leitor de forma sucinta e direta um resumo da
finalidade do software que foi utilizado pelo grupo para fazer documentos como
diagramas e fluxogramas
Indicação da obra:
Público geral que busca se uma ferramenta de criação de diagramas e
documentos

Local:
https://pplware.sapo.pt/internet/draw-io-desenhar-diagramas-nunca-foi-tao-facil/
258

Tipo: (livro, revista, jornal, manual, site etc.)


Site
Assunto / Tema:
Pacote Office – O que é e quais as principais funções de cada programa.

Referência bibliográfica: (conforme Norma ABNT)


FERNANDES, Daniel. Pacote Office – O que é e quais as principais funções de
cada programa. Microlins. Disponível em:
https://www.microlins.com.br/blog/tecnologia/pacote-office-–-o-que-e-e-quais-as-
principais-funcoes-de-cada-programa/. microlins. Acesso em: 16 nov. 2022.

Resumo / conteúdo de interesse:


Resumo dos programas e funcionalidades do Pacote Office.
Citações:
1 - O Word é considerado o programa mais utilizado entre todos os oferecidos pela
suíte Microsoft. Ele é um editor de textos completo, que oferece uma grande gama
de funções. É ideal para produzir e formatar textos diversos, como cartas,
trabalhos escolares, livros, contos, ofícios e muito mais. Com ele, você pode criar
desde uma simples nota até uma monografia de conclusão de cursos completa!

Considerações do pesquisador (aluno):


O texto presente no site traz para o leitor de forma sucinta e direta um resumo da
finalidade do software que foi utilizado pelo grupo para fazer toda a documentação
de nosso projeto
Indicação da obra:
Público geral que busca ferramentas de criação e edição de documentos

Local:
https://www.microlins.com.br/blog/tecnologia/pacote-office-–-o-que-e-e-quais-as-
principais-funcoes-de-cada-programa/
259

Tipo: (livro, revista, jornal, manual, site etc.)


Site
Assunto / Tema:
Introdução ao Visual Studio.

Referência bibliográfica: (conforme Norma ABNT)


INTRODUÇÃO ao Visual Studio. Microsoft. Disponível em:
https://visualstudio.microsoft.com/pt-br/vs/getting-started/. Acesso em: 16 nov.
2022.

Resumo / conteúdo de interesse:


Introdução ao aplicativo Visual Studio
Citações:
1 - Por que aprender Visual Studio? O Visual Studio permite que você conclua
todo o ciclo de desenvolvimento em um único lugar. Por exemplo, você pode
editar, depurar, testar, controlar a versão e implantar na nuvem. Com a
diversidade de recursos e linguagens no Visual Studio, você pode ir de escrever
seu primeiro trecho de código a desenvolver em vários tipos de projeto. Por
exemplo, você pode criar aplicativos de área de trabalho e Web com aplicativos
.NET, móveis e de jogos com C++.

Considerações do pesquisador (aluno):


O texto presente no site traz para o leitor de forma sucinta e direta um resumo da
finalidade do software que foi utilizado pelo grupo para fazer a programação do
jogo.
Indicação da obra:
Público geral que busca se informar sobre o tema, principalmente interessados na
área da tecnologia.
Local:
https://visualstudio.microsoft.com/pt-br/vs/getting-started /

Você também pode gostar