História do console Magnavox Odyssey 2
Depois do sucesso de suas plataformas Pong, a Magnavox resolveu dar seguimento ao seu Odyssey e lançar a sua segunda geração de consoles. A Magnavox estava voltada para o desenvolvimento do Odyssey 2 desde o Odyssey 4000 e agora seus esforços se concretizavam no novíssimo Odyssey 2 (1978). Pode-se dizer que, pelo menos na Europa e nos EUA, o Odyssey 2/ Videopac foi popular. Não vendeu tanto como o Atari 2600 ou o MattelIntellivision, ficando com o terceiro lugar. Um diferencial era seu teclado embutido, que permitia uma gama de jogos diferentes dos lançados pela Atari. Em termos de mercado o Odyssey 2 não chegou a competir diretamente com o Atari 2600 ou o Intellivision, pois ambos tiveram um marketing mais elaborado e com um suporte de jogos melhor do que o do Odyssey 2, embora a plataforma tenha conseguido um grande número de fãs na Europa e no Brasil. Na Europa o console ZX Spectrum foi o maior concorrente. Outro fato que contribuiu para maior disseminação de outras plataformas foi a grande pirataria e produtos copiados jogos, cartuchos e consoles, o que não aconteceu com o Odyssey2 / Videopac.
Jogo Speedway
Modelo Natural
O jogo Speedway foi lançado junto com mais dois jogos Spinout e Cryptologic em 1978 como combo de 3 jogos em um cartucho no dia do lançamento do console Magnavox Odyssey 2. Speedway é um jogo cronometrado de apenas um jogador. Cada jogo tem dois minutos de duração, não mais. O jogo tem dois modos, Prática (1) ou Corrida (2). Na velocidade mais lenta, o jogo é bem fácil. Neste jogo, você controla um carro que está dirigindo em uma estrada reta vertical e interminável (até o tempo acabar). A proposta é manter-se o mais rápido e no maior tempo possível sem causar acidentes em um pista fechada. O jogador tem dois minutos para fazer o caminho para a primeira posição.. Seu objetivo é evitar acertar todos os carros na tela. Na dificuldade 1, isso não é muito difícil; a velocidade máxima não é muito alta, então, fazer um jogo perfeito, passar dois minutos sem acertar nada, não vai demorar muito. A dificuldade dois é outra história, no entanto. Este é claramente o jogo principal, e é muito mais desafiador. O Speedway tem os gráficos mais simples para um jogo de corrida, sem animação nos carros e apenas traços nos lados da estrada para mostrar o ambiente. Este é um divertido para colocar e jogar um par de minutos, o jogo termina depois de dois minutos, mas você pode sempre tentar de novo e tentar dominá-lo. É difícil evitar que todos os carros venham até você na alta velocidade, e quando você falhar, para de ganhar pontos até começar a se mover novamente, de modo que cada golpe resulte em uma redução de pontos considerável e sua pontuação está ligada à sua velocidade também você ganha pontos com base na distância, então quanto mais rápido você dirigir, maior será sua pontuação. O Speedway é um jogo de corrida incrivelmente básico, mas divertido, uma vez que o tempo se esgote, o jogo congela. Você terá que pressionar Reset para tentar novamente.
Modelo Matemático
Na construção do remake do jogo Speedway utilizamos muitas funções predefinidas no processing de formas geométricas como rect() para desenho da pista de corrida e dos carros, ou seja, para desenho de personagens e objetos do jogo. Uma observação muito importante do processing é que o sistema de coordenadas cartesianas é invertido. Os carros possuem uma velocidade variável, caracterizando um movimento retilíneo uniformemente variado (MRU).
Movimentação dos carros
Utilizei a formula matemática da física do movimento para simulação mais realista do jogo Speedway.
- f(x) = y
- s(t) = v*(t) + a*(t)2/2 – Formula MRUV aplicado na movimentação dos carros.
Detecção das colisões
Vamos utiliza retângulos circundando os carros para a detecção das colisões entre o carro controlado pelo jogador e os carros adversários.
Uma forma fácil de descobrir se houve colisão entre retângulos é testar se a posição (coordenadas x e y) do canto superior esquerdo de um retângulo está dentro do segundo retângulo. Para isso, testamos se a coordenada x do primeiro retângulo está localizada entre a coordenada x do segundo retângulo e a coordenada x do segundo retângulo somada com a largura desse segundo retângulo. E ao mesmo tempo se a coordenada y do primeiro retângulo está localizada entre a coordenada y do segundo retângulo e a coordenada y do segundo retângulo somada com a altura desse segundo retângulo. Como a situação contrária também pode ocorrer, ou seja, o ponto superior esquerdo do segundo retângulo estar dentro do primeiro retângulo, temos que fazer também o teste oposto.
Modelo computacional
O desenvolvimento do jogo Speedway se inicia com a criação de três protótipos distintos que vai implementar a base do nosso remake.
1º Protótipo : Vamos criar a pista de corrida e a movimentação da mesma dando a sensação de velocidade ao jogador, já que a movimentação da pista é contrária ao do carro do jogador criando esse efeito de velocidade ao jogo, primeiro criaremos as variáveis globais necessárias, depois definimos o tamanho da tela do jogo e as configurações iniciais no setup(), agora vamos chamar o procedimento pista() no corpo do draw() e desenhamos com a função rect() os retângulos da faixa da pista, depois que uma condição é satisfeita, ou seja, que o centro da altura do primeiro retângulo tiver sido deslocado 75 pixeis para cima, reiniciamos a variável de posição y inicial re-chamamos o procedimento pista() no corpo da função pista(), ou seja, usamos recursividade para ficar redesenhando na tela.
Código do 1º protótipo – Pista
Pista Lenta
Pista rápida
2º Prototipo : Vamos criar um placeholder (retângulo) para simular o carro controlado pelo jogador, declaramos e inicializamos nossas variáveis globais, como a posição inicial no eixo x do carro e o deslocamento horizontal, no corpo do draw() chamamos o procedimento carroJogador() que vai desenhar o carro na posição inicial setada no código e vai ficar esperando uma interação do usuário com duas condições possíveis, quando o teclado RIGHT for pressionado o algoritmo incrementa a variável do eixo x, deslocando o retângulo para a direita e quando o teclado LEFT for pressionado o algoritmo decrementa a variável do eixo x, deslocando o retângulo para a esquerda.
Código do 2º protótipo – Movimentação e interação com o jogador
Movimentação a direita
Movimentação à esquerda
3º Prototipo : Vamos criar outro placeholder (retângulo de novo) para simular o carro adversário que vai ter uma posição inicial aleatória, para isso utilizamos a função interna do processing random() que recebe dois valores como parâmetro, a função retorna um número aleatório no intervalo de valores passados como parâmetros. Vamos desenhar o retângulo e incrementa o eixo x e y, quando o eixo x é incrementado ele verifica se está na pista de corrida caso saia da pista o sinal do valor do deslocamento é invertido mudando o sentido do deslocamento, já quando o eixo y é incrementado verifica se a metade da altura do placeholder (retângulo adversário) ainda está na tela, caso contrário vamos chamar novamente o procedimento carrosAdversarios() no corpo da função carrosAdversarios(), utilizando recursividade para re-chamar a função sempre que uma certa condição é satisfeita.
Código do 3º protótipo – Movimentação e limitação de deslocamento do carro adversário
Movimentação e limitação de deslocamento do carro adversário
Interação entre os protótipos desenvolvidos
Junção dos códigos dos protótipos desenvolvidos
Segunda Parte do Trabalho
Vídeo documentando o processo de desenvolvimento, os modelos estabelecidos, a integração dos protótipos e a comparação do resultado obtido em relação ao jogo original