Jogo Speedway

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.

 

 

 

Este slideshow necessita de JavaScript.


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.

Jogo do console magnavox odysseys 2
Capa e cartucho com os jogos Speedway, Spin-out, Cryptologic

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.

Detecção de colisão
Detecção de colisão

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

tela1
Pista Lenta

Pista rápida

rapido
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

direita
Movimentação à direita

Movimentação à esquerda

esquerda
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

CarroAdversario
Movimentação e limite de deslocamento

 

Interação entre os protótipos desenvolvidos

Junção dos códigos dos protótipos desenvolvidos

 

 

Completo
Interação entre os 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

Link do código do jogo