Buscar

Introdução aos Tipos Abstratos de Dados em Jogos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 1/41
introdução
Introdução
PROGRAMAÇÃO E INTEGRAÇÃO DE JOGOSPROGRAMAÇÃO E INTEGRAÇÃO DE JOGOS
INTRODUÇÃO AOS TIPOS ABSTRATOSINTRODUÇÃO AOS TIPOS ABSTRATOS
DE DADOSDE DADOS
Autor: Me. Victor de Assis Rodrigues
Revisor : Emerson dos Santos Paduan
IN IC IAR
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 2/41
Nesta unidade, faremos uma introdução aos Tipos Abstratos de Dados. Discorreremos sobre a
importância da abstração para representação e resolução de problemas, além da relação com
o processo de desenvolvimento de jogos digitais e os aspectos do mecanismo de jogos.
Na sequência, analisaremos a mecânica de alocação de memória, com dados homogêneos e
heterogêneos. Nesse contexto, discorreremos sobre as diferenças entre usar matrizes e
ponteiros e suas utilizações.
Após a abordagem desses conceitos, aprenderemos a aplicá-los na prática, usando uma
linguagem de programação para criação de jogos digitais. Para isso, criaremos um jogo de
labirinto usando a técnica de jogos tile maps , com a linguagem de programação Javascript no
HTML 5.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 3/41
Nesse tópico, conheceremos os tipos abstratos de dados e sua importância para a área de
programação em jogos. Além disso, explicaremos a importância do planejamento antes de se
começar um novo projeto e também como introduzir a linguagem Javascript com HTML 5, que
utilizaremos para desenvolver os exercícios e demais atividades dessa disciplina.
Criação de Jogos: Por Onde Começar?
Antes de começarmos a abordar os elementos que compõem os mecanismos de games, é
importante falar sobre o processo de produção. Imagine que você e um colega tenham
vontade de produzir um jogo. A dúvida é: por onde começar?
O processo da produção de jogos se assemelha bastante ao do desenvolvimento de software
comum (FERRARI et al., 2014), entretanto um jogo digital possui características que aumentam
a complexidade e estimulam o desa�o (BRITTO, 2011).
É diferente quando comparamos, por exemplo, um projeto de animação interativa e um jogo
digital. Na animação interativa, o usuário possui poucas opções de personalização e interação,
enquanto o jogo digital oferece várias formas de se explorar a diversão e fornecer experiências
inesquecíveis ao jogador (BRITTO, 2011).
Dentre os mecanismos que podemos adotar para engajamento do jogador, podemos citar a
criação de menus e interfaces coesos e objetivos, a inserção de desa�os e resoluções de
problemas, mecânicas variadas, evolução gradativa de habilidades e equipamentos do jogador,
dentre diversas outras (SCHUYTEMA, 2008). Na prática, para implementá-las, precisamos
representar as informações necessárias no mundo computacional e conseguir gerenciar esses
dados de forma e�ciente.
Tipos Abstratos de DadosTipos Abstratos de Dados
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 4/41
Assim, todo projeto começa com a ideia ou, em outras palavras, com o que de fato pretende
ser desenvolvido. Em seguida, o projeto entra em seu ciclo de vida tradicional com as etapas de
análise, projeto, implementação, teste e manutenção (FERRARI et al ., 2014).
Abstração e Estrutura de Dados
Agora que já discutimos um pouco sobre as etapas do desenvolvimento de jogos digitais,
começaremos a nos aprofundar em mecanismos que compõem um game.
O primeiro passo é entendermos o valor da abstração em nosso dia a dia, independentemente
da idade que temos e da natureza dos desa�os que enfrentamos.
A informática é considerada a ciência das informações. É nesse campo que investigamos a
manipulação, organização e utilização de dados dos eventos que ocorrem no mundo
(LAUREANO, 2008). Com a evolução da tecnologia, muitos dados sobre comportamentos e
processos são gerados, inclusive em jogos digitais e plataformas de games, o que reforça ainda
mais a importância de técnicas rápidas e seguras de gerenciar e recuperar essas informações.
As estruturas de dados nada mais são do que “[...] formas otimizadas de armazenamento e
tratamento das informações eletronicamente” (LAUREANO, 2008, p. 237). Muitas dessas formas
são inspiradas em situações reais do dia a dia, mecanismos presentes no mundo e
incorporados de forma adaptada para o mundo computacional (LAUREANO, 2008).
Análise
Nessa fase é feito um levantamento de requisitos, ou
seja, desde a descrição narrativa do jogo, até seus
objetivos, enredo formas de interação e mecanismos
de recompensa.
freepik.com
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 5/41
A abstração é uma ferramenta aplicada ao processo de aquisição de conhecimento, e é
essencial para a resolução de problemas. Consiste em selecionar quais características mais
importantes de um assunto ou contexto que se deseja esclarecer e elaborar descrições
adequadas, permitindo que a caracterização dos conceitos seja reduzida a seu per�l mais
conveniente (ALMEIDA, 1981; CAPRA, 1983 apud SAYÃO, 2001).
Abstração nos Mecanismos de Jogos de Cartas
Analisaremos por um momento o jogo de poker. Fique tranquilo caso você não saiba as regras,
pois não iremos aprofundar nesse aspecto. Levantaremos apenas alguns mecanismos
presentes nos jogos de cartas em geral.
Toda carta possui um naipe e um valor. Se fossemos implementar esse jogo no computador,
essas informações seriam bastantes relevantes e devem ser armazenadas. Sabemos também
que o valor dessas duas informações não muda no decorrer do jogo, ou seja, um “K” (Rei) de
Copas no início do jogo ainda será um “K” de Copas no �nal. Na Figura 1.1, é ilustrado um
exemplo padrão de cartas de um baralho.
Quando as cartas estão no baralho, existe um mecanismo correto para distribuição aos
jogadores. Podemos dizer que as cartas estão organizadas em uma pilha e que, quando
distribuídas, devem ser retiradas sempre do mesmo ponto do baralho (acima ou abaixo),
nunca no meio.
Além disso, temos outras operações que são realizadas em outros jogos: embaralhar as cartas,
reordenar as cartas em ordem crescente ou decrescente, recolocar uma carta no topo. Muitas
dessas operações possuem regras bem de�nidas que devem ser implementadas também no
computador.
Assim, reconhecendo as características dos elementos dos jogos, que passaremos a chamar de
atributos , e os mecanismos que os jogos possuem, que começaremos a chamar de
Figura 1.1 - Cartas de um baralho
Fonte: Michael Brown / 123RF.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 6/41
operadores , de�niremos qual o tipo abstrato de dados mais adequado para implementá-los
no computador.
De�inição de Tipo Abstrato de Dados
De acordo com Cerqueira, Celes e Rangel (2008), um tipo abstrato de dados (TAD) pode ser
visto como uma estrutura capaz de agrupar dados de um mesmo domínio e os procedimentos
necessários para gerenciar esses dados.
Assim, levando em conta o pensamento de Ferrari (2014), o papel do TAD não é de�nir a
implementação que vai ser escrita em determinada linguagem de programação, mas, sim,
fornecer a ideia de como aquela estrutura de dados vai operar, e seu nome é Tipo Abstrato de
dados.
Assim, como exemplo do que foi apresentado na Seção 1.2.1, podemos de�nir o tipo abstrato
do baralho de cartas, conforme a Quadro 1.1:
Nas próximas seções, abordaremos mais detalhadamente a implementação de uma TAD,
utilizando como suporte a linguagem de programação Javascript.
Dentre as vantagens deutilizarmos os TADs, temos (DOVICCHI, 2008; FERRARI, 2014;
LAUREANO, 2008):
Facilidade de programar sem se preocupar com detalhes de implantação: se
precisamos devolver uma carta para o baralho, em vez de nos preocuparmos com o
status da pilha e das cartas, basta apenas chamar o operador correspondente.
Facilidade em preservar a integridade dos dados: desde que utilize os operadores
do tipo de dados abstratos, os dados serão gerenciados e preservados de forma
segura.
Maior potencial de reutilização de código: por se tratar de estruturas abstratas,
uma mesma estrutura de dados pode ser utilizada em diversos contextos. Por
exemplo, um TAD para o baralho de poker pode ser reutilizado para o jogo de
paciência, uma vez que os mecanismos são idênticos.
Dessa forma, um Tipo Abstrato de Dados reúne duas propostas: a concepção de uma estrutura
de dados, baseando-se em todas as características do problema, e também as propriedades
Quadro 1.1 - De�nição de TAD para Baralho de Cartas
Fonte: Elaborado pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 7/41
técnicas para implementação nos computadores. Exploraremos melhor esses conceitos
técnicos nas próximas seções.
praticar
Vamos Praticar
Leia o trecho a seguir:
“Um tipo de dado é um conceito abstrato, de�nido por um conjunto de propriedades
lógicas. Assim que um tipo de dado abstrato é de�nido e as operações válidas envolvendo
esse tipo são especi�cadas, podemos implementar esse tipo de dado (ou uma
aproximação)” (TENENBAUM; LANGSAM; AUGENSTEIN, 1995, p. 11).
Sobre os tipos abstratos de dados, assinale a alternativa correta:
a) Quando queremos implementar um elemento do mundo real para o computador, devemos
implementar todos os aspectos relacionados ao elemento.
b) As características presentes nos objetos são chamadas de operadores, e todos os eventos e
mecanismos que um objeto fornece para interação são chamados de atributos.
c) O objetivo de um Tipo Abstrato de Dados é representar os aspectos detalhados de
implementação de um elemento do mundo real em um computador.
d) Abstração pode ser considerada como a re�exão das características mais importantes de
um determinado elemento ou contexto.
e) Uma das vantagens de programar com TAD é o foco e preocupação com detalhes de
implantação em uma linguagem de programação.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 8/41
Quando dizemos que precisamos armazenar um valor, estamos nos referindo a reservar uma
parte da memória do computador para esse propósito.
Quando precisamos alocar memória para um conjunto de elementos como todas as cartas do
baralho, precisamos ter espaço na memória do computador para armazenar cada um dos
membros desse conjunto.
Os tipos de dados utilizados por um algoritmo podem ser classi�cados em dois grupos:
atômicos ou compostos. Os tipos atômicos são aqueles cujos valores não podem ser divisíveis,
por exemplo, números inteiros, números reais, caracteres e valores lógicos booleanos
(LAUREANO, 2008).
Tipos de Dados e Uso deTipos de Dados e Uso de
MemóriaMemória
reflita
Re�ita
No ramo da computação, existem diversas formas de representarmos
conceitos e objetos do mundo real. Até eventos aleatórios podem ser
representados por meio da geração de números randômicos, que,
dependendo do número sorteado, gera uma ação. O importante sempre é
buscar a melhor forma de implementação e pensar quais características são
necessariamente essenciais para o contexto.
Fonte: Elaborado pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=uczP… 9/41
Já os tipos compostos são aqueles resultantes pelo agrupamento de um conjunto de valores
em uma estrutura, assim também são chamados de tipos estruturados (LAUREANO, 2008). A
representação de um carro em um jogo digital seria um exemplo de tipo composto. Repare
que ele possui várias características, como: nome, marca, aceleração, velocidade �nal, teor de
frenagem, entre diversas outras. Todas esses atributos, quando agrupados em uma única
estrutura, de�ne um tipo de dados chamado Carro. Qualquer Carro que for criado dentro do
jogo terá as características que foram de�nidas.
Dados Homogêneos
Dentre as estruturas de dados existentes, temos aqueles que utilizam apenas um tipo de dado,
denominados dados homogêneos. As estruturas mais conhecidas são os vetores e matrizes,
muito utilizadas em jogos digitais.
Vetores
Vetor consiste em uma estrutura de dados linear que, para ter seus dados endereçados,
necessita apenas de um índice. De acordo com Laureano (2008), utiliza-se um vetor para
armazenar uma lista de valores do mesmo tipo, armazenando mais de um valor na mesma
variável.
Um vetor possui um determinado número de células, em que cada célula armazena um dos
valores. Cada célula possui seu índice, que a permite ser referenciada.
Os vetores possuem alocação estática , dessa forma, é preciso declarar, no momento da
criação, a quantidade de posições serão utilizadas. A alocação estática é quando uma parte
da memória é determinada em tempo de compilação, no momento que uma variável é
de�nida. Para o vetor, esse tipo de alocação também é sequencial, ou seja, os elementos são
alocados na memória, um ao lado do outro, o que facilita sua localização (LAUREANO, 2008).
Não é possível realizar a inclusão ou exclusão de índices durante a execução do programa, uma
vez que parte da memória já foi destinada para a variável.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 10/41
Figura 1.2 - Ilustração do jogo da memória com cores
Fonte: Elaborada pelo autor.
Por exemplo, um jogo da memória com cores, conforme ilustrado na Figura 1.2, no qual o
usuário deve repetir a sequência de cores que é apresentado e a cada rodada vencida, uma
nova cor é adicionada, pode ser representado mediante um vetor com inclusão de um novo
índice a cada rodada.
No Quadro 1.2, é possível veri�car a atribuição das cores ao vetor.
Quadro 1.2 - Atribuição das cores no vetor
Fonte: Elaborado pelo autor.
Todas as posições podem ser acessadas por meio de seu índice. Por exemplo, no vetor
jogoMemoria[2], estamos acessando o vetor na posição 2, encontraremos, então, a cor Azul.
Obs.: na maioria das linguagens de programação, o vetor inicia no índice 0, então, um vetor de
5 posições terá sua última posição acessada por meio do nomeVetor[4].
Os vetores podem ser classi�cados como dados homogêneos, uma vez que todo seu conteúdo
é composto do mesmo tipo e corresponde a uma mesma posição de memória, identi�cado
pelo mesmo nome, individualizado por índices.
Na memória, os índices de vetores são armazenados lado a lado.
Exemplo: vetorAnimais[3] = [Gato],[Cachorro],[Peixe];
vetorCores[2] = [Azul],[Rosa]
Rodada 1: Vermelho <vazio> <vazio> <vazio>
Rodada 2: Vermelho Azul <vazio> <vazio>
Rodada 3: Vermelho Azul Azul <vazio>
Rodada 4: Vermelho Azul Azul Verde
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 11/41
Na memória:
Figura 1.3 - Atribuição das cores no vetor
Fonte: Elaborada pelo autor.
É possível encontrar linguagens que suportam estruturas conhecidas como vetores dinâmicos.
Esse recurso de programação possibilita criar um vetor em tempo de execução, entretanto não
é possível adicionar ou remover índices ao vetor criado, uma vez que é necessário de�nir a
quantidade de elementos no momento da alocação de memória (LAUREANO, 2008).
Matrizes
Outra estrutura de dados homogênea é a matriz. Ela consiste em uma estrutura bidimensional
ou multidimensional que possui alocação estática e sequencial.
A matriztambém possui um tamanho de�nido, tendo todos os elementos do mesmo tipo, e
cada célula possui um único valor. Costuma ser representada por linhas e colunas, dessa
forma, precisa de dois índices para referenciar uma posição, na qual um índice representa a
linha e o outro índice representa a coluna.
Na memória, os elementos são alocados continuamente feito linha por linha ou coluna por
coluna.
Em jogos 2D, nos quais o personagem anda pela tela, a montagem do cenário pode ser feita
utilizando uma matriz, técnica denominada tile maps . O valor 0 representa o caminho pelo
qual onde o personagem pode andar, já o valor 1 representa um determinado obstáculo, o
valor 2 outro obstáculo e assim por diante. A Figura 1.4 ilustra um exemplo de uma matriz
voltada para criação de um cenário no jogo, no qual está a representação dos valores da
matriz, em (a), enquanto em (b) o cenário foi criado com base na técnica.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 12/41
Esse cenário é representado por uma matriz 6,8 (6 linhas por 8 colunas). Para acessar a posição
linha 5, coluna 5, podemos representar matrizCenario [4,4], lembrando que iniciamos no índice
0.
Ponteiros e Referências
Algumas linguagens de programação, como exemplo, a linguagem C/C++, implementam o
conceito de ponteiros. O ponteiro é um tipo de variável que guarda o endereço de memória
que é armazena a informação (LAUREANO, 2008).
Em outras linguagens, entretanto, o conceito de ponteiros está implícito na Programação
Orientada a Objetos. Nesses casos, não existe a possibilidade de acesso direto ao endereço de
memória em que está alocada a informação, pois todas as operações são realizadas de forma
interna.
Dessa forma, os tipos de referência a memória e acesso ao dado pode ser realizado de três
formas (DOVICCHI, 2008):
Direta: utilizando o nome da variável ou identi�cador.
Indexada: por meio do índice vetorial, matricial ou dimensional.
Endereçada: utilizando apontadores ou ponteiros em linguagens que suportam esse
recurso.
Uma confusão muito comum na utilização de ponteiros é entender quando trabalhamos com
seu valor e quando estamos trabalhando com a informação apontada por ele (LAUREANO,
2008). O valor do ponteiro é o endereço de memória da informação, enquanto que a
informação apontada por ele é um dado que possui um tipo de�nido (inteiro, real, caractere ou
até mesmo outro ponteiro). O Quadro 1.3 exempli�ca esse conceito.
Figura 1.4 - Ilustração da atribuição das cores no vetor
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 13/41
Quadro 1.3 - Conceito de ponteiros
Fonte: Elaborado pelo autor.
Como pode ser visto no Quadro 1.3, temos um exemplo de alocação de memória utilizando
duas variáveis. A variável Num1 é do tipo inteiro e foi armazenada na posição 0xcc02 .   A
variável PtNum1 é um ponteiro para o tipo inteiro, isto é, seu valor não armazena um inteiro e
sim um endereço da memória. No exemplo, o PtNum1 está apontando para a variável Num1 ,
ou seja, o valor de PtNum1 é o endereço de memória da variável Num1 .
De�nimos, então, que PtNum1 está apontando para Num1. O valor do ponteiro é 0xcc02, ou
seja, o endereço de memória de Num1. A informação apontada pelo ponteiro é 3, pois é a
informação que está no endereço de memória 0xcc02.
Dados Heterogêneos
Segundo Laureano (2008), os dados heterogêneos são estruturas de dados que podem
armazenar vários valores, porém esses valores são de tipos diferentes. Outro nome muito
utilizado para esse tipo de dado é registro .
Tipos de�inidos pelo programador
Algumas linguagens de programação possuem o paradigma orientado a objetos, como é o caso
do Java, C++, C# e Javascript.  Nesse paradigma, podemos de�nir atributos e métodos contidos
em um domínio do problema e organizá-los em uma estrutura, a qual chamamos de classes
(RICARTE, 2008). Todos elementos que forem criados usando essa estrutura serão chamados
de objetos daquela classe.
Imagine que você goste de jogar futebol e que criará uma classe chamada jogador. Quais as
características necessárias para representar a classe jogador? Podemos, por exemplo,
especi�car como características da classe jogador o seu nome, o número da camisa, posição
que você joga, número de gols feitos. Essas características são chamadas de atributos . Já para
as ações do jogador, precisamos analisar quais ele executa como, por exemplo, o toque de
bola, chute, desarme, corrida. Para essas ações damos o nome de métodos .
Memória RAM
Endereço 0xcc01 0xcc02 0xcc03 0xcc04 0xcc05 0xcc06 0xcc07 0xcc08
Nome
variável
Num1 PtNum1
Valor 3 0xcc02
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 14/41
Repare que, nesse caso, não estamos armazenando todas as informações do jogador como o
nome dos pais, número do CPF ou comida favorita. Conforme discutido na Seção 1.2, a
abstração de dados sugere que sejam representadas de modo computacional apenas as
informações importantes para o domínio do problema, e muitas das informações que
compõem a pessoa não são importantes para o contexto.
O código representa uma implementação da classe Jogador.
Com frequência, utilizamos os tipos de�nidos pelo programador com ponteiros. Essa técnica
permite alocar memória de forma dinâmica. A alocação dinâmica é quando se reserva parte
da memória em tempo de execução. Quando, durante a execução, a variável ou estrutura
deixar de ser utilizada, essa memória é liberada (LAUREANO, 2008).
praticar
Vamos Praticar
Quando trabalhamos com dados em um algoritmo, podemos notar que cada um possui uma natureza
distinta, que corresponde a números, letras, frases. De acordo com o tipo, existem operações que
podem ou não fazer sentido quando aplicados a eles.
Fonte: LAUREANO, Marcos. Estrutura de Dados com Algoritmo e C . São Paulo: Brasport,
2008.
Assinale a alternativa correta:
a) Matriz é uma estrutura de armazenamento heterogênea do tipo unidimensional.
b) Os vetores são estruturas de dados homogêneas que aceitam diversos tipos de dados.
c) Ponteiros sempre irão armazenar um endereço de memória, independente de qual é o tipo
da variável que estão apontando.
d) Uma vez que um endereço de memória foi armazenado em uma variável do tipo ponteiro, a
variável não poderá mais ser utilizada para armazenar outros valores.
e) Exemplos de linguagens de programação que implementam ponteiros são C, C++, Java e C#.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 15/41
Nesta seção, iremos aplicar os conceitos vistos de Tipo Abstrato de Dados na prática. Para isso,
vamos utilizar a linguagem javascript com HTML 5. Essa linguagem foi escolhida pela
simplicidade de instalação e acesso, bem como pelo crescente número de aplicações e jogos
que utilizam essa tecnologia.
Primeiro Projeto com HTML5
O HTML 5 trouxe diversas funcionalidades ao HTML que bene�cia todo tipo de desenvolvedor
da Web Aberta. Suas principais diretrizes de inovação são (MOZILLA, 2019a):
Semântica: possível referenciar de forma mais precisa os elementos e conteúdos.
Conectividade: novas formas de conexão e comunicação aos servidores.
O�-line e armazenamento: permitem novas estruturas de armazenamento de
dados e manutenção de forma o�-line .
Multimídia: facilita o uso de vídeos e áudios com tags e mecanismos particulares.
Grá�cos e efeitos 2D/3D: fornece diversas formas de representação e efeitos
grá�cos.
Acesso ao dispositivo: oferece diversos suporte a dispositivos de entrada e saída.
Estilização: viabiliza aos autores a escrita de tema mais arrojados.
Outra novidade do HTML 5 são os elementos Canvas e WebGL, que permitem �exibilizar a
interaçãode páginas HTML e jogos digitais. Esses elementos oferecem diversas funcionalidades
de criação de efeitos, animações e tratamento de eventos.
Segundo Estevarengo (2016), o HTML 5 é considerado uma linguagem simples, com boa curva
de aprendizado e que disponibiliza as funcionalidades necessárias para o aprendizado de
Iniciando um ProjetoIniciando um Projeto
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 16/41
diversos conceitos.
Conceitos Básicos de HTML
O HTML “[...] é uma linguagem especializada, dedicada à construção e exibição de páginas Web”
(HTML, 1999). Ela é formada basicamente por tags , que são comandos especiais interpretados
por um navegador Web, e também por texto comum, que pode ser apresentado para o usuário
diretamente (HTML, 1999).
Uma característica da linguagem HTML é que se por algum motivo ocorrer algum erro de
sintaxe no código, o trecho em questão será ignorado pelo navegador. Já na maioria das outras
linguagens, é lançado um erro e a execução do código ou programa é suspensa.
Na linguagem HTML, as tags começam e �nalizam, respectivamente, com os caracteres “<”
(menor) e “>” maior (HTLM, 1999). Assim, um comando HTML pode ser dado por uma palavra
reservada com a adição desses caracteres, como por exemplo: <title>, <html>, <body>, <hr>.
Alguns comandos precisam também da indicação de �nalização, representada pelo caractere
de divisão “/”, conforme o exemplo:
#Formatação original#
<h1>Título da página</h1>
#Formatação original#
Nesse exemplo, usamos um caractere de �nalização para indicar qual o texto que deverá ser
aplicado quando utilizamos o comando h1, empregado para criação de títulos da página.
Muitas tags permitem a utilização de parâmetros. Os parâmetros são instruções de
customização que podem ser informadas após a abertura das tags . É possível informar vários
parâmetros separando-os por meio de um espaço, conforme exemplo:
#Formatação original#
<input type="button" value="Clique">
#Formatação original#
No texto acima, inserimos uma tag input, responsável por criar elementos interativos para
formulários. Existem dois parâmetros : type , que de�nirá o tipo do elemento (nesse caso, um
botão), e value , que de�nirá o texto apresentado para o usuário dentro do botão.
Caso o(a) aluno(a) tenha pouco conhecimento na linguagem HTML, di�culdades na elaboração
e entendimento de algum código apresentado, as indicações de leitura são importantes para
apoio no seu desenvolvimento.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 17/41
Início com Canvas API
O Canvas API fornece mecanismos para desenho grá�cos por meio do elemento HTML canvas .
Esse elemento possui muitas formas de utilização, tanto para jogos como também para
visualização de dados e multimídia (MOZILLA, 2019b).
Antes de iniciarmos com o canvas, precisamos criar um arquivo no computador chamado
“pagina.html”. Como o próprio nome sugere, o arquivo terá o formato de um documento HTML
( HyperText Markup Language ), linguagem padrão para desenvolvimento de páginas Web, e que
deve possuir as quatro tags principais: html , head , title e body (MEYER, 2018).
Assim, seu código deve ser de�nido como segue:
#Formatação original#<html>
<head>
<title>Oi Mundo - Canvas HTML 5</title>
</head>
<body>
Esse é o elemento canvas:
<!-- colocar aqui a tag canvas -->
</body>
</html>
#Formatação original#
Lembre-se de colocar o código acima em um arquivo HTML, conforme foi dito anteriormente.
Você pode escrever o código em um bloco de notas, ou em outro editor de texto, e salvar o
arquivo especi�cando um nome e a extensão . html .
Note que no código existe um espaço para colocar o elemento canvas. Vamos trocar a linha em
questão pelo código abaixo:
#Formatação original#
<canvas id="canvas"></canvas>
#Formatação original#
É possível também especi�car alguns atributos desse objeto, como altura ( height ), largura (
width ) e estilo de borda ( border ). Esses atributos são colocados dentro da própria tag canvas .
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 18/41
Assim, após a de�nição dos estilos e da substituição, o seu código HTML deve ser parecido com
este:
#Formatação original#
<html>
<head>
<title>Oi Mundo - Canvas HTML 5</title>
</head>
<body>
Esse é o elemento canvas: <br \><br \>
<canvas id="canvas" width="400" height="300" style="border:1px solid #000000;">
</canvas>
</body>
</html>
#Formatação original#
Executando o Código
Para executar o código, podemos abrir o arquivo HTML em um navegador. A maioria dos
navegadores atuais possui as funcionalidades do HTML 5, então, certi�que-se que o seu
saiba mais
Saiba mais
Caso queira se aprofundar nos conceitos de estilização
HTML, CSS e Javascript, existem ótimas opções
disponíveis on-line , com exemplos e desa�os. O
W3Schools é uma boa opção para aprender, testar
exemplos e treinar.
Fonte: Elaborado pelo autor.
ACESSAR
https://www.w3schools.com/css/css_border.asp
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 19/41
navegador esteja atualizado e tenha esse suporte.
A Figura 1.5, a seguir, mostra o resultado obtido após esse procedimento:
Desenhando no Canvas com Javascript
Javascript é uma linguagem de programação que possui funcionalidades para acessar partes
de documentos HTML, incluindo estilos CSS. Ela é considerada uma linguagem interpretada, ou
seja, quando rodamos o programa, o código é interpretado pelo navegador e executado linha
por linha. Esse conceito é diferente de outras linguagens compiladas, como o C++, que todo o
código é transcrito para uma linguagem de mais baixo nível antes da execução pelo
processador (MEYER, 2018).
Para que seja possível utilizar os comandos do javascript em nossos projetos, temos
basicamente duas formas: inserir o código diretamente no arquivo .html ou criar um novo
arquivo com extensão .js, relacionada ao javascript. Aqui, iremos utilizar apenas a primeira
forma.
Nosso objetivo, nesta seção, é desenhar um elemento dentro do canvas utilizando a linguagem
javascript. Para isso, precisamos primeiro recuperar o elemento canvas do nosso HTML com o
comando document.getElementById():
#Formatação original#
const canvas = document.getElementById('canvas');
#Formatação original#
Em seguida, devemos de�nir onde queremos desenhar nossa forma, se é no plano
bidimensional (2D) ou tridimensional (3D). Para esse ambiente, damos o nome de contexto e
podemos recuperá-lo com o comando getContext():
Figura 1.5 - Visualização do elemento Canvas
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 20/41
#Formatação original#
canvas.getContext("2d");
#Formatação original#
Agora que já de�nimos qual o contexto do nosso trabalho, podemos desenhar nossas formas
nesse contexto. O canvas possui um sistema de coordenadas bidimensional, sendo que a
coordenada (0,0) está localizada no campo superior esquerdo, conforme ilustrado na Figura
1.8.
Figura 1.6 - Sistema de coordenadas do canvas
Fonte: Elaborada pelo autor.
Para desenhar um retângulo, utilizamos o método �llRect(), que como parâmetros para o
método informamos, respectivamente, comprimento, altura e coordenadas x e y no plano 2D.
Observe que x e y ligam o canto superior esquerdo da imagem à coordenada x e y na tela.
Além disso, podemos de�nir a cor do preenchimento com o atributo do contexto �llStyle.
#Formatação original#
ctx.�llStyle = 'green';
ctx.�llRect(10, 10, 150, 100);
#Formatação original#
O seu código deve ser parecido com este:
#Formatação original#<html>
<head>
<title>Oi Mundo - Canvas HTML 5</title>
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 21/41
</head>
<body>
Esse é o elemento canvas: <br \><br \>
<canvas id="canvas" width="400" height="300" style="border:1px solid #000000;">
</canvas>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext("2d");
ctx.�llStyle = 'green';
ctx.�llRect(10, 10, 150, 100);
</script>
</body>
</html>
#Formatação original#
A Figura 1.7, a seguir, mostra o resultado obtido após esse procedimento:
Desenhando uma Imagem no Canvas
Figura 1.7 - Desenhando um quadrado no canvas
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 22/41
Nesta seção, aprenderemos a exibir uma imagem no canvas. A imagem utilizada por ser
qualquer uma que você tenha disponível. Para os exemplos seguintes, utilizaremos a imagem
ilustrada na Figura 1.8:
Para desenhar a imagem que queremos no canvas, podemos salvar a imagem no mesmo
diretório do arquivo .html. Caso a imagem se encontrar em outro diretório, devemos
referenciar corretamente o caminho no código. Para o exemplo, o arquivo de imagem foi
renomeado para sprite.jpg .
Primeiro criaremos uma variável que será do tipo de um elemento image do HTML, conforme o
código seguinte. Isso permitirá alocar, em memória, uma estrutura de dados que conterá todos
os atributos e operadores responsáveis por exibir uma imagem:
#Formatação original#
var imagem = new Image();
#Formatação original#
Em seguida, precisamos especi�car qual o arquivo de imagem que será utilizado. Você pode
informar o caminho completo do arquivo ou, como é o caso desse exemplo, informar apenas o
nome do arquivo, uma vez que este se encontra no diretório da página HTML.
#Formatação original#
imagem.src = 'sprite.jpg';
#Formatação original#
No caso especí�co de uma imagem, podemos imprimi-la no canvas apenas quando ela já tiver
sido carregada pelo navegador. Assim, iremos utilizar o método drawImage(), relacionado ao
Figura 1.8 - Exemplo de sprite
Fonte: Adaptada de Freepik. com.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 23/41
contexto, dentro do evento onload() da imagem. O evento onload(), como o próprio nome
sugere, será executado após a imagem ter sido completamente carregada.
#Formatação original#
imagem.onload = function() {
ctx.drawImage(imagem, 110, 150, 80, 100);
}
#Formatação original#
Perceba que, no exemplo, passamos cinco parâmetros para o método drawImage(). O primeiro
parâmetro é a referência da imagem, no nosso caso, a variável imagem . O segundo e o
terceiro parâmetros são, respectivamente, as coordenadas x e y da localização da imagem no
canvas. O quarto e quinto parâmetros são, respectivamente, o comprimento e altura da
imagem.
O código completo deve ser parecido com o que está neste botão a seguir:
A Figura 1.9 mostra o resultado obtido após essas alterações:
Nesta seção, vimos como é possível trabalhar com o elemento canvas utilizando, de forma
conjunta, a linguagem de marcação HTML e a linguagem de programação Javascript. A partir de
agora, aplicaremos os Tipos Abstratos de Dados vistos durante esse curso (pilhas, �las, listas,
árvores etc.), utilizando exemplos práticos e contextualizados para o mundo dos games. Ótima
diversão!
Figura 1.9 - Visualização da imagem dentro do canvas
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 24/41
praticar
Vamos Praticar
A elaboração de um jogo pode ser complexa e desa�adora. Elementos como interface, suporte aos
efeitos de animação, dinâmica e uso de memória devem ser avaliados. Por isso, a escolha de uma boa
linguagem de programação aliada com uma game engine, muitas vezes, é decisiva para o resultado
�nal. Assinale a alternativa que corresponda às características presentes no HTML 5:
a) Semântica, conectividade, suporte multimídia e suporte aos dispositivos.
b) Semântica, balanceamento de carga no servidor, infraestrutura e inteligência arti�cial.
c) Conectividade, suporte multimídia, acesso às lojas digitais e dispositivos integrados.
d) Suporte multimídia, semântica, biometria, infraestrutura e gerador de problemas.
e) Suporte multimídia, adaptação e gerador de problemas, mecanismos prontos de telas e
inventários.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 25/41
Nas seções 2.1 e 2.2, vimos as características de dados homogêneos e heterogêneos e sua
utilização em jogos digitais. Veremos, agora, esses conceitos de forma prática, utilizando a
linguagem javascript com HTML. Para isso, criaremos um jogo de labirinto e usaremos uma
técnica bastante popular em jogos 2D chamada tilemaps .
Tiles e Tilemaps
Imagine que você gostaria de criar um jogo conforme a Figura 1.10, a seguir. Caso escolhesse
carregar a imagem inteira, uma grande quantidade de memória iria ser utilizada
desnecessariamente.
Aplicando o TAD na PráticaAplicando o TAD na Prática
Figura 1.10 - Cenário de um game
Fonte: PzUH / Freepik.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 26/41
Uma solução para esse caso é dividir a imagem em pequenos quadrados, ou tiles , conforme a
Figura 1.11.
Uma vez que dividimos essa imagem, podemos representar todo o mapa em uma matriz e
criar um mecanismo para imprimi-lo.
Criando um Labirinto
Iniciaremos nosso projeto de um jogo de labirinto. O objetivo do jogo é levar o jogador,
representado pelo quadrado vermelho, até a saída, representada pelo quadrado azul. A Figura
1.12 representa o labirinto desse exemplo, que será baseado no código disponível ao �nal da
seção.
O primeiro passo é de�nir uma matriz 8x8 constituída por números que representarão nosso
labirinto. Essa técnica é a aplicação do tile maps , que foi descrita na seção 2.1.2.
Representaremos os quadrados de cor ciano utilizando o valor 0 (zero), os quadrados verdes
Figura 1.11 - Exemplo de Tiles
Fonte: Yurakr / Freepik.
Figura 1.12 - Cenário do game labirinto
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 27/41
com o valor 1 (um) e o quadrado azul com o valor 2 (dois). Note que o quadrado vermelho,
correspondente ao jogador, não será representado na variável e explicaremos melhor sobre
isso nos parágrafos seguintes. Dessa forma, a programação do nosso tile maps �cará assim:
#Formatação original#
var mapa = [ [ 0, 0, 0, 0, 0, 0, 0, 1 ],
[ 0, 0, 1, 0, 1, 0, 1, 1 ],
[ 0, 0, 1, 0, 1, 0, 1, 2 ],
[ 1, 0, 1, 0, 1, 0, 1, 0 ],
[ 0, 0, 0, 0, 1, 0, 0, 0 ],
[ 0, 0, 1, 1, 0, 1, 0, 1 ],
[ 0, 0, 0, 0, 0, 1, 0, 1 ],
[ 1, 1, 1, 1, 1, 1, 0, 1 ] ];
#Formatação original#
Agora, representaremos nosso jogador e, para isso, utilizaremos a técnica de abstração para
um objeto. Quais atributos nosso jogador possui? Ele tem alguma habilidade? Algum efeito
especial? Possui pontos de vida, de ataque ou defesa?
No caso do jogo do labirinto, o jogador possui apenas a localização que ele se encontra, ou
seja, as coordenadas x e y no mapa. Como estamos trabalhando com matrizes, podemos
armazenar as coordenadas da própria matriz que o jogador estará. Nesse caso, será criado um
atributo chamado linha com referência à linha e também um outro atributo chamado coluna
com referência à coluna. Assim, a criação do nosso jogador �cará como segue:
#Formatação original#
var jogador= {
linha : 6,
coluna : 1
};
#Formatação original#
Repare que já de�nimos a posição inicial do nosso jogador: linha 6 e coluna 1.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 28/41
Para facilitar o desenvolvimento do jogo, representaremos também o canvas na programação,
uma vez que precisamos da área do jogo para desenhar os elementos na tela. Conforme vimos
nas seções 3.1.1, 3.1.2 e 3.1.3, usamos tanto o elemento canvas do HTML como também uma
propriedade chamada contexto, que de�ne se estaremos trabalhando no mundo
bidimensional ou tridimensional. Vamos representar esses dois atributos em um novo objeto,
conforme segue:
Formatação original#
var areaJogo = {
canvas : document.getElementById('canvas'),
contexto : this.canvas.getContext("2d")
}
Formatação original#
Repare que utilizamos os mesmos códigos vistos anteriormente, tanto para recuperar o canvas
como também o contexto.
Agora que já representamos o jogador, o mapa e a área do game, representaremos o tile . O tile
possui uma largura e altura e, além disso, implementaremos a operação para desenhá-lo no
contexto da área do jogo.
Formatação original#
var tile = {
largura : 30,
altura : 30,
desenhar : function (cor, linha, coluna) {
x = coluna * this.largura;
y = linha * this.altura;
ctx = areaJogo.contexto;
ctx.�llStyle = nomeCor(cor);
ctx.�llRect(x, y, this.largura, this.altura);
}
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 29/41
};
Formatação original#
Estamos de�nindo a largura e altura do tile como 30 pixels cada. Se existir a necessidade de
aumentar esse valor, basta alterar essas duas propriedades do objeto.
Já no método desenhar, passaremos como parâmetro a cor, a linha e a coluna. Tenha em
mente que desenharemos um tile de cada vez no cenário. Assim, quando desenharmos o tile
que está na linha 0 e coluna 0, por exemplo, a cor que será enviada por parâmetro é a mesma
que está na linha 0 e coluna 0 da variável mapa. Lembre-se também dos códigos das cores:
estamos representando o ciano com o valor 0 (zero), o verde com o valor 1 (um), o azul com o
valor 2 (dois) e o vermelho com o valor 3 (três). A Figura 1.13, em (a), ilustra a relação das linhas
e colunas com as cores do mapa, por sua vez, em (b), representa a coordenada que cada tile
precisará ser desenhado no canvas.
Como cada tile possui uma largura e altura especí�cas, as coordenadas a partir das quais serão
desenhadas no canvas dependem desses valores. Para calcular a coordenada x ,
multiplicaremos essa largura com a coluna atual. No caso da coordenada y , multiplicaremos a
altura com a linha atual. No caso da Figura 1.13 (b), por exemplo, considerando que a largura e
altura do tile seja de 30 pixels, o primeiro tile será inserido na coordenada (0,0) uma vez que x =
30*0 e y = 30*0. O segundo, por sua vez, será desenhado na posição (30,0), uma vez que x =
30*1 e y = 30*0, e assim consecutivamente.
Voltando ao código, precisamos converter os códigos das cores para seu nome correspondente
na linguagem HTML. Para isso, criaremos um método chamado nomeCor como segue. Se a cor
passada por parâmetro for 1 (um), por exemplo, o método retornará green , correspondente a
cor verde no HTML.
Formatação original#
function nomeCor(cor) {
Figura 1.13 - Coordenadas do cenário. Em (a), a relação entre as coordenadas com a matriz;
em (b), as coordenadas usadas no canvas.
Fonte: Elaborada pelo autor.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 30/41
switch (cor) {
case 1:
return "green";
case 2:
return "blue";
case 3:
return "red";
default:
return "cyan";
};
}
Formatação original#
Desenhando o Cenário
Para todos os tiles no canvas, criaremos uma nova função que será executada no início do
carregamento da página HTML e quando o jogador apertar uma tecla do teclado.
Na implementação do método, utilizaremos dois laços de repetição for . O laço mais externo
será responsável por iterar entre as linhas da matriz. O laço mais interno será responsável por
iterar entre as colunas. No caso da linguagem de programação javascript, o índice de uma
matriz inicia-se por 0 (zero) e, dessa forma, considerando que a matriz seja 8x8, seu índice deve
iniciar com 0 (zero) e ir até 7 (sete).
Formatação original#
function desenharCenario() {
for (var linha = 0; linha <= 7; linha++)  {
for (var coluna = 0; coluna <= 7; coluna++) {
if (this.jogador.linha == linha && this.jogador.coluna == coluna)
tile.desenhar(3, linha, coluna);
else
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 31/41
tile.desenhar(mapa[linha][coluna], linha, coluna);
}
}
}
Formatação original#
Dentro do laço interno, chamaremos o método que criamos para desenhar o tile . Entretanto,
precisamos nos atentar para a posição que se encontra o jogador. Se o jogador estiver na
coordenada, desenharemos o tile do jogador, representado pela cor 3 (vermelho).   Caso
contrário, desenharemos o tile com a cor que está na na posição atual da variável mapa .
Lendo as Ações do Jogador
Um jogador pode interagir com o jogo digital de diversas maneiras. As formas mais comuns
são: mouse , teclado e controles de jogo. Nesta seção, abordaremos a leitura do teclado,
utilizando alguns eventos do HTML e javascript.
O HTML possui um evento especial para lermos as ações do jogador enviadas via teclado: o
método keydown . Esse método é disparado toda vez que o jogador aperta uma tecla. Quando
disparado, também é enviado para ele um parâmetro, chamado de event , que possui a
informação da tecla pressionada.
O HTML permite a chamada de um método de nossa autoria toda vez que o método keydown é
invocado. Para isso, utilizamos o comando addEventListener do javascript, como segue o
código:
Formatação original#
document.addEventListener('keydown', pressionarTecla);
Formatação original#
Repare que no código acima precisamos criar o método próprio que, nesse caso, chamaremos
de pressionarTecla. Agora, precisamos programar esse método.   Devemos lembrar também
que o método precisa receber um parâmetro que conterá a informação da tecla selecionada:
Algumas particularidades do código acima:
Para resgatar o código da tecla pressionada, utilizamos o atributo keyCode da variável
evento.
Cada tecla possui um código: a seta esquerda tem seu valor 37, a seta para cima valor
38, a seta para direita valor 39 e seta para baixo valor 40. Os códigos das teclas
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 32/41
podem ser pesquisadas neste site: <https://keycode.info/>.
É uma boa prática, quando estamos trabalhando com eventos no teclado, utilizarmos
o comando preventDefault(). Esse comando garante que a tecla pressionada irá
disparar o evento keypress apenas uma vez.
No trecho de código acima, recebemos o evento e recuperamos qual a tecla digitada. Se a tecla
digitada for uma das setas, ela executará o evento preventDefault como segurança, para
garantir que não seja disparado outro evento keypress várias vezes.
Após, veri�camos qual tecla de fato foi pressionada. Em todos os casos será chamado método
atualizarJogador(), entretanto passamos por parâmetro uma identi�cação de qual tecla foi
pressionada.
Código Completo
Segue o código completo do desenvolvimento. Veri�que que diversas partes do código foram
explicadas no decorrer das seções 4.2.1 e 4.2.2. Caso haja dúvidas sobre algum comando, por
favor, veri�que as referências e sugestões de leituras complementares.
praticar
Vamos Praticar
técnica Tilemaps , conhecida também por Tile-based Maps , é bastanteutilizada na indústria de jogos,
principalmente em jogos 2D. Ela consiste em uma representação numérica, na qual cada valor será
substituído por uma imagem, que chamamos de tiles .
Fonte: SPUY, R. V. D. The Advanced Game Developer's Toolkit : Create Amazing Web-
based Games with JavaScript and HTML5. 1. ed. São Paulo: Apress. 2017.
Assinale a alternativa que corresponda à correta implementação da técnica tile maps :
a) Para aplicação dessa técnica, é importante ter conhecimento sobre o tamanho do tile , as
dimensões do mapa e a quantidade de tempo na fase.
b) Em vez de criarmos uma matriz com os códigos correspondentes aos tiles , podemos
armazenar em memória as próprias imagens várias vezes.
c) É mais relevante e facilitador a implementação dessa técnica com vetores em vez de
matrizes.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 33/41
d) Para aplicação dessa técnica, é importante ter conhecimento sobre o tamanho do tile , as
dimensões do mapa e a forma de renderização das tecnologias utilizadas.
e) Existem formas mais e�cientes de desenharmos cenários complexos em jogos 2D, como
exemplo, a utilização de apenas uma imagem de background .
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 34/41
indicações
Material Complementar
LIVRO
A arte de game design: o livro original
Jesse Chell
Editora: Elsevier
Ano: 2010
ISBN: 8535241981
Comentário: Documentos descritivos são importantes na criação
dos projetos de jogos digitais, pois possibilitam aos desenvolvedores
planejar diversas situações e con�itos que surgem na etapa de
produção. Caso queira aprender mais sobre esse conteúdo, o livro A
arte de Game Design , do autor Jesse Chell, é uma ótima escolha.
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 35/41
LIVRO
HTML5 e CSS3: Domine a web do futuro
Lucas Mazza
Editora: Casa do Código
Ano: 2014
Comentário: Caso queira se aprofundar mais nas funcionalidades e
marcações do HTML 5, esse livro descreve diversas técnicas com
exemplos práticos e funcionalidades úteis do cotidiano.
FILME
Indie Game - The Movie
Ano: 2012
Comentário: Trata-se de um documentário sobre videogames, seus
criadores e sua pro�ssão.
TRA ILER
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 36/41
conclusão
Conclusão
Nesta unidade, tivemos a oportunidade de conhecer conceitos sobre Tipos Abstrato de Dados
(TAD). Nesse contexto, aprendemos um pouco mais sobre a abstração e a importância de
identi�car os elementos importantes de um contexto, para implementá-los em uma linguagem
de programação.
Vimos, também, o TAD aplicado em alguns mecanismos de jogos. No caso do uso de matrizes,
podemos representar cenários completos com de�nição de valores, o que diminui o uso de
memória e permite facilitar a recuperação dos eventos que estão ocorrendo no jogo.
Por �m, você pôde compreender, ainda, uma forma de aplicar os conceitos vistos na unidade
de forma prática, com a criação de um jogo de labirinto.
referências
Referências
Bibliográ�cas
BRITTO, A. Blender 3D Jogos e Animações Interativas . São Paulo: Novatec, 2011.
CERQUEIRA, R.; CELES, W.; RANGEL, J. L. Introdução a estrutura de Dados. In: CERQUEIRA, R.;
CELES, W.; RANGEL, J. L. Estruturas de Dados – PUC-Rio. Rio de Janeiro: Elsevier: 2008, p. 1-9.
Disponível em: http://www.ic.unicamp.br/~ra069320/PED/MC102/1s2008/Apostilas/Cap09.pdf .
Acesso em: 21 jan. 2020.
DOVICCHI, J. Estrutura de Dados . Florianópolis: UFSC, 2008. Disponível em:
https://www.inf.ufsc.br/~joao.dovicchi/pos-ed/ebook/e-book_estrut_dados_dovicchi.pdf .
Acesso em: 21 jan. 2020.
ESTEVARENGO, L. F. Desenvolvendo Jogos Mobile com HTML5 : Usando Phaser, Intel XDK e
Cordova/PhoneGap. São Paulo: Novatec, 2016.
http://www.ic.unicamp.br/~ra069320/PED/MC102/1s2008/Apostilas/Cap09.pdf
https://www.inf.ufsc.br/~joao.dovicchi/pos-ed/ebook/e-book_estrut_dados_dovicchi.pdf
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 37/41
FERRARI, R. et al . Estrutura de dados com jogos . Rio de Janeiro: Elsevier, 2014.
HTML 4.0: passo a passo lite. 1. ed. São Paulo: Pearson, 1999.
LAUREANO, M. Estrutura de dados com Algoritmos e C . São Paulo: Brasport, 2008.
MEYER, J. The Essential Guide to HTML5 : Using Games to Learn HTML5 and JavaScript. 2. ed.
São Paulo: Apress, 2018.
MOZILLA. HTML 5 . 2019a. Disponível em: https://developer.mozilla.org/pt-
BR/docs/Web/HTML/HTML5 . Acesso em: 22 jan. 2020.
MOZILLA. Noções de tile e tilemaps . 2019b Disponível em: https://developer.mozilla.org/pt-
BR/docs/Games/Techniques/Tilemaps . Acesso em: 22 jan. 2020.
RICARTE, I. L. M. Estrutura de Dados . Campinas: Unicamp, 2008. Disponível em:
http://calhau.dca.fee.unicamp.br/wiki/images/0/01/EstruturasDados.pdf . Acesso em: 22 jan.
2020.
SAYÃO, L. F. Modelos teóricos em ciência da computação - abstração e método cientí�co. Ci.
Inf ., Brasília, v. 30, n. 1, p. 82-91, jan./abr. 2001 Disponível em:
http://www.scielo.br/pdf/ci/v30n1/a10v30n1 . Acesso em: 21 jan. 2020.
SCHUYTEMA, P. Design de games : uma abordagem prática. São Paulo: Cengage Learning,
2008.
SPUY, R. V. D. The Advanced Game Developer's Toolkit : Create Amazing Web-based Games
with JavaScript and HTML5. 1. ed. São Paulo: Apress. 2017.
TENENBAUM, A. M.; LANGSAM, Y.; AUGENSTEIN, M. J. Estruturas de Dados Usando C . 1. ed.
São Paulo: Pearson Universidades, 1995.
W3SCHOOLS. HTML Canvas Coordinates . 2019. Disponível em:
https://www.w3schools.com/graphics/canvas_coordinates.asp . Acesso em: 22 jan. 2020.
https://developer.mozilla.org/pt-BR/docs/Web/HTML/HTML5
https://developer.mozilla.org/pt-BR/docs/Games/Techniques/Tilemaps
http://calhau.dca.fee.unicamp.br/wiki/images/0/01/EstruturasDados.pdf
http://www.scielo.br/pdf/ci/v30n1/a10v30n1
https://www.w3schools.com/graphics/canvas_coordinates.asp
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 38/41
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 39/41
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 40/41
03/04/2023, 21:05 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=S7S6ENZny18%2blDVzjSI6gg%3d%3d&l=VPic%2fFbeAnDPgloJidbuAg%3d%3d&cd=ucz… 41/41

Continue navegando