Olá, pessoal.
Nesse tutorial mostrarei uma das formas de implementar a mecânica do famoso jogo Simon Says. Também chamado de Genius, como ficou conhecido por aqui. É um jogo em que você tem que repetir a sequência de cores apresentada pela máquina.
Para isto, usaremos a engine Unity3D com scritps em C#. Então, é preciso considerar que você já saiba os princípios básicos da programação necessários para reconhecer os procedimentos a seguir, assim como o mínimo de conhecimento do Unity Editor. Caso queira se aprofundar nessa parte, temos um tutorial específico para isso.
Simon Says em Unity3D
Basicamente teremos cinco lâmpadas com cores diferentes. Elas acenderão uma a cada rodada, podendo repetir a qualquer momento. Portanto, teremos duas etapas, são elas:
- Etapa da máquina, em que é exibida a sequência das lâmpadas;
- Etapa do jogador, indica que ele deve clicar nas lâmpadas na mesma ordem em que elas forem piscando na tela. Cada vez que o jogador clicar na lâmpada, ela deve piscar.
O jogador poderá errar até duas vezes e no terceiro erro acontecerá game over. Incluiremos textos para indicar ao jogador o seu nível e mensagens de retorno do jogo.
Preparação
Para montar as lâmpadas, usaremos dois sprites de cores diferentes, mas não se engane. Esses sprites servem apenas para jogarmos um filtro de cor e assim termos mais de duas cores. Você pode usar a imagem abaixo por exemplo:
Com a imagem importada, precisamos dividir em dois sprites:
A Classe Lampada
Primeiro vamos imaginar o que a nossa classe deve ter. Assim, quando chegarmos no script logo abaixo, será mais fácil de entender.
A lâmpada terá dois status: apagada e acesa. Para isso, usaremos nossos sprites sendo que um deles já deve ser carregado por padrão. Já o outro, deve ficar no inspector para ser adicionado. Ela também vai precisar de uma cor para o sprite. Nossa classe implementará o metodo OnMouseDown que deverá disparar um outro evento informando que esta lâmpada foi tocada, sendo assim também criaremos esse evento. Por fim, teremos nosso método responsável por fazer a lâmpada acender. Ele deve ser um método do tipo IEnumerator, pois o executaremos dentro de uma coroutine para realizar o comportamento de acender por um tempo e voltar a ficar apagada.
Nossa classe terá um SpriteRenderer e por padrão devemos colocar o sprite mais escuro, pois representará o sprite padrão da lâmpada quando ela está apagada.
Colocaremos também um BoxCollider2D. Ele servirá para fazermos a detecção do clique do mouse.
Este seria o script final da nossa classe:
using UnityEngine; using System.Collections; [RequireComponent (typeof(SpriteRenderer))] public class LampadaBehaviourScript : MonoBehaviour { //evento para quando a lapada é tocada public delegate void Evento(LampadaBehaviourScript lampada); public static event Evento QuandoTocada; [Header("Sprite quando a lampada acende")] public Sprite spriteAceso; //components private SpriteRenderer _spriteRenderer; //flags private bool _estaFuncionando = true; private Sprite _spritePadrao; // Use this for initialization void Start () { _spriteRenderer = GetComponent<SpriteRenderer> (); _spritePadrao = _spriteRenderer.sprite; } /// <summary> /// Acende se estiver funcionando /// </summary> public IEnumerator Acender(){ _spriteRenderer.sprite = spriteAceso; yield return new WaitForSeconds (1); _spriteRenderer.sprite = _spritePadrao; } // Quanto tocada pelo mouse void OnMouseDown(){ if (QuandoTocada != null) { QuandoTocada (this); } } }
Finalizo essa primeira parte por aqui. Na próxima parte do nosso Simon Says em Unity3D, veremos como fazer o nosso controlador do jogo.
Até a próxima.