Menu
CoddyTech

As paredes

Lição 4 de 14 do curso Jogo de Cobra 3D na Unity da Coddy.

As células do tabuleiro vão de -7 a 7 em x e em z, então uma célula está no tabuleiro quando tanto seu x quanto seu z estão entre -7 e 7. Com o tabuleiro centralizado em 0, um teste cobre os dois lados: Mathf.Abs(x) > 7 é verdadeiro além de qualquer uma das bordas.

Teste a célula em que a cabeça está prestes a entrar antes de ela se mover para lá. Assim, uma cobra que bate em uma parede permanece na última célula do tabuleiro, em vez de acabar dentro da borda. Uma torre em um tabuleiro de xadrez numerado de 0 a 7 é verificada da mesma maneira:

Vector3 target = transform.position + move;
if (target.x < 0 || target.x > 7 || target.z < 0 || target.z > 7)
{
    return;   // fora do tabuleiro: a torre permanece onde está
}
transform.position = target;

Bater em uma parede encerra o jogo, e a cobra para de vez. Uma bool que Update() verifica primeiro faz isso: um return no início ignora tanto as teclas quanto o temporizador.

challenge icon

Desafio

Fácil
  1. Adicione public int edge = 7; (as células do tabuleiro vão de -edge a edge) e public bool alive = true;.
  2. Em Step(), depois de definir direction, calcule next, a célula em que a cabeça está prestes a entrar. Se estiver fora do tabuleiro, chame Die() e retorne sem se mover; caso contrário, mova a cabeça para next.
  3. Escreva void Die(), que define alive como false.
  4. Comece Update() com um retorno quando a cobra não estiver viva, para que uma cobra morta não vire nem avance.

Pressione Play, conduza a cobra contra uma parede e, em seguida, pressione Check.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // segundos entre dois passos
    private float timer;
    private Vector3 direction = Vector3.right;       // a direção em que a cabeça se moveu no último passo
    private Vector3 nextDirection = Vector3.right;   // a virada aguardando o próximo passo

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard != null)
        {
            if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
            if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
            if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
            if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
        }

        timer += Time.deltaTime;
        if (timer >= tick)
        {
            timer -= tick;
            Step();
        }
    }

    void Turn(Vector3 newDirection)
    {
        if (newDirection != -direction)
        {
            nextDirection = newDirection;
        }
    }

    void Step()
    {
        direction = nextDirection;
        transform.position += direction;
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo de Cobra 3D na Unity