viernes, 11 de enero de 2013

Juego del ahorcado en Java (Modo Texto)

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;


@SuppressWarnings("serial")
public class Ahorcado extends Applet
    implements KeyListener
{

    final int NUMPALABRAS = 12;
    final int MAXINTENTOS = 5;
      // No deberíamos modificar el número máximo de intentos,
      // porque vamos a dibujar 5 "cosas" cuando se equivoque

    String palabra;        // La palabra a adivinar
    StringBuffer intento;  // Lo que el jugador 2 va consiguiendo
    String letras="";      // Las letras que se han probado

    int oportunidades;     // El número de intentos permitido
    char letra;            // Cada letra que prueba el jug. dos
    int i;                 // Para mirar cada letra, con "for"
    boolean acertado;      // Si ha acertado alguna letra
    boolean terminado;     // Si la partida ha terminado

    String datosPalabras []=
    {
        "Alicante","Barcelona","Coruña","Guadalajara","Madrid",
        "Malaga","Ourense","Sevilla","Toledo",
        "Valencia","Valladolid","Zaragoza"
    };


    void PrimerFallo(Graphics g)
    {   // Primer fallo: Dibujamos la "plataforma"
        g.setColor(Color.cyan);
        g.drawLine(20, 180,  120, 180);
    }


    void SegundoFallo(Graphics g)
    {   // Segundo fallo: Dibujamos el "palo vertical"
        g.drawLine(100, 180,  100, 125);
    }


    void TercerFallo(Graphics g)
    {   // Tercer fallo: Dibujamos el "palo superior"
        g.drawLine(100, 125,   70, 125);
    }


    void CuartoFallo(Graphics g)
    {  // Cuarto fallo: Dibujamos la "cuerda"
       g.drawLine(70, 125,   70, 130);
    }


    void QuintoFallo(Graphics g)
    {  // Quinto fallo: Dibujamos la "persona"
      
        //int j;

            // Cabeza
        g.setColor(Color.yellow);
        g.drawOval(62, 130, 16, 16);
            // Tronco
        g.drawLine(70, 146,   70, 160);
            // Brazos
        g.drawLine(50, 150,  90, 150);
            // Piernas
        g.drawLine(70, 160,   60, 175);
        g.drawLine(70, 160,   80, 175);
    }


    public void init() {

        // Valores iniciales
        i = (int) Math.round(Math.random() * NUMPALABRAS);
        palabra = datosPalabras[ i ];
        oportunidades = MAXINTENTOS;

        // Relleno con * y " " lo que ve Jug. 2
        intento = new StringBuffer(palabra);

        for (i=1; i<=palabra.length(); i++)
        if (palabra.charAt(i-1) == ' ' )
            intento.setCharAt(i-1, ' ');
        else
            intento.setCharAt(i-1, '*');

        terminado = false;
        requestFocus();
        addKeyListener(this);
    }


    public void paint(Graphics g) {

        // Primero borro el fondo en negro
        g.setColor( Color.black );
        g.fillRect( 0, 0, 639, 479 );

        // Digo cuantos intentos le quedan
        g.setColor(Color.white);
        g.drawString("Te quedan " + oportunidades + " intentos",
            80, 18);

        // Le muestro como va
        g.drawString(intento.toString(),
            80, 32);

        // Muestro las letras probadas
        g.setColor(Color.yellow);
        g.drawString("Letras intentadas:" + letras,
            20, 72);

        // Y le pido otra letra
        g.drawString("Que letra?", 20, 60);

        // Dibujo lo que corresponde del "patibulo"
        if (oportunidades <= 4) PrimerFallo(g);
        if (oportunidades <= 3) SegundoFallo(g);
        if (oportunidades <= 2) TercerFallo(g);
        if (oportunidades <= 1) CuartoFallo(g);
        // Si se acabo: Le felicito o le digo cual era
        if ((oportunidades <= 0) || (palabra.equals(intento.toString()))) {
            terminado = true;
            if ( palabra.equals(intento.toString() ) )
                g.drawString("Acertaste!",
                    20, 100);
            else
            {
            g.drawString("Lo siento.  Era: " + palabra,
                20, 100);
            QuintoFallo(g);
            }
        }
    }


    public void keyTyped(KeyEvent e) {
        letra=e.getKeyChar();
        if (! terminado) {
            letras=letras+letra;

            acertado = false;      // Miro a ver si ha acertado
            for (i=1; i<=palabra.length(); i++)
              if (Character.toLowerCase(letra) == Character.toLowerCase(palabra.charAt(i-1)))
                {
                intento.setCharAt(i-1, palabra.charAt(i-1) );
                acertado = true;
                }

            if ( ! acertado )     // Si falló, le queda un intento menos
              oportunidades --;
        }
        repaint();
        e.consume();
    }

    public void keyReleased(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
    }

}

//Son 166 líneas un juego simple del ahorcado.
//Os dejo también el archivo en Java

//Ahorcado.java

No hay comentarios:

Publicar un comentario