INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIAS E … · Os conceitos de Física utilizados nesse...
Transcript of INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIAS E … · Os conceitos de Física utilizados nesse...
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIAS E TECNOLOGIA CATARINENSE –
CAMPUS AVANÇADO SOMBRIO
ÉRIK SCHEFFER BEHENCK
JOÃO PAULO MARQUES VOTRI
JOGO DE SINUCA COM OBSTÁCULOS
Sombrio (SC)
2015
ÉRIK SCHEFFER BEHENCK
JOÃO PAULO MARQUES VOTRI
JOGO DE SINUCA COM OBSTÁCULOS
Trabalho de Conclusão de Curso apresentado como requisito para a obtenção do título de Técnico em Informática Integrado ao Ensino Médio, no Curso de Técnico em Informática Integrado ao Ensino Médio, do Instituto Federal de Educação, Ciência e Tecnologia Catarinense – Campus Avançado Sombrio.
Orientador: Prof. Me. Iuri Sônego Cardoso
Sombrio (SC)
2015
ÉRIK SCHEFFER BEHENCK
JOÃO PAULO MARQUES VOTRI
TRABALHO DE CONCLUSÃO DE CURSO
Esta Produção Técnico Informática Integrado ao Ensino Médio foi julgada adequada para obtenção do título de Técnico em Informática e aprovada pelo Curso de Técnico em Informática do Instituto Federal de Educação, Ciência e Tecnologia Catarinense – Campus Avançado Sombrio
Área de Concentração: Desenvolvimento de software
Sombrio, 19 de janeiro de 2015.
Prof. Me. Iuri Sônego CardosoInstituto Federal Catarinense – Campus Avançado
Sombrio Orientador
Profª. Aline de Brittos ValdatiInstituto Federal Catarinense – Campus Avançado
Sombrio Membro
Profª. Esp. Alini dos Santos AntoneliInstituto Federal Catarinense – Campus Avançado
Sombrio Membro
DEDICATÓRIA
Dedicamos às nossas famílias, que souberam entender os nossos momentos de ausência dedicados ao estudo.
AGRADECIMENTOS
Agradecemos a Deus por ter nos dado saúde e força para superarmos todas as dificuldades.
A este Instituto, seu corpo docente, direção e administração que nos deram essa oportunidade de ensino.
Ao Prof. Me. Iuri Sônego Cardoso, pela orientação, confiança e apoio.
Agradecemos nossas famílias que sempre estiveram presentes nos momentos mais importantes, e aos amigos que nos ajudaram.
Aos nossos colegas, com quem formamos um laço fraterno e respeitoso. Impossível esquecer!
A todos que direta ou indiretamente fizeram parte da nossa formação, o nosso muito obrigado.
EPÍGRAFE
Tente uma, duas, três vezes e se possível tente a quarta, a quinta e quantas vezes for necessário.
Só não desista nas primeiras tentativas, a persistência é amiga da conquista. Se você quer chegar a onde a maioria não chega, faça o que a maioria não faz.
Bill Gates
RESUMO
O trabalho apresenta o desenvolvimento de um jogo simulador de sinuca, onde o
jogador deverá mirar em alguma das extremidades da mesa para tentar desviar de uma
barreira. Para o desenvolvimento, foram utilizados conceitos de matemática como ângulos
que fazem com que a bola mude a sua trajetória ao se chocar com um objeto ou com a
mesa, e conceitos da física como força e atrito. A força é utilizada quando o jogador tira a
bola da inércia e a coloca em movimento e o atrito está relacionado à força de contato
que atua quando dois corpos entram em choque. O atrito diminui a velocidade da bola a
cada movimento que ela faz. O jogo pode ser utilizado como uma forma divertida de
aprender sobre ângulos, que aparecem na tela durante o jogo.
Palavras-chave: Ângulos. Física. Jogo. Matemática.
ABSTRACT
The paper presents the development of a pool simulator game where the player must aim
at some end of the table to try to dodge a barrier. For development, math concepts were
used as angles that make the ball change its trajectory to collide with an object or the
table, and physics concepts as force and friction . The force is used when the player takes
the ball inertia and sets in motion and friction is related to the contact force acting when
two bodies collide . The friction slows the ball every move she makes . The game can be
used as a fun way to learn about angles on the screen during the game.
Keywords: Angles. Physics. Game. Mathematics.
LISTA DE QUADROS
Quadro 1: Código de Atualização da tela..........................................................................24
Quadro 2: Verificação de colisão…...................................................................................24
Quadro 3: Código de Reflexão..........................................................................................27
Quadro 4: Código de Atrito................................................................................................28
Quadro 5: Desenhar objetos na tela .................................................................................29
Quadro 6: Desenhar a linha da trajetória..........................................................................30
Quadro 7: Calcular o final da linha da trajetória................................................................30
Quadro 8: Comandos do jogo...........................................................................................31
Quadro 9: Código para o cálculo da pontuação................................................................32
Quadro 10: Códigos para a barra de força 1.....................................................................32
Quadro 11: Códigos para a barra de força 2.....................................................................33
Quadro 12: Códigos para a barra de força 3.....................................................................33
LISTA DE FIGURAS
Figura 1: Reflexão da luz.…..............................................................................................14
Figura 2: Atrito sobre superfície rugosa.............................................................................17
Figura 3: Mesa de sinuca …..............................................................................................18
Figura 4: Exemplo de ângulo.............................................................................................19
Figura 5: Comparação de imagem....................................................................................22
Figura 6: Trajetória da bola................................................................................................29
Figura 7: Tela do jogo........................................................................................................34
SUMÁRIO
1. INTRODUÇÃO.................................................................................................................122. OBJETIVOS.....................................................................................................................132.1 Objetivo geral.................................................................................................................132.2 Objetivos específicos.....................................................................................................133. REFERENCIAL TEÓRICO...............................................................................................143.1 Física..............................................................................................................................143.1.1 Reflexão......................................................................................................................143.1.2 Força...........................................................................................................................153.1.3 Atrito............................................................................................................................153.1.4 Colisão........................................................................................................................173.2 Matemática.....................................................................................................................183.2.1 Trigonometria..............................................................................................................183.2.2 Ângulos.......................................................................................................................193.3 Programação de computadores....................................................................................193.3.1 Algoritmos...................................................................................................................203.3.2 Linguagens de programação......................................................................................203.3.3 Java.............................................................................................................................213.3.4 Desenhos em java......................................................................................................213.4 Técnicas de simulação da física em jogos eletrônicos..................................................223.4.1 Animação....................................................................................................................233.4.2 Verificação de colisão.................................................................................................244. MATERIAL E MÉTODOS.................................................................................................264.1 MATERIAL......................................................................................................................264.2 MÉTODOS.....................................................................................................................264.2.1 Código para reflexão...................................................................................................274.2.2 Código para atrito.......................................................................................................284.2.3 Desenhar objetos na tela ...........................................................................................284.2.4 Desenhar a linha da trajetória da bola........................................................................294.2.5 Comandos do jogo......................................................................................................314.2.6 Código para pontuação ..............................................................................................323.2.7 Códigos para a barra de força....................................................................................325. RESULTADO E DISCUSSÃO .........................................................................................346. CONSIDERAÇÕES FINAIS.............................................................................................36REFERÊNCIAS....................................................................................................................37
12
1. INTRODUÇÃO
O mercado de jogos eletrônicos no Brasil está em constante expansão
fazendo com que as grandes empresas do mundo relacionadas a esta categoria
invistam em nosso país. Atualmente universidades públicas e privadas e também
empresas desenvolvedoras e distribuidoras de jogos oferecem cursos relacionados
à área. (MAFRA, 2012).
A presente pesquisa é um estudo elaborado sobre a construção de um jogo
eletrônico de sinuca utilizando ângulos, força e atrito, visto que seus empregos são
importantes nas áreas de Matemática e Física.
Percebe-se assim, a necessidade de estudar sobre trigonometria, ângulos,
força, atrito, reflexão, e elaboração de softwares. Uma vez que aplicados
corretamente, estes conceitos podem promover novas descobertas em suas áreas e
também em conjunto, fazendo com que cada vez mais estudantes se interessem
pela construção de jogos.
Esta pesquisa está organizada da seguinte forma: Capítulo 2 aborda os
objetivos do estudo; Capítulo 3 encontra-se o referencial teórico, apresentando
assuntos de Física, Matemática e Programação; Capítulo 4 explica os materiais e os
métodos utilizados na elaboração do software. No capítulo 5, explana-se o resultado
final do software e as considerações finais. No capítulo 6, são apresentados os
resultados obtidos ao final da pesquisa e da construção do jogo, também abordando
perspectivas para a continuidade do presente estudo.
13
2. OBJETIVOS
Neste capítulo serão apresentados o objetivo geral e os objetivos específicos
do trabalho.
2.1 Objetivo geral
Construir um jogo eletrônico de sinuca com ângulos, com o auxílio da
Matemática e da Física, onde seja possível acertar objetos, sendo que entre eles e a
bola existem obstáculos; estimulando a aprendizagem sobre ângulos.
2.2 Objetivos específicos
• Utilizar a trigonometria para cálculo de reflexão ao colidir com objetos,
fazendo com que o sistema apresente ângulos e o jogador possa
acertar o alvo;
• Empregar algoritmos de colisão de objetos para verificação da
existência de choque entre a bola e a mesa;
• Aplicar a força de atrito no deslocamento de objetos para que a
velocidade da bola diminua conforme sua movimentação;
• Demonstrar ângulos de reflexão aplicados após colisões.
14
3. REFERENCIAL TEÓRICO
Como aporte para este trabalho realizou-se uma pesquisa teórica sobre
alguns conceitos de Física, Matemática e Programação.
3.1 Física
Os conceitos de Física utilizados nesse trabalho são Reflexão, Força, Atrito e Colisão.
3.1.1 Reflexão
Fonseca (2011) diz que na Física o fenômeno da reflexão incide na alteração
de direção da propagação da energia, após entrar em contato com uma superfície
refletora. Como exemplo de reflexão, pode-se utilizar um jogo de sinuca, em que
uma bola rebatida nas laterais da mesa age como um raio de luz sendo refletido em
um espelho.
Figura 1: Reflexão da luz.
Fonte: Aulas de Física e Química.
15
A Figura 1 apresenta um exemplo onde uma luz choca-se com um espelho,
gerando assim uma reflexão no sentido contrário.
3.1.2 Força
Para Calvão (2007), força indica um agente capaz de alterar a circunstância
de repouso ou de movimento de um corpo. Uma força é formada pelos seguintes
elementos:
a) Ponto de aplicação – é a parte do corpo onde a força atua diretamente;
b) Sentido – é a orientação que tem a força na direção (esquerda, direita,
cima, baixo);
c) Direção – é a linha de atuação da força (horizontal, vertical, diagonal);
d) Intensidade – é o valor da força aplicada.
Segundo Marco Aurélio da Silva (2008):
Força designa um agente capaz de modificar o estado de repouso ou de
movimento de um determinado corpo. Porém, falar de força parece ser
muito abstrato, mas basta pensar em todas as tarefas diárias que
realizamos para que possamos perceber que força é algo que está presente
em nosso dia a dia. Por exemplo: quando empurramos ou puxamos um
objeto dizemos que estamos fazendo força sobre ele. Existem vários tipos
de força: força elétrica, força magnética, força gravitacional, força de atrito,
força peso, força normal e outras.
3.1.3 Atrito
Segundo Miranda (2012), o conceito de atrito está relacionado à força de
contato que atua quando dois corpos entram em choque. A força de atrito é
equivalente às superfícies e contrária ao movimento relativo. Quanto maior a força
16
nessa ocasião, maior será o atrito.
Ainda para Miranda (2012), existem dois tipos de atrito: atrito estático e atrito
cinético.
Atrito estático é o atrito que ocorre quando a força aplicada não é suficiente
para mexer o objeto, ou seja, a força aplicada é equiparada com a força de atrito. A
força de atrito estático tem intensidade variável. (MIRANDA, 2012).
O atrito cinético ocorre quando a força aplicada é maior que a força de atrito
em destaque. Nesses eventos, o corpo entra em movimento, deixando de ser
estático, e passando a ser cinético. Assim, o atrito cinético é o atrito que ocorre
quando os corpos se movimentam. (MIRANDA, 2012).
Para Machado (2013), pode-se qualificar também, as superfícies,
basicamente em dois tipos, rugosa e totalmente lisa. A classificação é definida
quanto à força de atrito.
A superfície rugosa dificulta o movimento de corpos, exemplo: a superfície de
madeira possui rugosidade, tornando-se mais complicado mover um objeto sobre
ela. (MACHADO, 2013).
Uma superfície totalmente lisa é uma superfície considerada ideal, em que o
nível de atrito é igual a zero. Estas superfícies não existem na realidade, somente na
teoria. (MACHADO, 2013).
Um exemplo prático no que se refere ao atrito, é que as mesas de sinuca de
bares geralmente são cobertas por um tecido sintético chamado acrílico. Já a lã é
mais utilizada em mesas oficiais. A vantagem deste tecido se dá pelos fios, que
aumentam o atrito entre a bola e a mesa, permitindo maior controle sobre a jogada e
diminuindo a velocidade da bola. (PORTILHO, 2013).
A Figura 2 apresenta um homem empurrando um objeto sobre uma superfície
rugosa. Como já explicado essa superfície dificulta a locomoção de objetos sobre a
mesma.
17
Figura 2: Atrito sobre superfície rugosa.
Fonte: Aulas de Física e Química.
3.1.4 Colisão
Para Kítor (2012), quando dois objetos se movem de modo a concorrer por
uma mesma posição em um dado instante de tempo, pode-se dizer que estão em
rota de colisão. Ou seja, se pelo menos um dos objetos está se movimentando de
forma que no referente instante de tempo ele atinja o segundo objeto, diz-se que
houve uma colisão entre os dois objetos.
De acordo com Domiciano Marques (2013).
Imagine uma partida de sinuca na qual uma bola é atirada contra outras
bolas gerando colisões. Nessas colisões podem ocorrer diversas situações,
como, por exemplo, uma bola para e outra segue em movimento, uma bola
segue atrás da outra, uma bola segue adiante e outra volta.
A Figura 3 ilustra a simulação de uma jogada qualquer em uma partida de
sinuca. A bola número 2 choca-se com a extremidade direita da mesa e volta; ocorre
também uma colisão entres as bolas número 3 e número 8, indo uma em direção
contrária a outra.
18
Figura 3: Mesa de sinuca.
Fonte: Os autores (2014).
3.2 Matemática
Os conceitos da matemática utilizados nesse trabalho foram Trigonometria e Ângulos.
3.2.1 Trigonometria
A trigonometria, segundo Noé (2013) é a parte da Matemática responsável
pela relação que existe entre os lados e os ângulos de um triângulo. Nos triângulos
retângulos que possuem um ângulo de 90º, as relações são formadas pelos
chamados ângulos notáveis, 30º, 45º e 60º, que possuem valores constantes
representados pelas relações seno, cosseno e tangente. Ressalta-se que a
trigonometria objetivou a criação dos estudos das funções trigonométricas,
relacionadas aos ângulos.
19
3.2.2 Ângulos
Noé (2013) diz que ângulo é a região do plano limitada por duas semirretas
de mesma origem. As semirretas ganham o nome de lados do ângulo e a origem
delas, de vértice do ângulo. A unidade habitual de medida de ângulo, conforme o
sistema internacional de medidas é o grau, representado pelo símbolo º.
Os ângulos podem ser classificados de acordo com suas medidas:
a) Agudo – ângulo com medida menor que 90º;
b) Reto – ângulo com medida igual a 90º;
c) Obtuso – ângulo com medida maior que 90º;
d) Raso – ângulo com medida igual a 0º ou 180º.
A Figura 4 apresenta as quatro classificações dos ângulos.
Figura 4: Exemplo de ângulos
Fonte: Brasil Escola.
3.3 Programação de computadores
Esta sessão apresenta conceitos relacionados a programação de
computadores.
20
3.3.1 Algoritmos
Segundo Pereira (2009), um algoritmo é uma sequência lógica, finita e
definida de comandos que devem ser seguidos para resolver um problema ou
executar uma tarefa. Nada mais é do que uma receita que mostra passo a passo os
procedimentos necessários para a resolução de uma tarefa.
Ainda para Pereira (2009), algoritmos são utilizados de forma intuitiva e
automática diariamente quando são executadas tarefas comuns. Por exemplo,
quando é necessário fazer a troca de uma lâmpada, é executa uma sequência de
passos, ou seja, considerado um algoritmo.
Os algoritmos são empregados na área de programação, apresentando as
etapas que precisam ser realizadas para que um programa execute as tarefas que
lhe são encarregadas. (PEREIRA, 2009).
3.3.2 Linguagens de programação
De acordo com Pacievitch (2012), a linguagem de programação é
simplesmente como se escreve o algoritmo. O problema para muitos é o que dizer
para o computador fazer, ou seja, o que é almejado. No momento de programar
alguns passos são necessários, como declarar variáveis. Essas variáveis podem ser
escritas por letras ou números, que simulam um valor que pode ser mudado a
qualquer instante.
Ainda para Pacievitch (2012), cada variável tem um espaço na memória para
guardar seus dados, contudo existem vários tipos de dados, sendo os mais comuns:
a) Numérico - todo e qualquer tipo de número, positivo ou negativo;
b) Reais - podem ser positivos, negativos ou decimais;
c) Caractere - são os textos, podendo conter números, entretanto estes não terão
função matemática. (PACIEVITCH, 2012).
Entender lógica de programação, para Pacievitch (2012) é saber o melhor
21
modo de escrever um código para o computador interpretar corretamente. É
conseguir se comunicar com a máquina a partir de uma linguagem de programação.
Segundo Gabriel Duarte (2013)
Podemos imaginar o computador como uma super calculadora, capaz de
fazer cálculos muito mais rápido que nós, mas para isso devemos dizer para
o computador o que deve ser calculado e como deve ser calculado. A
função das linguagens de programação é exatamente essa, ou seja, servir
de um meio de comunicação entre computadores e humanos.
3.3.3 Java
Java é uma linguagem de programação orientada a objetos, criada na década
de 1990. Os programas escritos nesta linguagem podem ser executados vários
sistemas operacionais, o que ajuda muito em sua expansão. Java possui várias
versões, sua atualização é constante, pois para a criação de novos programas é
preciso estar sempre avançando. (TEIXEIRA, 2009). Exemplos de códigos fonte
escritos nesta linguagem são demonstrados no decorrer do trabalho.
3.3.4 Desenhos em java
Para Silveira Neto (2008), a simples criação de desenhos em java se dá pela
utilização de classes, sendo possível fazer retângulos, círculos, arcos e etc. Também
é possível pintar o contorno e o preenchimento dos desenhos com cores. As cores
exibidas nas telas dos computadores são definidas pelos seus componentes
vermelho, verde e azul. Esses componentes, denominados valores RGB (em inglês
red, green e blue), contém valores inteiros entre 0 e 255. A combinação de valores
gera novas cores. Exemplo: misturado o verde e o vermelho se obtêm o amarelo.
Desenhos são formados por imagens. Conforme Soares (2010), “Uma
imagem digital é uma imagem bidimensional, que emprega um código binário de
22
modo a permitir o seu processamento, transferência, impressão ou reprodução”.
Nos desenhos em java pode-se perceber a aplicação de pixel em sua
constituição. De acordo com Fonseca (2008), o pixel é a menor parte de uma
imagem digital. Ao visualizar uma imagem com elevado índice de proximidade, é
possível identificar pequenos quadrados coloridos nela, que somados, formam o
desenho completo.
A Figura 5 apresenta uma comparação de imagem vista de longe (à
esquerda) e de perto (à direita).
Figura 5: Comparação de imagem.
Fonte: Os autores (2014).
3.4 Técnicas de simulação da física em jogos eletrônicos
Esta sessão apresenta conceitos referentes a técnicas de simulação da física
em jogos eletrônicos, tais como: animação e verificação de colisão.
23
3.4.1 Animação
Segundo Sanches (2010), animação em jogos funciona pelo mesmo princípio
que em filmes ou desenhos animados: a tela é desenhada uma certa quantidade de
vezes por segundo (geralmente em jogos o mínimo aceitável é de 30 vezes por
segundo) em cada novo desenho surge uma imagem um pouco diferente da
anterior. Cada vez que a tela é desenhada tem-se um novo quadro (ou frame) e
como o olho humano não consegue entender que as imagens estão sendo trocadas
a cada quadro, o cérebro é iludido e encara as alterações como movimento. As
animações em jogos eletrônicos estão cada vez mais desenvolvidas, fazendo com
que os personagens praticamente ganhem vida; servem para mostrar o estado do
personagem, se está correndo ou parado, trazendo grande realidade para os jogos.
O Quadro 1 apresenta parte do código Java responsável por desenhar os
frames.
Na linha 1, o laço de repetição while, faz com que o trecho entre as linhas 2 e
8 se repitam, dando o efeito de animação.
Na linha 2, a função atualizar() é utilizada para atualizar variáveis a cada
quadro por segundo, como por exemplo, as variáveis de colisão.
Na linha 3, a função desenharGraficos() é usada para desenhar toda a parte
gráfica do jogo, como os objetos que ficam na mesa.
Na linha 5, a função Thread.sleep() serve para fazer o programa pausar
durante um certo tempo, que deve ser expresso em milissegundos, no caso do jogo,
a quantia de quadros por segundo (FPS – Frames per second) divida por 1000 ms
ou 1 segundo.
A constante FPS guarda um valor inteiro que indica a quantia de quadros por
segundo que um jogo será executado, no caso do jogo, seu valor é 60, ou seja, a
cada 1 segundo, todo código que estiver inserido nas funções atualizar() e
desenharGraficos() será atualizado 60 vezes.
24
Quadro 1: Código de atualização da tela.
123456789
while (true){ atualizar(); desenharGraficos(); try{ Thread.sleep(1000/FPS); }catch (Exception e){ System.out.println("Thread interrompida!!!"); }}
Fonte: Os autores (2014).
3.4.2 Verificação de colisão
Detecção de colisão, em simulações físicas, jogos e geometria
computacional, envolvem algoritmos para verificação de colisões, que verificam
intersecções de dois corpos sólidos. A simulação do que acontece quando uma
colisão é detectada é chamada de resposta de colisão. Algoritmos de detecção de
colisão são componentes básicos de motores de jogos. (Brazil, 2008).
A verificação de uma colisão no jogo é simples. É preciso testar se o
retângulo correspondente à primeira textura intercepta o retângulo referente a uma
segunda textura. Caso intercepte significa que ocorreu uma colisão. (Brazil, 2008).
O código utilizado para a verificação de colisão é apresentado no Quadro 2.
Quadro 2: Verificação de colisão.
1234
public boolean colisao(int pontoX, int pontoY, int x, int y, int w, int h){ return (pontoX >= x && pontoX <= x + w) && (pontoY >= y && pontoY <= y + h); }
Fonte: Os autores (2014).
As variáveis x e y são coordenadas do objeto com que será identificado a
colisão. As variáveis w e h são, respectivamente, os valores de largura e altura do
25
objeto que está nas coordenadas x e y descritas anteriormente.
As variáveis pontoX e pontoY são coordenadas de um ponto que será idêntica
a colisão do objeto descrito acima. Este ponto irá definir se houve colisão entre as
variáveis x e y, w e h e uma das extremidades da bola: esquerda, direita, cima e
baixo.
A função return() retornará o que estiver dentro dos parênteses, que neste
caso será true (verdadeiro) caso a colisão estiver ocorrendo ou false (falso) caso ela
não esteja.
26
4. MATERIAL E MÉTODOS
Este capítulo apresenta os materiais e métodos utilizados no desenvolvimento
do software, explicando os códigos usados em funções do jogo.
4.1 MATERIAL
Na elaboração do projeto foram empregados o programa NetBeans IDE, que
pode ser utilizado para o desenvolvimento de programas em várias linguagens, e a
linguagem de programação Java, utilizada para a escrita dos códigos de
programação. A escolha destas ferramentas deu-se pela aprendizagem durante o
curso.
Foram pesquisadas linhas de código disponíveis na internet para a utilização
e criação do algoritmo de animação e para o algoritmo de colisão. Um dos fóruns
utilizados foi Seu Mestre na Web1.
Na construção do jogo foram aplicados alguns conceitos da Física, tais como
reflexão e atrito. Esses conceitos servem para controlar a movimentação da bola. E
conceitos da Matemática, como trigonometria e ângulos, que foram utilizados para
mudar a direção da bola no momento do contato com uma superfície sólida.
4.2 MÉTODOS
Para o desenvolvimento do software, além dos códigos encontrados na
internet, foram criados vários códigos de programação. A seguir serão demonstrados
trechos de códigos utilizados como métodos para a criação de funções no jogo.
1 http://seumestredaweb.blogspot.com.br
27
4.2.1 Código para reflexão
Esta sessão trata sobre o código utilizado no jogo para simular a reflexão. O
Quadro 3 apresenta o código responsável por esta simulação.
Quadro 3: Código de reflexão.
1234567891011121314151617181920
if (colidiuEsquerda){ bola.setX(bloco1.getX() + bloco1.getWidth() + 5); bola.setXspeed(bola.getXspeed() * -1); bola.setAngle(Math.toDegrees(Math.atan2(bola.getSin(), -bola.getCos())));}if (colidiuDireita){ bola.setX(bloco1.getX() - bola.getWidth() - 5); bola.setXspeed(bola.getXspeed() * -1); bola.setAngle(Math.toDegrees(Math.atan2(bola.getSin(), -bola.getCos())));}if (colidiuCima){ bola.setY(bloco1.getY() + bloco1.getHeight() + 5); bola.setYspeed(bola.getYspeed() * -1); bola.setAngle(Math.toDegrees(Math.atan2(-bola.getSin(), bola.getCos())));}if (colidiuBaixo){ bola.setY(bloco1.getY() - bola.getHeight() - 5); bola.setYspeed(bola.getYspeed() * -1); bola.setAngle(Math.toDegrees(Math.atan2(-bola.getSin(), bola.getCos())));}
Fonte: Os autores (2014).
A primeira linha de código dentro da função if (linha 1) modifica a posição da
bola para que ela não entre dentro do objeto e fique travada. A nova posição neste
caso será o lado esquerdo do bloco (posição do bloco mais a largura) e um
acréscimo de 5 pixeis. A segunda linha de código (linha 2) multiplica a velocidade
horizontal da bola por -1, fazendo com que ela inverta seu valor. A terceira linha de
código (linha 3) atualiza o valor do ângulo em que a bola está se movendo, serve
para evitar erros no movimento da bola. Estas ações são executadas quando é
detectado uma colisão à esquerda (linha 1).
28
4.2.2 Código para atrito
Esta sessão apresenta o código elaborado para simular o atrito, explicando
suas aplicabilidade. Este código é apresentado no Quadro 4.
Quadro 4: Código de atrito.
12345678910
if (bola.getSpeed() != 0){ tempFriction += 0.075; if (tempFriction >= 1){ friction = (int) tempFriction; tempFriction -= (int) tempFriction; }}else{ friction = 0; tempFriction = 0;}
Fonte: Os autores (2014).
Primeiramente o trecho de código verifica se a bola está se movendo (linha
1), caso esteja, o jogo retira 0.075 de velocidade da bola a cada passo do jogo (linha
2), mas como a velocidade só pode ser inteira, o jogo vai acumulando o valor em
uma variável temporária (tempFriction) (linha 2) e quando o valor dentro dessa
variável for maior que 1, uma condição if acrescenta o valor na variável friction que
por sua vez diminui a velocidade da bola (linha 3).
4.2.3 Desenhar objetos na tela
Elaborou-se um algoritmo para desenhar objetos na tela. Este é apresentado
parcialmente pelo Quadro 5.
29
Quadro 5: Desenhar objetos na tela.
12345
Graphics bbg = backBuffer.getGraphics();bbg.setColor(Color.white);bbg.fillOval(bola.getX(), bola.getY(), bola.getWidth(), bola.getHeight());bbg.fillRect(bloco1.getX(), bloco1.getY(), bloco1.getWidth(), bloco1.getHeight());bbg.fillRect(bloco2.getX(), bloco2.getY(), bloco2.getWidth(), bloco2.getHeight());
Fonte: Os autores (2014).
A primeira linha de código é responsável por carregar o local onde a bola e os
obstáculos serão desenhados (neste caso, o objeto que desenha a mesa na tela).
Na linha 2, o código setColor() muda a cor do desenho atual, no caso, para
branco.
Na linha 3, fillOval() desenha um objeto oval na tela, usando as variáveis de
posição e tamanho da bola.
Nas linhas 4 e 5, fillRect() desenha um objeto retangular, usando as variáveis
de posição e tamanho dos obstáculos.
4.2.4 Desenhar a linha da trajetória da bola
É necessário apresentar ao jogador a direção para onde a bola será
arremessada após a tacada. No jogo, isto é demonstrado por uma linha azul que
parte do centro da bola em direção à direção da tacada. A Figura 6 apresenta a bola
(apresentada como um círculo preto para diferenciar do fundo) e sua linha de
trajetória.
Figura 6: Trajetória da bola.
Fonte: Os autores (2015).
30
Apresenta-se a seguir o código para a linha da trajetória da bola, com
explicação de suas funções.
Após a nova cor ser aplicada (linha 1), o jogo desenha a linha que mostra
para onde a bola deve se direcionar (linha 2) usando as funções que indicam a
posição do centro da bola (bola.getXMid() e bola.getYMid()) para desenhar o início
da linha e as variáveis que indicam as coordenadas de encerramento da linha
(bola.getXLine2() e bola.getYLine2()) que são resultantes de cálculos dentro de suas
funções como pode-se ver no quadro 7.
No Quadro 6 apresenta-se o código que desenha a linha da trajetória da bola.
Quadro 6: Desenhar a linha da trajetória.
123
bbg.setColor(Color.blue);bbg.drawLine(bola.getXMid(), bola.getYMid(), bola.getXLine2(), bola.getYLine2());
Fonte: Os autores (2014).
Os comandos calculam a posição final da linha, que indica a trajetória da bola,
utilizando os conceitos de seno e cosseno do ângulo escolhido pelo jogador, após
serem multiplicados por 100 (linhas 2 e 5), eles resultam em tamanho adequado
para a linha, tornando-a mais visível ao jogador.
O Quadro 7 apresenta o código para calcular o final da linha da trajetória da
bola.
Quadro 7: Calcular o final da linha da trajetória.
123456
public int getXLine2() { return (int) (Math.cos(this.angleradians) * 100 + this.getXMid());}public int getYLine2() { return (int) (Math.sin(this.angleradians) * 100 + this.getYMid());}
Fonte: Os autores (2014).
31
4.2.5 Comandos do jogo
Explana-se nesta sessão sobre os códigos utilizados para os comandos do
jogo.
A primeira função if checa se a tecla seta para cima foi pressionada. Caso
seja, o código diminui uma unidade na variável responsável pelo ângulo para onde a
bola está direcionada, fazendo com que a direção para onde a bola irá partir no
momento que for lançada, mude.
A segunda função if é muito semelhante à primeira, porém esta verifica se a
tecla seta para baixo foi pressionada e, ao contrário dá primeira, aumenta em uma
unidade o valor da unidade responsável pelo ângulo da bola, também a direcionando
para uma posição diferente.
A terceira função if será responsável por identificar se a tecla espaço foi
pressionada. Se for, ela muda a velocidade da bola de acordo com o valor da força
da tacada no momento em que a tecla foi pressionada.
No Quadro 8 apresenta-se o código dos comandos do jogo.
Quadro 8: Comandos do jogo.
123456789
if(e.getKeyCode()==e.VK_UP){ bola.setAngle(bola.getAngle()-1);}if(e.getKeyCode()==e.VK_DOWN){ bola.setAngle(bola.getAngle()+1);}if(e.getKeyCode()==e.VK_SPACE){ bola.setSpeed((int)power);}
Fonte: Os autores (2014).
32
4.2.6 Código para pontuação
Quando o número de tacadas for diferente de 0, o jogo divide o valor de 1000
pelo número de tacadas. O resultado é adicionado à pontuação atual do jogador. O
código de pontuação é apresentado no Quadro 9.
Quadro 9: Código para o cálculo da pontuação.
123
if (tacadas != 0){ pontuacao+=(int) (1000/tacadas); }
Fonte: Os autores (2014).
3.2.7 Códigos para a barra de força
A barra de força serve para orientar o jogador sobre a força que será aplicada
a bola no momento da tacada. Esta barra alterna seu tamanho no decorrer do
tempo, aumento e diminuindo automaticamente. O jogador pode escolher a força
que deseja aplicar à bola, pressionando a tecla espaço no momento que a barra
estiver no tamanho desejado.
O Quadro 10 apresenta o código que o jogo utiliza para variar a força da bola.
Este código é executado em um laço de repetição que repete 60 vezes por
segundo2. Na primeira linha de código, a função if verifica se o jogo está ou não
adicionando força; caso esteja, adiciona um valor de 0,5 à variável power; caso não
esteja, o jogo retira 0,5 desta variável.
Quadro 10: Código para a barra de força 1.
1234
if (adding){ power += 0.5;}else{ power -= 0.5; }
Fonte: Os autores (2015).
2 Este código de variação de força é executado junto com a atualização da tela do jogo.
33
A força da tacada possui como valor máximo 15 e valor mínimo 0. Quando um
destes limites é atingido, se a força estava aumentando, ela começa a diminuir; se
estava diminuindo, começa a aumentar. O Quadro 11 apresenta o código que faz
esta mudança.
Quadro 11: Código para a barra de força 2.
123456
if (power>15){ adding = false;}if (power<=0){ adding = true;}
Fonte: Os autores (2015).
Na primeira linha, a função if verifica se a variável power contém um valor
maior que 15; caso contenha, é atribuído o valor false à variável adding, ou seja,
indica que a força deve diminuir no decorrer do tempo. Se a variável power conter
um valor menor ou igual a zero, o valor a ser atribuído a variável adding é true,
indicando que a força deve aumentar conforme o tempo passa.
O valor da força é utilizado para definir a largura da barra de força. A cada
atualização da tela, a barra é desenhada de acordo com o valor da força. O Quadro
12 apresenta o código para desenhar a barra de força na tela do jogo.
Quadro 12: Código para a barra de força 3
1 bbg.fillRect(25, janelaH - 30, (int) power*4, 20);
Fonte: Os autores (2015).
34
5. RESULTADO E DISCUSSÃO
Como resultado foi obtido um jogo de sinuca onde existem barreiras e o
jogador deve desviá-las utilizando a reflexão, com o objetivo de acertar o alvo. A
força com que a bola é arremessada, é definida pelo tamanho da barra de força no
momento da tacada. Esta barra aumenta e diminui de tamanho conforme o tempo
passa. No momento em que o jogador tecla espaço, ocorre o arremesso da bola.
No jogo existem 6 tipos de mesa, algumas com um obstáculo e outras com
dois obstáculos. A mesa muda após o jogador acertar o alvo. O tamanho do alvo
também muda conforme a mesa. A pontuação é definida por 1000/t, sendo que t é o
número de tacadas. Ao final das 6 mesas, aparece na tela a soma do total de pontos
conquistado pelo jogador durante a partida.
Cada vez que o jogador pressiona as teclas direcionais do teclado, o ângulo
diminui (tecla baixo) ou aumenta (tecla cima). Esta mudança de ângulos aparece na
tela, ao lado direito da mesa, pela indicação Ângulo: nº, em que n é o ângulo de
direção da bola; conforme apresentado pela Figura 7. Os ângulos mudam a direção
da bola após o choque com uma superfície sólida.
Figura 7: Tela do jogo
Fonte: Os autores (2014).
35
Além do ângulo de direção da bola, são apresentados os ângulos de pós-
colisão vertical e pós-colisão horizontal. O ângulo de pós-colisão vertical apresenta
o ângulo que a bola assumirá após uma colisão no eixo vertical (eixo x). Similar a
este, o ângulo de pós-colisão horizontal apresenta o ângulo obtido após uma colisão
no eixo horizontal (eixo y). A Figura 7 apresenta a tela do jogo:
36
6. CONSIDERAÇÕES FINAIS
Nesta pesquisa foram revisados alguns conceitos e classificações sobre
trigonometria, ângulo, força, atrito, reflexão, e elaboração de softwares, segundo os
autores estudados. Além disso, foi elaborado um jogo de sinuca que envolve os
conceitos citados acima de acordo com os objetivos propostos.
Os objetivos foram alcançados, a trigonometria foi empregada para o cálculo
de reflexão, algoritmos de colisão foram utilizados para a verificação de choques
entre a bola e alguma superfície sólida.
O jogo desenvolvido para a conclusão do curso poderá ser utilizado em aulas
de Física e Matemática com o intuito dos alunos compreenderem melhor o conceito
e aplicação de ângulos.
Com a realização do trabalho foram obtidos conhecimentos que auxiliarão no
transcorrer da vida, pois não foram adquiridas apenas habilidades técnicas do
estudo, mas também como agir em conjunto, algo importante para conviver em
sociedade; teve-se que aprender a conviver com os limites e dificuldades um do
outro, assim a amizade tornou-se mais forte e verdadeira.
A elaboração desta pesquisa foi considerada gratificante pelos pesquisadores,
pois o estudo revelou a importância da aplicação dos conceitos de física,
Matemática e Programação para a elaboração de softwares de qualidade.
O resultado obtido foi satisfatório, o programa pode ajudar o jogador a
aprender sobre ângulos, visto que, muitas pessoas não compreendem o conceito de
ângulo e sua aplicação, pode ser utilizado na hora do lazer ou de estudar o
conteúdo.
O trabalho pode ter continuidade em seu desenvolvimento, adicionando novas
funções, tais como; caçapa, acerto ao alvo valendo pontos e ranking. Possibilitando
assim, uma expansão do projeto em uma nova formação acadêmica.
37
REFERÊNCIAS
AULAS DE FISICA E QUIMICA. ATRITO. Disponível em: <http://www.aulas-fisica-quimica.com/9f_13.html>. Acessado em 19 de janeiro de 2015.
AULAS DE FISICA E QUIMICA. REFLEXÃO DA LUZ. Disponível em: <http://www.aulas-fisica-quimica.com/8f_15.html>. Acessado em 19 de janeiro de 2015.
BRASIL ESCOLA. Colisões. Disponível em: <http://www.brasilescola.com/fisica/colisoes.htm>. Acessado em 23 de abril de 2014.
BRASIL ESCOLA. Força. Disponível em: <http://www.brasilescola.com/fisica/forca.htm>. Acessado em 23 de abril de 2014.
BRAZIL, André Luiz . Colisões em jogos. Disponível em: <http://www.selectgame.com.br/wp-content/uploads/Aula9.pdf>. Acessado em 30 de abril de 2014.
CAELUM. Java. Disponível em: <http://www.caelum.com.br/apostila-java-orientacao-objetos/o-que-e-java/#2-3-maquina-virtual>. Acessado em 30 de abril de 2014.
CALVÃO, Alexandre Ortiz. Força. Disponível em: <http://www.ebah.com.br/content/ABAAAAkNEAL/resumao-fisica>. Acessado em 20 de novembro de 2014.
FONSECA, Diogo. Reflexão. Disponível em: <http://fisicaoquadrado.wordpress.com/fisicafix/actividades-de-fisica-com-o-crocodile-physics/optica_reflexao-e-refraccao/>. Acessado em 21 de novembro de 2014.
FONSECA, Willian. Pixel. Disponível em: <http://www.tecmundo.com.br/imagem/203-o-que-e-pixel-.htm>. Acessado em 21 de novembro de 2014.
GRUPO ESCOLAR. Atrito. Disponível em: <http://www.grupoescolar.com/pesquisa/atrito.html>. Acessado em 23 de abril de 2014.
GRUPO ESCOLAR. Força. Disponível em: <http://www.grupoescolar.com/pesquisa/forcas.html>. Acessado em 23 de abril de
38
2014.
INFOESCOLA. Java. Disponível em: <http://www.infoescola.com/informatica/historia-do-java/>. Acessado em 30 de abril de 2014.
INFOESCOLA. Linguagens de programação. Disponível em: <http://www.infoescola.com/informatica/o-que-sao-linguagens-de-programacao/>. Acessado em 30 de abril de 2014.
INFOESCOLA. Linguagens de programação. Disponível em: <http://www.infoescola.com/informatica/o-que-sao-linguagens-de-programacao/>. Acessado em 30 de abril de 2014.
INFOPÉDIA. Colisão. Disponível em: <http://www.infopedia.pt/$colisao-(fisica);jsessionid=emDQp86c7urI5JDW0Lm57g>. Acessado em 23 de abril de 2014.
JAVA GAMES 2D. Animação. Disponível em: <http://seumestredaweb.blogspot.com.br/2012/06/java-games-2d-tutor-3.html>. Acessado em 30 de abril de 2014.
JAVA GAMES 2D. Colisão. Disponível em: <http://seumestredaweb.blogspot.com.br/2012/06/java-games-2d-tutorial-parte-11.html>. Acessado em 30 de abril de 2014.
KITOR, Glauber Luciano. Colisão. Disponível em: <http://www.infoescola.com/fisica/colisao-inelastica/>. Acessado em 20 de novembro de 2014.
MACHADO, Nuno. Atrito. Disponível em: <http://www.aulas-fisica-quimica.com/9f_13.html>. Acessado em 22 de novembro de 2014.
MAFRA, Aldilene. O crescimento e as expectativas do mercado de games no Brasil. Disponível em: <http://www.uva.br/noticias/o-crescimento-e-expectativas-do-mercado-de-games-no-brasil >. Acessado em 21 de novembro de 2014.
MIRANDA, Juliana. Atrito. Disponível em: <http://www.grupoescolar.com/pesquisa/atrito.html>. Acessado em 22 de novembro de 2014.
NETO, Silveira. Desenhos em java. Disponível em: <http://silveiraneto.net/2008/01/15/desenhando-com-java-e-netbeans/>. Acessado em 22 de novembro de 2014.
NOÉ, Marcos. Ângulos. Disponível em: <http://www.brasilescola.com/matematica/angulos.htm>. Acessado em 22 de novembro de 2014.
39
NOÉ, Marcos. Trigonometria. Disponível em: <http://www.brasilescola.com/matematica/trigonometria.htm>. Acessado em 20 de novembro de 2014.
PACIEVITCH, Yuri. Linguagens de programação. Disponível em: <http://www.infoescola.com/informatica/logica-de-programacao/>. Acessado em 22 de novembro de 2014.
PEREIRA, Ana Paula. Algoritmos. Disponível em: <http://www.tecmundo.com.br/programacao/2082-o-que-e-algoritmo-.htm>. Acessado em 22 de novembro de 2014.
PORTILHO, Gabriela. Colisão. Disponível em: <http://mundoestranho.abril.com.br/materia/como-funciona-uma-mesa-de-bilhar>. Acessado em 21 de novembro de 2014.
SANCHES, Bruno Crivelari. Animação. Disponível em: <http://www.pontov.com.br/site/arquitetura/51-programacao/140-tecnicas-de-animacao-3d>. Acessado em 24 de novembro de 2014.
SOARES, Ana Catarina. Imagem. Disponível em: <https://anasoares1.wordpress.com/2010/11/22/introducao-a-imagem-digital-definicao-de-pixel-e-cores-digitais/>. Acessado em 23 de novembro de 2014.
TABELA DE CORES HTML. RGB. Disponível em: <http://erikasarti.net/html/tabela-cores/>. Acessado em 21 de novembro de 2014.
TEIXEIRA, Maria. Java. Disponível em: <http://www.ceunes.ufes.br/downloads/2/mariateixeira-EC.Programa%C3%A7%C3%A3o%20III.Cap%C3%ADtulo%203.Item%201-2.2009.2.pdf>. Acessado em 21 de novembro de 2014.