Cómo hacer un Puzzle Bobble o Bust a Move en XNA – Parte 2


Esta es la segunda parte de Cómo hacer un clon de Puzzle Bobble, la primera parte la pueden encontrar aquí.

En la parte anterior se había explicado como rotar el disparador, disparar burbujas de diferentes colores, colisiones, buscar burbujas iguales y como ubicar las burbujas en el área de juego.

En esta parte se va a mostrar cómo hacer para que cuando haya un grupo de burbujas del mismo color a la burbuja lanzada, estas sean explotadas y verificar que no queden burbujas flotando, también para agregar la burbuja siguiente, mejorar la selección de colores, agregarle estados al juego (Ganar, perder, jugar), disparar la burbuja cuando el jugador no la dispara en cierto tiempo, hacer caer el techo o las burbujas, un administrador de niveles para cargar varios niveles,  una ayuda para saber donde apuntar y una que otra cosa para mejorar la jugabilidad.

Verificar Burbujas que van a explotar

Cuando se encuentren burbujas del mismo color, lo primero que se debe hacer es quitar el grupo de burbujas del grupo de burbujas pegadas, después se debe verificar en cada burbuja pegada para saber si la burbuja se encuentra flotando. Para saber si una burbuja se encuentra flotando, no solo basta con saber si tiene burbujas vecinas, se tiene que verificar que la burbuja conectada a ella, también tenga otra burbuja conectada y que una de esas burbujas conectadas, este pegada al techo.

Sigue leyendo

Anuncios

Cómo hacer un Puzzle Bobble o Bust a Move en XNA – Parte 1


En este post voy a mostrarles una forma para crear un clon del famoso juego Puzzle Bobble, puede que no sea el mejor algoritmo pero funciona Lengua fuera.

El juego Puzzle Bobble para los que no sepan, es un juego donde existe un área rectangular y hay unas burbujas de diferentes colores pegadas en la parte superior del área rectangular, también hay un “puntero” que dispara burbujas de diferentes colores, la burbuja sale disparada y si choca con otra burbuja o llega al límite superior la burbuja queda pegada junto a las otras, si se pega a otras burbujas del mismo color y forma un grupo de 3 o más del mismo color, todas estallan, y cualquier burbuja que estuviera debajo de las que explotaron y no tienen otra burbuja pegada a ellas, también caen.

Imagen tomada del juego Puzzle Bobble de NeoRageX

Sigue leyendo

Colisión de plataformas en terrenos uniformes – Con Interpolación lineal – XNA


Ya había mostrado como hacer una colisión de plataformas con BoundingBox, pero solo funciona con terrenos rectangulares, si tenemos un terreno uniforme o desigual no va a funcionar.

Para poder hacer colisiones con terrenos uniformes podemos usar las interpolaciones lineales, para dibujar algunos puntos y luego con la interpolación averiguar los demás puntos.

Para los que han olvidado que es y como funciona la interpolación lineal pueden verificar en la wiki, en resumen es un  método matemático para aproximar un valor de un punto dado.

Fórmula Interpolación lineal

En C# podemos usar dos métodos para hayar el punto, uno es Vector2.Lerp, recibe como parametros dos vectores y un float que sirve como factor de interpolación, otro método es con la clase MathHelper.Lerp  y recibe como parametros 3 floats : y1, y2 y el factor que equivale a (x-x1)/(x1-x).

Con los dos método anteriores podemos tener varios Vectores que llamaremos puntos, y sabiendo la ubicación del personaje podemos averiguar si se encuentra sobre un punto interpolado y verificar la colisión.

Sigue leyendo

Capturar teclado XNA – Texto multilínea


El siguiente tutorial puede ser útil para los que desarrollen juegos donde se le pide al usuario ingresar un texto, voy a mostrar un método donde podemos capturar y mostrar en pantalla lo que escriba el usuario (algunas teclas, ya que dependiendo del teclado, algunas teclas cambian).

Los pasos son:

1. Agregar el SpriteFont al proyecto.

2. Cambiar los caracteres iniciales y finales que se pueden mostrar en el SpriteFont:

3. Declarar una variable StringBuilder que será el que tendrá todo el texto que escriba el usuario y otra de tipo KeyboardState que guardará el último estado del teclado para que solo se muestre una letra o carácter al presionar la tecla una sola vez:

KeyboardState oldKeyState;
StringBuilder texto = new StringBuilder();

4. Crear un método que obtendrá el estado del teclado y guardará las teclas oprimidas en un array, también se verificará las teclas presionadas para que solo aparezca una sola vez y no varias veces si la tecla se encuentra presionada:

private void UpdateKeys()
{
  KeyboardState KeyState = Keyboard.GetState();

  Keys[] teclasAnteriores = KeyState.GetPressedKeys();
  Keys[] teclasAntiguas = oldKeyState.GetPressedKeys();
  Boolean encontrado = false;

  for (int i = 0; i < teclasAnteriores.Length; i++)
  {
    encontrado = false;

    // recorre todas las teclas de ambos estados para hacer que se muestre
    // una sola vez
    for (int y = 0; y < teclasAntiguas.Length; y++)
    {
      if (teclasAnteriores[i] == teclasAntiguas[y])
      {
        encontrado = true;
        break;
      }
    }
    if (!encontrado)
    {
      PressKeys(teclasAnteriores[i]);
    }
  }

  oldKeyState = KeyState;

}

5. Crear un método que convertirá cada tecla presionada en un carácter válido: El Enter en una nueva línea, la tecla BackSpace para que borre y así sucesivamente las teclas que vayamos a utilizar, las letras y números se muestra solo convirtiendo las teclas en Char, las teclas de CapsLock (las que cambian de mayúsculas y minúsculas) no funcionan, siempre se muestran las letras en mayúsculas a menos que las cambiemos, en este ejemplo muestro todos los caracteres en minúsculas:

private void PressKeys(Keys tecla)
{
  // verificar cada tecla, algunas cambian con los teclados
  if (tecla == Keys.Back)
  {
    // si hay texto, se remueve el último carácter
    if (texto.Length > 0)
    {
      texto = texto.Remove(texto.Length - 1, 1);
    }
  }
  else if (tecla == Keys.Enter)
  {
    // se agrega una nueva línea
    texto.Append(Environment.NewLine);
  }
  else if (tecla == Keys.Decimal)
  {
    texto.Append(".");
  }
  else
  {
    // las teclas de números y letras no cambian en los teclados
    texto.Append(((char)tecla).ToString().ToLower());
  }
}

6. Para finalizar hay que llamar el método UpdateKeys en el método Update() y dibujar el texto con algún color y en una posición, voy a adicionar un símbolo al final del texto para mostrar en que parte va.

spriteBatch.DrawString(fuente, texto.ToString() + "|", new Vector2(100, 100), Color.Black);

Al ejecutar el proyecto, podemos ver algo como lo siguiente:

Para conocer todas las opciones de la enumeración Keys, en el siguiente link: Enum Keys

Efecto Onda o Salto al Hiperespacio – XNA


No sé si sea el título adecuado, pero haciendo algunas modificaciones al código, se pueden sacar diferentes efectos, como un efecto del salto al hiperespacio, al estilo las películas de naves espaciales, donde la nave viaja casi a la velocidad de la luz y las estrellas y planetas se ven muy rápido y como si se estuvieran alargando. Algo como la siguiente imagen y el siguiente vídeo:

blast effect

Salto al hiperespacio

Sigue leyendo