Índice:

Plataforma com níveis infinitos no GameGo com Makecode Arcade: 5 etapas (com imagens)
Plataforma com níveis infinitos no GameGo com Makecode Arcade: 5 etapas (com imagens)
Anonim
Image
Image

GameGo é um console portátil de jogos retro compatível com Microsoft Makecode desenvolvido pela TinkerGen STEM education. É baseado no chip STM32F401RET6 ARM Cortex M4 e feito para educadores STEM ou apenas pessoas que gostam de se divertir criando videogames retrô. Você pode seguir este tutorial e experimentar o jogo no simulador Makecode Arcade e depois executá-lo no GameGo.

Neste artigo, vamos fazer um jogo de plataforma com infinitos níveis gerados aleatoriamente. Em um jogo de plataforma, o personagem controlado pelo jogador deve pular e escalar entre plataformas suspensas, evitando obstáculos. Os ambientes geralmente apresentam terrenos irregulares de alturas variáveis que devem ser atravessados. O jogador geralmente tem algum controle sobre a altura e distância dos saltos para evitar que seu personagem caia para a morte ou perca os saltos necessários. Vamos implementar todos esses elementos básicos e também adicionar uma função personalizada que irá gerar novos níveis conforme chegarmos ao final do último. Vamos começar!

Suprimentos

GameGo

Etapa 1: o herói

O herói
O herói

Como primeiro passo, criaremos nosso alter ego. Minhas habilidades de desenho são muito ruins, então decidi usar um da Galeria;) Ao contrário do jogo anterior que fizemos, neste jogo de plataforma nosso personagem jogável só pode se mover para a esquerda e para a direita e também pode pular. Então, ao invés de ter dois sprites diferentes para o personagem principal, um é o suficiente desta vez - podemos apenas virar a imagem do sprite quando mudarmos de direção.

A primeira coisa a fazer é adicionar o plano de fundo e o mapa de blocos. Eu escolhi o mapa de blocos longos de 32x8 - para o primeiro nível, vamos desenhá-lo manualmente, como na captura de tela 2. Em seguida, adicionamos nosso personagem jogável com set mySprite para sprite do tipo Bloco de jogador e o colocamos no topo do bloco 0-5. Também configuramos a câmera para se mover com o personagem jogável e controlar seu movimento para a esquerda e para a direita - definiremos a velocidade vy do movimento como 0, já que nosso personagem não deve ser capaz de flutuar livremente no mapa ao longo da direção y. Adicione dois blocos em … botão pressionado, um para o botão esquerdo e um para o direito. Quando o botão esquerdo é pressionado, verificamos se nossa direção estava "esquerda" antes de pressionar o botão. Se fosse, continuamos indo para a esquerda. Se não fosse, precisaríamos inverter a imagem de sprite do nosso personagem. Lógica semelhante para movimento correto.

Tudo bem por agora, o único problema parece que nosso herói não consegue superar qualquer obstáculo. Portanto, precisamos adicionar o salto. Monitoraremos os controles para pressionar o botão para cima e quando for detectado, definiremos o salto variável para 1, anotaremos os movimentos de salto de tempo iniciados e definiremos a velocidade do sprite do personagem vy para -200 (subindo). Então, após um período de tempo especificado, definiremos a velocidade para 200 (descendo), para que nosso herói não voe para o céu como um foguete.

Acho que criamos um herói digno do desafio agora! Bem, onde está o desafio?

Etapa 2: os inimigos

Os inimigos
Os inimigos

Usaremos uma estrutura de array para armazenar os sprites dos inimigos. Para o tipo de inimigo, vamos pegar um pequeno atalho e usar morcegos:) não é uma referência de coronavírus, é só que os morcegos podem voar, é por isso que não precisaremos "simular" a gravidade para eles, como fazemos com nosso personagem jogável. Use em sprite criado do tipo bloco inimigo para colocar morcegos recém-criados em ladrilhos de spawn aleatórios (marcados com uma pequena marca branca) e definir sua velocidade vx para -10 (vagarosamente indo para a direita). Então, dentro da atualização do jogo, a cada bloco de 2.000 ms, iteramos através de cada item da lista_de_inimigos e mudamos aleatoriamente sua direção, enquanto também invertemos os sprites dos morcegos, se necessário (para refletir a mudança na direção do movimento). Finalmente, adicionamos um sprite do tipo Player se sobrepõe a outro bloco Sprite do tipo Inimigo, onde fazemos uma verificação simples se o jogador já foi atingido. Se não foi, deduzimos uma vida, defina a bandeira de acerto para 1 (foi acertada) e inicie o cronômetro. Depois de 500 ms desde o último golpe, mudamos o rebatimento da bandeira de volta para 0. Fazemos isso para que o jogador evite perder muitas de suas preciosas vidas após colidir com um inimigo.

Vamos verificar como estamos indo. Bem, a cena certamente parece mais animada com todos os morcegos voando e mordendo nosso jogador. Agora precisamos de uma arma para realizar nossos feitos heróicos!

Etapa 3: a arma

A arma
A arma

Para a arma, eu estava me inspirando em um antigo jogo da Nintendo sobre dois irmãos esquilos:) Vamos adicionar os sprites da caixa ao nível, da mesma forma que fazemos com os inimigos. Também inicializamos a variável has_crate como -1, o que indica que nosso personagem não carrega uma caixa. Em um sprite do tipo Player se sobrepõe a outroSprite do tipo Food block, verificamos se já temos um engradado e, se não estivermos, configuramos a variável has_crate para o índice do sprite engradado na lista. Então, no bloco de atualização do jogo, movemos aquele sprite junto com o sprite do jogador e se o botão A for pressionado, mudamos a velocidade vx da caixa para 1200 ou -1200 (dependendo da direção do movimento do personagem). Também definimos a variável has_crate de volta para -1 novamente e alteramos o tipo de sprite da caixa que foi lançada no ar agora para Projétil.

Por fim, precisamos que as caixas realmente destruam os inimigos quando lançadas (mas não quando os inimigos simplesmente tropeçam aleatoriamente em uma caixa! É por isso que atribuímos as caixas para digitar Comida e alterá-lo para Projétil apenas quando lançado) e se autodestruir ao acertar a parede. Para isso, usamos outro sprite do tipo Projétil sobreposto a outro bloco do tipo Inimigo - nesse caso, destruímos os dois sprites e aumentamos a pontuação em um. Se Projétil atingir a parede, destruímos seu sprite.

Quase pronto agora! O jogo pode ser jogado agora, mas quase nenhum desafio ainda - apenas um nível e bastante simples nisso. Poderíamos fazer mais níveis manualmente ou escrever um algoritmo que geraria esses níveis automaticamente para nós - embora eles não sejam tão bonitos quanto os níveis feitos pelo homem, é claro.

Etapa 4: aventuras infinitas

Aventuras infinitas
Aventuras infinitas
Aventuras infinitas
Aventuras infinitas
Aventuras infinitas
Aventuras infinitas

A função para geração de nível aleatório parece um pouco assustadora no início, mas é realmente uma série simples de etapas para gerar algoritmicamente um novo nível, de forma que um novo nível seja aceitável para um personagem jogável. Primeiro, tomamos o cuidado de levar nosso personagem a esse novo nível - usando um sprite do tipo sobreposições de jogadores … no local - usamos o ladrilho da porta do portal como o gatilho para um novo nível. Na função generate_level, inicializamos as variáveis row, col e chance. Também criamos um novo mapa de blocos, do mesmo tamanho de antes, mas vazio. Aqui está uma pequena advertência - para usar set… at tilemap row… col… block, o tilemap precisa ter esses tiles em particular --- que é um pouco contra-intuitivo e talvez um bug no Makecode. Então, o que você precisa fazer é criar um mapa de blocos, colocar todos os tipos de blocos que deseja usar na geração aleatória E, em seguida, apagá-los.

Colocamos manualmente a primeira peça (0x6) e o jogador em cima dela. Em seguida, repetimos a próxima etapa 30 vezes - a próxima etapa é uma série simples de verificações de Verdadeiro-Falso, que decidem se o bloco da próxima coluna será 1) o mesmo nível que o anterior 2) um acima ou 3) um abaixo. Também há uma chance muito pequena de que o próximo ladrilho seja um ladrilho de lava - não queremos muitos deles! Depois de cada ladrilho gerado, preenchemos o espaço abaixo com lava - apenas por uma questão de beleza. Como etapa final, adicionamos os inimigos e as caixas e os colocamos em cima de blocos de desova aleatórios.

Etapa 5: a aventura começa

A aventura começa
A aventura começa

Voila! Terminamos nosso jogo de plataforma e nosso herói pode partir em uma aventura infinita, derrotando morcegos e destruindo caixotes. se estiver tendo problemas, você pode baixar o código de nosso repositório GitHub.

É apenas um plano e definitivamente existem algumas melhorias que podem ser feitas, por exemplo, diferentes tipos de inimigos, bônus, melhor geração de níveis e assim por diante. Se você fizer uma versão melhorada do jogo, compartilhe nos comentários abaixo! Para obter mais informações sobre GameGo e outros hardwares para fabricantes e educadores STEM, visite nosso site, https://tinkergen.com/ e assine nosso boletim informativo.

A TinkerGen criou uma campanha Kickstarter para MARK (Make A Robot Kit), um kit de robô para ensinar codificação, robótica, IA!

Recomendado: