Principal

Ver. 0.0

Ver. 0.1

Ver. 0.2

Ver. 0.2

Ver. Final

Versão 0.0: Especificação

Objetivos e descrição:

O objetivo final desse projeto é desenvolver um jogo de bilhar em 3D. O jogo deve estar funcional e permitir a interatividade do usuário. Várias das idéias e recursos citados aqui estarão citados poderão ser alterados durante o curso de acordo com o que o cronograma permitir.

A idéia para o cenário consiste em até dois jogadores disputando um jogo de bilhar. Pretende-se implementar pelo menos a modalidade de jogo mais tradicional, e o Bola 8 se o tempo permitir.

Cenário:

O cenário será a mesa de bilhar, devidamente modelada e texturizada contendo as seis caçapas. Embora o jogador obviamente não tenha liberdade para move o objeto central (a bola branca) a não ser em situações específicas, ele terá controle da câmera antes de efetuar a jogada.

(imagem apenas ilustrativa)

Objetos:

Paredes da mesa: As beiradas da mesa fornecem o limite para a movimentação das bolas. O número de objetos em especifico dependerá de como for feito o processo de modelação, e serão importantes tanto para a geração dos gráficos como para o calculo do movimento das bolas. Essas paredes serão estáticas e não terão animação.

Bolas: A bola branca e as demais bolas, cujo número pode depender de acordo com a modalidade do jogo implementada e é claro com o decorrer do uma partida, consistem em esferas com texturas distintas para diferencia-las entre si. Esses objetos terão dois componentes de animação. O deslocamento de acordo com a movimentação calculada pelo impacto de outras bolas ou do taco, e uma rotação para emular o efeito da bola rodando na mesa. Essa rotação deverá ter como ponto de referência o centro da esfera, e deverá se dar em torno de um eixo paralelo ao plano da mesa, e perpendicular ao vetor de velocidade, ou o deslocamento da bola do quadro anterior para o atual.

Taco: O taco servira como um indicador visual ao jogador do local onde ele está acertando a bola branca. Fora a interação dando a velocidade inicial a bola branca, ele não afetara mais o mundo do jogo a não ser por sua presença visual.

Iluminação: As imagens de exemplo nesse artigo, criadas em um programa de geração de imagens 3D, possuim uma iluminação unidirecional voltada para baixo, com intensidade mais frace, e um fonte tipo de "spot" em um dos cantos, acima da mesa. Para o jogo, um modelo semelhante deve ser adotado, com possíveis fontes adicionais para criar mais sombras se o desempenho for adequado.

Extras: Se o cronograma permitir, poderão ser criados objetos extras que não interferirão com funcionamento do jogo mas aumentaram o nível de detalhes visuais. Exemplo: Uma caixa de giz. A presença de cenários externos a mesa também não está descartada.

(imagem apenas ilustrativa)

Dinâmica e funcionamento:

Na vez do jogador, ele primeiro terá o controle do posicionamento da câmera. Duas modalidades estão planejadas nesse aspecto. Uma envolve uma câmera presa com foco na bola branca, e outra completamente livre.

Ao selecionar para iniciar a jogada, o jogador posicionará o taco, utilizando as setas ou o mouse. Um botão determinara para fazer a tacada. A força dependerá de quanto tempo o botão permaneceu pressionado.

Uma vez determinada a velocidade e direção inicial da bola branca, o programa irá animar os movimentos e colisões, e computar se alguma bola caiu na caçapa ou não. Se por exemplo a bola branca foi uma delas, então ela será reposta a mesa e oferecido o controle de onde posiciona-la.

Segue um fluxograma dessa interação geral:

A parte mais complexa fica obviamente na etapa “Realiza jogada, mostrando a animação para o usuário”. Isso envolve tanto o trabalho de calcular o movimento das bolas, como modificar a imagem diversas vezes para representar esse movimento para o usuário.

Caso de uso para a realização de uma jogada:

Este caso de uso simplificado já dá uma idéia de como se pretende implementar a parte de calculo de movimento e animação. O usuário entra com a direção e força do taco, que é repassada para a classe Controlador de Movimento. Esta classe, implementada em Java, será a responsável por calcular a movimentação das bolas, fornecendo vetores de velocidade e corrigindo as trajetórias ao ocorrerem colisões. Também é necessário que a velocidade vá diminuindo com o tempo, para que as bolas voltem ao repouso e não fiquem se movimentando indefinidamente. A classe Controlador de Gráficos, que utilizará primariamente OpenGL ira utilizar esses dados para modificar a posição e rotação de bolas de acordo a gerar a impressão de movimento, bem como adicionar os demais modelos que não estejam envolvidos diretamente mas devem estar presentes na imagem.

É importante ressaltar novamente que, dependendo das dificuldades encontradas e do cronograma, as informações citada aqui podem ser alteradas consideravelmente.