Excitebike é um jogo side-scroller onde você dirige uma moto sobre saltos, manobra em torno de obstáculos e acelera em direção à linha de chegada.
A Nintendo lançou pela primeira vez este jogo de corrida BMX para o NES. A partir daí, a empresa modernizou o Excitebike e o lançou no N64 e, eventualmente, no Wii.
Não existem mais muitos consoles NES, o que torna difícil jogar Excitebike novamente. Graças a alguns fãs retrô da Wireframe Magazine, um trecho de código Python pode recriar este clássico do NES para horas de diversão em seu Raspberry Pi ou PC doméstico.
Obtendo o código e configurando
Embora você possa usar nano ou vim para editar seu código python, você vai querer tirar proveito de um recurso completo editor de texto ou IDE.
Você precisará instalar o Pygame Zero para oferecer suporte aos recursos criados nesta homenagem ao Excitebike. O Pygame Zero contém módulos Python para os criadores de jogos se concentrarem sem ter que repetir fundamentos simples.
Se você não tem o python3 instalado no seu PC, você pode
baixe a versão mais recente diretamente do Python. Você também vai querer verifique se você tem o PIP instalado também.Com a versão mais recente do Python e do PIP instalada, abra seu terminal PowerShell ou Linux e digite:
pip3 instalar pgzero
Por fim, você precisará obter uma cópia do código Python no repositório GitHub da revista Wireframe. Digite o seguinte comando em um terminal:
git clone https://github.com/Wireframe-Magazine/Wireframe-66.git
Como alternativa, você pode baixe o código zipado diretamente da página Wireframe GitHub.
Decifrando o Código
Para entender o que o código faz, primeiro execute o jogo Excitebike. Faça isso navegando até o código-fonte e executando-o usando o Pygame Zero:
cd Estrutura de arame-66/fonte-código-excitebike/
pgzrunbicicleta de saída.py
Você pode então abrir o arquivo exitebike.py com um editor de texto para visualizar o código.
O empate A função desenha o fundo à medida que a imagem da bicicleta se move. A "blit" refere-se a um bloco que é desenhado na tela. A palavra, "fundo," refere-se à imagem de fundo (vincular as imagens ao bloco de fundo é graças aos módulos importados do Pygame Zero).
defempate():
tela.blit("fundo", (0, 0))
drawTrack()
bicicleta.empate()
tela.desenhar.texto("TEMPO DA VOLTA: "+str (int (time.time() - startTime)), (20, 555),color=(255,255,255), fontsize=50)
tela.desenhar.texto("ÚLTIMA VOLTA: "+str (lastLap), topright = (780, 555), color=(255,255,255), fontsize=50)
Você também notará cálculos para o tempo da volta e a última volta (isso é representado pelo contador de tempo na parte inferior da tela). O tempo da volta calcula constantemente a diferença entre o pressionamento inicial da tecla de seta para a direita (hora de início) e a hora atual.
A última volta é um cálculo semelhante. Em vez do horário de início, o tempo é calculado a partir do momento em que a moto passa por uma posição de pista predefinida (mencionada como trackPos < -4800 no código). Os itens abaixo entre aspas representam uma imagem.
Este código desenha blocos de imagem na tela em determinados intervalos e posições específicas na tela. A imagem da multidão fornecida tem apenas 100px de largura. No entanto, o código abaixo informa ao computador quando desenhar a imagem para que pareça haver uma multidão simulada atrás da motocicleta enquanto ela se move.
As imagens das rochas são exibidas na tela em duas partes. A segunda e a terceira linhas de código, abaixo, funcionam juntas para simular o cenário de maneira organizada.
Depois de criar uma cópia de backup do código python, tente alterar os números abaixo para ver o que acontece com as rochas na tela!
tela.blit("multidão1", ((t*100)+trackOffset-100, 0))
tela.blit("rock1", ((t*100)+trackOffset-100, 270))
tela.blit("rock1", ((t*100)+trackOffset-50, 270))
Você quer substituir sua moto por um caminhão Monster, quadriciclo ou outro veículo? Talvez você queira correr com um unicórnio até a linha de chegada?
Tudo o que você precisa fazer é desenhar uma imagem de 50x50px (com fundo transparente). Em seguida, coloque este arquivo (picture.png) no 'imagens' pasta (dentro do código-fonte-excitebike pasta). Você vai querer criar duas imagens (uma com uma altura ligeiramente aumentada) para adicionar algum realismo. Tudo o que você precisa fazer é alterar a referência para 'bicicleta0' aqui:
bicicleta = Ator('bicicleta0', centro=(150, 350), âncora=('Centro', 'fundo'))
Certifique-se também de executar uma ação de localizar e substituir pelo nome da imagem (sem a extensão da imagem).
checkBikeRamp() é a função que faz o trabalho de calcular o eixo Y para que sua moto (ou caminhão) suba a rampa (e pegue um pouco de ar se você tiver sorte). O teclado.direita e teclado.esquerda parâmetros são definidos no atualizar() função.
Esses bits de código informam ao computador para desacelerar ou acelerar a motocicleta (dependendo da tecla que o usuário pressiona no teclado). Tradução: quanto mais rápido sua moto estiver se movendo, maior será o número do eixo Y (ou salto muito grande).
Transversalmente, o on_key_down (chave) função irá enviar sua moto em uma queda livre.
if key.name == "ABAIXO":
bike.direction = 1
bike.laneY = limite(bike.laneY + 50, 375, 525)
bike.y += bike.direction
O MuckLane parâmetro diminuirá a velocidade da sua moto usando o seguinte cálculo:
MuckLane = int((bicicleta.laneY-375)/50)+1
A linha 66 do código determina quando exibir a imagem 'muck' na tela. Agora que o computador sabe quando sua moto passará sobre o lodo, ele diminuirá a velocidade da sua moto pela metade enquanto você se move sobre o lodo na pista. Altere o valor muckLane de /50 para /25 ou /75 para ver o que acontece a seguir.
Corredores (ahem, programadores Python)! Ligue seus motores!
Mesmo que você não se sinta confortável em programar esta homenagem ao Excitebike do zero, este código ainda é uma ótima cartilha. Ao ajustá-lo e perceber o impacto visual das mudanças, você pode aprender muito. Você tentará adicionar mais recursos ou pilotos de IA ao seu jogo? Vá em frente!
Com um pouco de prática em Python, outra ideia para você tentar é adicionar níveis diferentes depois de passar a linha de chegada após 4 ou 5 vezes. Além disso, você pode querer adicionar recompensas para o primeiro, segundo e terceiro lugares. Se você estiver em primeiro lugar, adicione também um arquivo de áudio para animar a multidão! Existem tantas possibilidades.
Quando estiver satisfeito com os aprimoramentos da Excitebike, por que não começar a criar um jogo de aventura em texto? Existem muitas peças diferentes que garantirão que você aprenda algo emocionante por horas, dias ou até semanas!