MySQL: Entenda o CASE, COALESCE e NULLIF de uma vez por todas!

 🔸 1. CASE – Estrutura Condicional (tipo IF/ELSE) Use para retornar valores diferentes dependendo de uma condição. SELECT nome, salario, CASE WHEN salario >= 10000 THEN 'Alto' WHEN salario BETWEEN 5000 AND 9999 THEN 'Médio' ELSE 'Baixo' END AS faixa_salarial FROM funcionarios; 📌 O CASE analisa cada condição e retorna o valor correspondente. Ótimo para categorizar ou tratar lógicas personalizadas. 🔸 2. COALESCE – Primeiro valor NÃO NULO Substitui valores NULL pelo primeiro valor não nulo passado. SELECT nome, COALESCE (email, 'sem-email@empresa.com' ) AS contato FROM clientes; 📌 Se email for NULL , o valor padrão 'sem-email@empresa.com' será exibido. 🔸 3. NULLIF – Evita divisões perigosas ou comparações iguais Retorna NULL se os dois valores forem iguais . Muito usado para evitar divisões por zero. SELECT nome, vendas, metas, ...

História Completa do Primeiro Prince of Persia (1989)/Exemplo básico em Unity — Movimento e ataque do personagem principal


 using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 7f;
    public Transform attackPoint;
    public float attackRange = 1f;
    public LayerMask enemyLayers;

    private Rigidbody2D rb;
    private Animator animator;
    private bool isGrounded;
    private float moveInput;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // Movimento horizontal
        moveInput = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);

        // Flip do personagem
        if (moveInput > 0)
            transform.localScale = new Vector3(1, 1, 1);
        else if (moveInput < 0)
            transform.localScale = new Vector3(-1, 1, 1);

        animator.SetFloat("Speed", Mathf.Abs(moveInput));

        // Pulo
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            animator.SetTrigger("Jump");
        }

        // Ataque
        if (Input.GetButtonDown("Fire1"))
        {
            Attack();
        }
    }

    private void Attack()
    {
        animator.SetTrigger("Attack");

        // Detecta inimigos na área de ataque
        Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);

        foreach (Collider2D enemy in hitEnemies)
        {
            Debug.Log("Inimigo atingido: " + enemy.name);
            // Aqui você pode chamar um método de dano no inimigo
        }
    }

    private void OnDrawGizmosSelected()
    {
        if (attackPoint == null)
            return;

        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(attackPoint.position, attackRange);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
            animator.ResetTrigger("Jump");
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = false;
        }
    }
}

Enredo

O jogo se passa em um reino inspirado na antiga Pérsia, onde um malvado visir chamado Jaffar usurpa o trono do sultão enquanto ele está ausente. Jaffar prende a princesa e ameaça executá-la em até 60 minutos, a menos que ela aceite se casar com ele.

Você controla um jovem príncipe anônimo que decide resgatar a princesa e derrotar Jaffar.

Missão

O príncipe começa o jogo preso nas masmorras do palácio e precisa escapar, atravessando níveis perigosos cheios de armadilhas mortais e guardas habilidosos. Ele tem apenas 60 minutos para salvar a princesa antes que Jaffar cumpra sua ameaça.

Desafios

  • Saltar por plataformas estreitas

  • Evitar armadilhas como espinhos, pisos que desabam e lâminas giratórias

  • Lutar contra guardas com espada em combates ágeis

  • Resolver labirintos e correr contra o tempo

Final

Se o jogador consegue chegar até a princesa a tempo e derrotar Jaffar, salva o reino e o amor triunfa. Se não, a princesa é executada e o jogo termina.


Curiosidades

  • O jogo é famoso pela animação fluida, feita com técnica de rotoscopia (desenho baseado em movimentos reais).

  • Foi um marco nos jogos de plataforma e aventura, com jogabilidade inovadora para a época.

  • Originou várias sequências e adaptações em outras mídias, inclusive um filme em 2010.

Comentários