terça-feira, 15 de outubro de 2019

Trabalho MAMI - Parte I

O jogo escolhido para o trabalho foi o Blip, lançado em 1977, da primeira geração de jogos eletromecânicos comercializados pela Tomy. É bastante similar ao Pong da Atari, sendo a maior diferença o fato de ser um jogo de matriz mecânica, ao invés de eletrônica, como o primeiro.

Link do vídeo: https://www.youtube.com/watch?v=iBoe3yM9IKs

Mecânicas e jogabilidade: 

O jogo possui dois modos de jogo, individual e de dois jogadores, que pode ser alternado por um switch na tela.

→Bola:

Quando é iniciado, uma bola, que é uma luz de LED, adquire uma velocidade inicial fixa e viaja de um lado da tela para outro.

→Pás:

Os jogadores precisam antecipar onde a bola irá parar e selecionar um dos três slots disponíveis conforme a sua escolha, que são posições predefinidas das "pás" do jogo, com o objetivo de aparar a bola e retornar ao seu adversário.

→Pontuação:

Se um dos jogadores escolher errado a posição da pá, a bola passa e conta pontuação para o adversário. Caso escolha certo, é retornada ao adversário.

→Condições de Vitória:

O jogo continua até que um dos jogadores alcance 10 pontos ou o quando timer parar. Nesse último caso, ganha o jogador que tiver feito a maior pontuação.

→Término do jogo:

Quando o jogo termina, as pontuações, o timer e a posição da bola são reiniciados.



Recriação:

Pelas limitações técnicas da época, Blip é um jogo simples e os movimentos da bola são relativamente fáceis de prever. As técnicas usadas no jogo original para simular colisão da bola e a movimentação limitada das pás o deixa entendiante rapidamente. Dessa forma, a minha versão aproxima o jogo mais do Pong da Atari para torná-lo mais interessante, mas mantendo as características e regras do Blip.

Modelo Natural:



O modelo natural consiste em duas pás, representando os dois jogadores, a bola, que é utilizada para marcar a pontuação, os marcadores de tempo, cronômetro e a tela de game over.



Componentes


HUD

Controles:

Jogador 1:
W: Movimenta a pá para cima
S: Movimenta a pá para baixo


Jogador 2:

↑: Movimenta a pá para cima
↓: Movimenta a pá para baixo


Assim como jogos similares, tais como o Pong, faz-se um paralelo com o tênis de mesa: as pás são as raquetes físicas dos jogadores mas, ao contrário deste, assume-se que a bola sempre irá passar por cima da rede, ou que não exista rede interpondo os dois jogadores. Além disso, no tênis de mesa não há colisão lateral com a bola.


Imagem relacionada
Componentes do Tênis


Também é similar aos aero-hóqueis ou air game de fliperama. Neles também há a colisão lateral, mas a área de colisão é estendida às laterais das extremidades, sendo a parte central o "gol".



Componentes de aero-hóquei

Modelo Matemático:

Para medidas espaciais
1 unidade = 1 pixel


X(pá direita) = 40
X(pá esquerda) = X-40
Y(ambas pás) = Y/2 = -250

vel (pás) = 5 px/fr
velX (bola) = 8 px/fr
velY (bola) = 8 px/fr

Caso a bola ricocheteie nas paredes ou nas pás:
velX (bola) = -(velX (bola)) (horizontalmente)
velY (bola) = -(velY (bola)) (verticalmente)

Caso um jogador marque um ponto:
ponto(jogador) = ponto(jogador) + 1

Se o jogo acabar (para cada frame):
tempo = tempo + 0

Reinício:
tempo = 0
tempo = tempo + 0,01666...

Modelo Computacional:

Tipos de Funções:

Criação de objetos - As mais simples, são de grande ajuda para desenhar os componentes do jogos na tela e estabelecer seus parâmetros.

desenhaBola(): Cria a bola seguindo os parâmetros de diâmetro e posicionamento.

desenhaPa(): Cria as pás seguindo os parâmetros de largura, altura e posicionamento.

Movimentação - Funções que incrementam ou decrementam os valores iniciais dos objetos que se movem na tela.

movePa(): Acresce ou decresce o valor da velocidade da pá aos seus respectivos valores verticais.



moveBola(): Acresce os valores da velocidades X e Y da bola ao seus respectivos valores de posicionamento.

Colisão - Funções que limitam o espaço de atuação e/ou modificam a velocidade da bola.

limitaPa(): Limita a posição das pás para que elas não saiam da tela.



contatoPa(): Ao entrar em contato com a pá, a variável de velocidade da bola torna-se negativa.

colisao(): Assim como a última, quando alcança a altura máxima da tela, a velocidade Y da bola se torna negativa, o que acontece respectivamente com a velocidade X, se alcançar a largura máxima.


Caso não haja a colisão nas bordas, e o X máximo seja ultrapassado, será contabilizado 1 ponto para o jogador que marcou,

Condição de Vitória - Função que valida as possíveis vitórias.

gameOver(): Encerra o jogo, caso as condições estabelecidas sejam cumpridas. Assim como no Blip, as condições de vitórias são as mesmas. Ganha quando o contador de pontos chegar em 10, ou o de tempo alcançar 60.





HUD - Funções que mostram informações relacionadas ao jogo, tais como: tempo, pontuação, etc.

hud(): Exibe a pontuação dos jogadores e o tempo.

paginaGameOver(): Congela a bola e exibe a tela de vencedor, permitindo o reinício do jogo clicando com o mouse aonde pede. Caso reinicie, reseta os valores de tempo, pontuação e posição da bola.



Controles - Funções que permitem a realização do movimento das pás.

keyPressed(): Quando uma das teclas relacionadas ao movimento é pressionada, muda sua respectiva variável booleana para "true", acionando o movimento.

keyReleased(): Quando uma tecla pressionada é solta, muda sua respectiva variável booleana para "false", encerrando o movimento.

Foi a única forma que eu encontrei de deixar que os jogadores jogassem sem interferir no movimento da pá do outro.

Link do código: https://drive.google.com/open?id=1pR89AZAEx2doztYCVoduVylvoolYcfuQ

Nenhum comentário:

Postar um comentário