Detección y Eliminación de Coincidencias en Candy Crush

Clase 17 de 31Curso de Desarrollo de Videojuegos para Móviles con Unity

Resumen

Detectar coincidencias de caramelos puede ser simple y eficiente cuando se entiende la lógica esencial. Aquí verás cómo estructurar el análisis por filas y columnas, definir el mínimo para un match y usar raycast 2D en C# con resultados claros, manteniendo un rendimiento óptimo en móviles al evitar update innecesarios.

¿Cómo detectar matches en candy crush con C# y Unity?

El manager es el encargado de revisar la matriz de datos y decidir si hay vecinos en fila o columna que formen un match de tres o más. Para ello, se escanean direcciones usando una regla básica: el actual y sus vecinos contiguos iguales.

¿Cómo define el manager el mínimo para un match?

Para mantener el código claro, se usa una constante que representa vecinos mínimos del actual. Dos vecinos + el actual = tres en línea.

  • Mejora la legibilidad del conteo de coincidencias.
  • Sigue buenas prácticas de C#: constantes con inicial mayúscula.
  • Representa el número de vecinos, no el total absoluto.
// En BoardManager
public const int MinCandiesToMatch = 2; // 2 vecinos + el actual = 3

¿Qué hace el método findmatch con raycast 2D?

La idea es recopilar vecinos iguales en una dirección y en la contraria. Se usa una List<GameObject> para acumular coincidencias y se compara el SpriteRenderer.sprite del vecino con el del caramelo actual.

  • Devuelve los objetos que coinciden con el actual.
  • Usa Physics2D.Raycast desde la posición del caramelo.
  • Repite mientras exista collider y el sprite sea igual.
  • Recalcula el rayo desde el vecino encontrado.
  • Repite en dirección opuesta para cubrir ambos lados.
// En Candy.cs
private List<GameObject> FindMatch(Vector2 direction)
{
    var matchingCandies = new List<GameObject>();

    // Adelante en la dirección indicada
    RaycastHit2D hit = Physics2D.Raycast(transform.position, direction);
    while (hit.collider != null &&
           hit.collider.GetComponent<SpriteRenderer>()?.sprite ==
           GetComponent<SpriteRenderer>()?.sprite)
    {
        matchingCandies.Add(hit.collider.gameObject);
        hit = Physics2D.Raycast(hit.collider.transform.position, direction);
    }

    // Hacia la dirección contraria
    hit = Physics2D.Raycast(transform.position, -direction);
    while (hit.collider != null &&
           hit.collider.GetComponent<SpriteRenderer>()?.sprite ==
           GetComponent<SpriteRenderer>()?.sprite)
    {
        matchingCandies.Add(hit.collider.gameObject);
        hit = Physics2D.Raycast(hit.collider.transform.position, -direction);
    }

    return matchingCandies;
}

¿Cómo manejar la dirección contraria sin duplicar código?

  • Reutiliza la misma variable RaycastHit2D ya declarada.
  • Invierte el vector: -direction para el lado opuesto.
  • Inicia el rayo desde transform.position en el sentido opuesto.
  • Vuelve a avanzar desde hit.collider.transform.position manteniendo -direction.
  • Añade cada vecino válido a matchingCandies.

¿Qué estructura usa el board manager para filas y columnas?

El board manager “conoce” todos los caramelos. Recorre filas y columnas de la matriz para verificar si existen vecinos contiguos que formen coincidencias. Con la lista devuelta, se podrá decidir si hay match y preparar la destrucción de los caramelos coincidentes.

// En BoardManager
private List<GameObject> FindMatch(Vector2 direction)
{
    var matchingCandies = new List<GameObject>();
    // Aquí se coordina la búsqueda por filas o columnas.
    return matchingCandies;
}

¿Por qué evitar update en móviles?

  • El método update corre cada frame.
  • En móviles implicaría consumo constante de batería.
  • Mejor distribuir tareas en métodos específicos y mantener update limpio.

¿Qué variantes puedes crear en el gameplay?

  • Cuatro en cuadrado como condición especial.
  • Coincidencias en diagonal.
  • Cambios así requieren ajustar gran parte del gameplay.

¿Te animas a proponer mejoras o variantes? Deja tus ideas y comparte cómo ampliaste la detección de coincidencias para hacer el juego más divertido.

      Detección y Eliminación de Coincidencias en Candy Crush