Android. Juego del Ahorcado (IX). Si pulsamos una letra correcta.

android gingerbreadEn este post, veremos la manera elegida para controlar y visualizar las letras que el usuario teclea y que están en la palabra oculta. Antes de eso, necesitamos ver cómo podemos “refrescar” en Android la visualización en pantalla de nuestro juego del ahorcado.

Cuando hacemos un “repintado”, lo que vamos a hacer es decirle por código que repinte todo el aspecto gráfico. Esto significa que el programa “pinta” todo cada vez que lo forzamos. Para ello, tendrá en cuenta qué cosas tiene que pintar según las condiciones que vayan surgiendo en el juego.

Para el control de letras adivinadas se ha optado por la siguiente solución:

  • Se ha creado un atributo en la clase palabra, de nombre letras_acertadas, en el que el juego va añadiendo cada letra acertada que el jugador ha pulsado.
  • Cuando se repinta, lo que hace el código es tratar leer letra a letra este atributo, y pintarlas en la posición correspondiente de la palabra. El código tiene en cuenta que una misma letra puede aparecer más de una vez en la palabra.

Las modificaciones que se han hecho afectan a las clases: Juego, Escenario y Palabra. Vamos a ver las más importantes por separado. Al final de este post tienes el link para poder bajar el código fuente, si lo quieres:

Clase Juego.

  • Se ha modificado el método onKeyDown.

Se comprueba que la letra pulsada está en la lista de letras permitidas (String letras).

Si ya está como letra elegida con anterioridad (sea correcta o no), no se vuelve a tener en cuenta.

Se controla cuando el usuario pulsa la tecla Back, forzando la vuelta al menú principal. Para ello se ha utilizado la orden:

moveTaskToBack(true)

  • Se fuerza el repintado con la orden:

invalidate();

El código de onKeydown queda así:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event)

{

if (keyCode != event.KEYCODE_BACK)
{

String caracter = Character.toString(event.getDisplayLabel());

if (esletra(caracter))
{
// Aquí seguiremos con la lógica del juego.

if(letraenpalabra(caracter) && !letraenacertadas(caracter) && !letraenfalladas(caracter))
{
// añadimos la letra acertada al String de control.

escenario.getPalabra_juego().setLetras_acertadas(escenario.getPalabra_juego().getLetras_acertadas() + caracter);

escenario.setLetra_pulsada(true);

}
else
{
// si no está, controlamos al monigote

// añadimos la letra fallada al String de control.

escenario.getPalabra_juego().setLetras_falladas(escenario.getPalabra_juego().getLetras_falladas() + caracter);
}

escenario.invalidate(); //forzamos el repintado del juego
}

}
else
{
moveTaskToBack(true); // Si pulsa la tecla Back, Nos vamos al menú principal.
}
return true;

}

Clase Escenario.

  • El método onDraw ha sido modificado, sobre todo para poner condiciones que controlen lo que se debe repintar cuando se fuerza un invalidate.

Así queda:

@Override
protected void onDraw(Canvas canvas)
{

if(nuevo_juego)
{
monigote = new Monigote(canvas);
palabra_juego = new palabra(res, canvas, monigote);
palabra_juego.getPalabra();
nuevo_juego = false;
}

monigote.pinta();
palabra_juego.pinta_palabra();

if(letra_pulsada)
{
palabra_juego.pinta_letra();
letra_pulsada = false;

}

}

Clase palabra.

  • Se ha creado el método pinta_letra(), que es el encargado del proceso de “colocar”, las letras acertadas en la posición correspondiente. El código queda de la siguiente manera:
public void pinta_letra()

{

// método que “pinta” todas las ocurrencias de una letra

int inicio=0;
int i = 0;
boolean letra_pintada = false;
String letra_actual;

posicion_inicio =  munyeco.getdatosmonigote().getPdinfder();

for (i=0;i<getLetras_acertadas().length();i++)
{

letra_actual = letra_de_acertadas(i);
letra_pintada = false;
inicio = 0;

while(!letra_pintada)
{
inicio = getPalabra_en_curso().indexOf(letra_actual, inicio);
if(inicio == -1)
{
letra_pintada = true;
}
else
{
lienzo.drawText(letra_actual,
posicion_inicio + ((tamanyo_linea + espacio_entre) * inicio),
munyeco.getdatosmonigote().getPdinf() + espacio_abajo,
pincel_linea);

inicio++;
}
}
}

}

El aspecto del juego es el siguiente:

Si quieres bajar el proyecto de Eclipse de este desarrollo, incluyendo el desarrollo explicado en este post, haz click aquí.

 

Acerca de Isildur Fuentes

Apasionado de las buenas historias y aikidoka de la tierra.

Publicado el mayo 31, 2011 en Android, EDIB, Programación y etiquetado en , , , , , , . Guarda el enlace permanente. 2 comentarios.

  1. brother ya esoty en el nueve pero me da un error y le dado y nada
    el error dice:
    The method pinta() from the type Monigote is not visble

  2. resolvi el problema pero ahora me surge otro y es que en ves de dibujarse la letra sobre la rayita correspondiente solo me aparece una rafagas con la letra acertada y desaparece

A %d blogueros les gusta esto: