domingo, 11 de março de 2018

Mami - Aula #2 - Projeto

Nessa aula foi apresentado o projeto mas não foi passada nenhuma tarefa.

O projeto é refazer um jogo da segunda geração, o jogo que escolhi foi o Star Castle do Vectrex. Eis abaixo um vídeo do jogo:




O Vectrex foi fabricado entre 1982 e 1984 e foi primeiro console a usar a tecnologia de vetores que era usada nos monitores de jogos arcade, foi um sucesso no seu lançamento mas a crise dos video-games de 83 acabou pegando em cheio quando tentaram dar continuidade no projeto, e acabou que ele foi descontinuado em 84.

O Star Castle é um jogo que foi lançado pela Cinematronics em 1980 que consiste em destruir uma nave inimiga que fica protegida por octógonos(como muralhas de castelo). Em 1983 ele foi portado para o Vectrex mas não teve um grande destaque, porém foi/é um jogo bem interessante.

O meu objetivo é fazer um jogo no Processing inspirado no Star Castle do Vectrex, e inclusive sem o uso de arquivos de imagens.








Primeira mecânica: desenho das naves.

 
Modelo natural


Para começar, eu quero desenhar a nave através de linhas. No Processing uma linha é desenhada a partir de 2 pontos, abaixo seguem os desenhos que eu quero realizar(vou precisar de muitos pontos...):






A princípio seria bastante fácil apenas ligar os pontos baseado nas posições deles nesse desenho, mas é preciso ter em mente que ambas as naves giram, e é preciso levar o ângulo da nave em conta na hora de desenha-la.

Já que é preciso levar sempre em conta o ângulo, a minha ideia foi desenhar a nave a partir de um círculo e usar as relações de seno e cosseno para identificar as posições dos pontos dentro do círculo



Para calcular a posição de cada ponto é só ter a distância do ponto até o centro do círculo o ângulo em que esse ponto está, abaixo eu tentei representar isso:


Modelo Matemático

Eu pude ver os ângulos e as hipotenusas desenhando no Corel um círculo de 100x100, no Processing eu pus a distância do centro ao ponto relativa ao tamanho do raio do círculo, o tamanho de 100x100 me ajudou nesse processo. Aqui a posição o ponto no eixo x pode ser calculada a partir do cosseno e no eixo y a partir do seno, e o Processing já tem funções que fazem esse cálculo apenas passando o ângulo, depois foi só multiplicar pela hipotenusa e foi sucesso.

O modelo computacional segue neste link







Segunda mecânica:


Com a minha nave principal desenhada, eu quero fazer com que ela se mova pela tela.


Modelo Natural


Para entender como funciona o deslocamento, dividi ele em 4 aspectos:

Posição
Velocidade
Aceleração
Ângulo

A aceleração é a variação de velocidade, isso significa que ela vai determinar as mudanças na velocidade da nave.

A velocidade é a variação de posição, isso significa que ela vai determinar as mudanças de posição da nave.

A posição é basicamente o ponto onde a nave vai ser desenhada.

O ângulo vai determinar como a nave vai ser desenhada e ele também vai ser o responsável por determinar a relação de seno e cosseno que vai ser multiplicado à aceleração nas fórmulas para que a nave siga em linha reta.

Para a posição e a velocidade serão usados vetores, o motivo é porque a nave tem tanto uma posição no eixo x como no eixo y, e a variação de posição precisa se dar de uma forma específica em cada eixo.

Mas é a aceleração? Por que não seria também um vetor?

A aceleração nesse caso é apenas uma constante de incremento para a velocidade que vai ser multiplicada pelo seno para dar o a variação de velocidade no eixo y e pelo cosseno para o eixo x.


O Modelo matemático fica assim:
 Aceleração(x) = "força" * cos(a)
  Aceleração(y) = "força" * sen(a)


Os comandos funcionam de forma simples:

As setas direita e esquerda aumentam ou diminuem o ângulo da nave, a fazendo girar;

A seta para cima incrementa o produto aceleração e o seno para a velocidade y e do cosseno para a velocidade x.

É preciso levar em conta o limite de velocidade, então esse incremento só pode acontecer caso a velocidade estiver menor que o limite. Após alguns testes eu resolvi que o limite ficaria legal sendo 30x a aceleração angular(depois de multiplicada pelo seno e cosseno), a ideia é que a aceleração só vai ser aplicada caso o módulo de velocidade seja menor que 29x a aceleração angular, pois ela vai poder chegar em 29x - "um valor mínimo qualquer" e vai continuar valendo. Por questões de praticidade, eu prefiro impedir o comando do que corrigir.

Também vou por um fator de desaceleração, ele vai ser uma dissipação de 1/100 de cada velocidade por frame. Isso vai servir pra nave não ficar voando indefinidamente e para corrigir os problemas causados por existir uma velocidade máxima, como a nave ficar presa em determinado ângulo porque a velocidade horizontal ou vertical não abaixa.


O modelo computacional segue neste link

Terceira mecânica:


A terceira mecânica vai ser a habilidade do boss apontar para a minha nave.



Modelo Natural




O modelo matemático é
arc-sen(a) = distância apenas no eixo y / distância total
arc-cos(a) = distância apenas no eixo x / distância total


A ideia aqui é bem simples, eu separo a posição da nave em quadrantes, cada quadrante é de 90 graus da circunferência da nave do chefe de acordo com os padrões de ângulo do processing.




E então, para cada quadrante, eu somo o ângulo do anterior e faço um cálculo usando a distância x ou y e a distância usando a função de arco-seno ou arco-cosseno.

O modelo computacional segue neste link


Nenhum comentário:

Postar um comentário