Nome do Jogo

Chuck's Backyard Fun

Sinopse do Jogo

Após anos e anos de guerras e brigas desenfreadas, Chuck Norris resolveu se aposentar. Apesar de sentir falta de trocar tiros ao lado de seus colegas do Comando Delta, ele começou a passar os dias descansando em sua mansão em Oklahoma. Mas não por muito tempo. Um herói como Chuck não consegue ficar tanto tempo parado sem atirar em alguma coisa. Foi aí que resolveu colocar em uso seu tanque de guerra especial, que ele ganhou do exército dos Estados Unidos como prêmio de reconhecimento por parar sozinho o ataque de dois porta aviões soviéticos à costa americana, para destruir objetos em seu quintal, só para ouvir o som reconfortante de explosões por perto. Você tem a honra de entrar na pele de Chuck e propiciar a ele momentos relaxantes ao lado de seu tanque no quintal da mansão Norris!

Descrição dos Cenários

O cenário da batalha consiste de um terreno acidentado, ou seja, não plano, gerado a partir de um mapa topográfico representado em um arquivo texto. O lançador de projéteis deverá ser um modelo 3D complexo e articulado de um tanque, lido também de um arquivo texto que segue o padrão VTK (e no futuro provavelmente no formato Wavefront/OBJ, que fornece mais informações sobre o modelo) e os tipos de projéteis serão uma bala de canhão e dois tipos diferentes de mísseis. Os projéteis diferem entre si em massa, forma e poder de destruição, e também serão lidos de arquivos texto.

São apresentadas a seguir imagens de alguns dos modelos que serão utilizados na composição do cenário do jogo. As fotos foram feitas dos modelos visualizados no software de modelagem 3DS Max:

Modelo de tanque a ser utilizado

Exemplo de modelo de projetil a ser utilizado

Inicialmente o alvo será um carro, cujas lanternas emitem luz durante a noite, e posteriormente outros alvos serão adicionados para aumentar a dificuldade e a diversão do jogo. Haverá também no cenário objetos neutros, como estátuas, por exemplo, que não deverão ser destruídos; caso estes objetos sofram danos, serão descontados pontos do jogador.

O cenário será a céu aberto, com um skybox representando o horizonte e o sol como fonte de luz ambiente no cenário diurno. Durante a noite, a luz ambiente será fornecida pela lua, e a imagem do sky-box também será diferente.

Pretendemos, ao final do projeto, adicionar alguns efeitos a fim de enriquecer a qualidade gráfica do jogo, caso o desenvolvimento siga o cronograma e ainda reste tempo suficiente. Entre esses efeitos, destacam-se a adição de sombras, sons, suavização da superfície do solo utilizando curvas paramétricas, efeitos avançados de câmera e efeitos de explosão dos alvos.

Dinâmica do Jogo

O objetivo do jogo é destruir todos os alvos gerados em posições aleatórias no início do jogo, utilizando o menor número possível de projéteis e causando o mínimo dano aos objetos neutros que fazem parte do cenário. Antes de cada tiro, o jogador terá liberdade para movimentar o tanque pelo terreno. O controle do jogador influencia também o ângulo e a direção de disparo, a força do disparo e o tipo de projétil utilizado.

O projétil é então lançado e sua trajetória é calculada baseada nos parâmetros escolhidos pelo jogador, na força exercida pela gravidade e pela resistência do ar. Ao atingir o solo, o projétil provoca uma área de destruição cujo raio é proporcional a seu poder de destruição. Os alvos e os objetos do cenário que se encontrarem inseridos na área de destruição sofrerão danos e, caso estes sejam suficientes, serão destruídos.

O jogador terá à sua disposição um número pré-determinado de projéteis com os quais deve causar o maior dano possível aos alvos. Para cada acerto, serão somados pontos ao placar do jogador, e para cada objeto neutro do cenário atingido, pontos serão descontados.

É apresentado a seguir um fluxograma que resume as ações executadas pelo jogador e pelo sistema durante o andamento de uma partida:

Fluxograma da dinâmica do jogo

Casos de Uso

1) Carregar terreno e posicionar objetos

Objetivo

Este caso de uso tem como objetivo carregar as configurações do jogo, incluindo o terreno acidentado, lançador (tanque), projéteis e alvos.

Fluxo Básico

O sistema deve abrir um arquivo texto de configuração, onde estarão descritos as seguintes informações:

  • Wireframe: Indica se é para renderizar os objetos em wireframe.
  • Terrain: Nome do arquivo texto que é o mapa topográfico para a criação do terreno.
  • Launcher: Nome do arquivo que contém o modelo do lançador
  • Projectile1: Nome do arquivo do primeiro projetil
  • Projectile1 Mass: Massa (em kg) do primeiro projétil
  • Projectile1 Power: Poder de destruição do segundo projétil
  • Projectile2: Nome do arquivo do segundo projetil
  • Projectile2 Mass: Massa (em kg) do segundo projétil
  • Projectile2 Power: Poder de destruição do primeiro projétil
  • Projectile3: Nome do arquivo do terceiro projetil
  • Projectile3 Mass: Massa (em kg) do terceiro projétil
  • Projectile3 Power: Poder de destruição do terceiro projétil
  • Target: Nome do arquivo que contém o modelo do alvo a ser destruído

Obs1: Nesta versão estamos considerando ter apenas um alvo, mas como descrito acima neste documento, pretendemos ter mais alvos para aumentar a diversão do jogo.

Após carregado este arquivo, o sistema fornece uma posição aleatória para o alvo e exibe a tela para escolha da posição do lançador.

2) Executar o disparo

Objetivo

Este caso de uso tem como objetivo descrever os passos necessário para o usuário disparar um projétil

Fluxo Básico

1. O usuário movimenta o tanque pelo cenário e rotaciona suas partes móveis para disparar na direção desejada.
2. O usuário escolhe um dos possíveis projéteis disponíveis.
3. O usuário indica a força que será usada para o disparo, e uma barra vertical é exibida na tela indicando o nível de força.
4. O Sistema calcula a velocidade inicial (vetorial) do projétil e exibe na tela a trajetória do objeto
5. O Caso de uso termina.

Fluxo Alternativo

Acontece no passo 1 do fluxo básico, quando o usuário tenta posicionar o lançador em uma área não permitida. O sistema exibe uma mensagem de aviso e solicita para que o usuário posicione o lançador novamente.

3) Determinar Pontuação

Objetivo

Este caso de uso tem como objetivo identificar se o projétil acertou o alvo para pontuar o jogador.

Fluxo Básico

O Caso de uso inicia assim que o projétil é disparado (quando termina o caso de uso anterior). Através do boundingbox do projétil e do alvo é verificado, para cada iteração, se os objetos estão ocupado uma porção do espaço em comum. Em caso afirmativo, será adicionado um determinada pontuação ao usuário.
Se o objeto atingir o chão (colidir com o terreno) então é calculado o seu círculo de impacto, cujo raio é proporcional ao seu poder de destruição (característico de cada objeto). Então é verificado, para cada alvo do espaço, se a intersecção de sua boundingbox com o círculo de destruição do projétil é não nula. Caso haja intersecção, será adicionado uma quantia de pontos ao jogador (menor do que se tivesse realmente atingido o alvo). Do contrário, nenhuma pontuação será contabilizada.

Caso de uso se encerra.

4) Exibir Pontuação

Objetivo

Este caso de uso tem como objetivo somar os pontos obtidos pelo jogador e exibir na tela.

Fluxo Básico

1. Após o disparo de todos o projéteis (um número fixo, porém ainda não estipulado), o sistema calcula a somatória dos pontos obtidos em função da destruição parcial ou total do alvo (ou alvos) e exibe na tela para o jogador visualizar.
2. O Sistema pergunta ao jogador se ele deseja jogar uma nova partida ou encerrar a aplicação.
3. O caso de uso encerra.

Cronograma de Desenvolvimento

O cronograma (atualizado a cada versão) com o tempo estimado para o desenvolvimento de cada uma das atividades previstas no projeto se encontra no link correspondente do menu de navegação à esquerda da página.