12/11/10

Next target: Mastermind


-¡Beep! ¡Error! ¡NO compila!
-¡Beep! ¡Error! ¡NO compila! 
(Desperación, golpe)
-¡Beep! ¡Compila! ¡El resultado es el esperado!
Si, hay días que podrían describirse perfectamente así...

El pasado lunes empezamos la tercera y última práctica de mi asignatura cuatrimestral favorita (ejemprogramaciónejem). Muchas, muchísimas veces me he preguntado cuál sería el primer videojuego que programaría... y, aunque no es exactamente un videojuego, ahora ya tengo una respuesta: Mastermind.
La verdad es que casi me caigo de la silla cuando nuestro otro profesor de prácticas (tenemos dos, éste es el especial que solo nos da cuatro clases clave en el curso) nos comentó por encima cómo teníamos que enfocar este proyecto, porque, uhm... cómo decirlo... bueno, el caso es que nunca antes había jugado al Mastermind. Para los que, como yo por aquel entonces, no tengan ni puñetera idea de qué va el juego, podéis informaros aquí y jugarlo aquí.
Después del susto inicial y de unos cuantos ejercicios con matrices y números aleatorios con los que soltarnos, he de decir que estoy emocionada. He leído el guión de la práctica y he empezado a programarlo hasta donde mis conocimientos me han permitido, pero tengo muchas ganas de terminarlo y verlo funcionar de verdad. Y, como me apetece seguir hablando del Mastermind, voy a colgar el primer método del programa porque es muy sencillo y creo que voy a saber explicarlo bien. Este método (en general todos los métodos) hace una determinada función que nosotros hemos programado de antemano. Así, para no tener que estar escribiendo siete veces, por ejemplo, "quiero que eleves al cuadrado el valor de la variable no se cual..." en sintaxis de Java, lo que hacemos es llamar al método "eleva al cuadrado" y decirle sobre qué queremos que lo aplique (normalmente los métodos suelen contener funciones más complicadas). Tachan, lo que antes nos ocupaba veinte líneas ahora sólo nos ocupa una. Ahorramos espacio y el código es mucho más claro y legible.

Método: generaNumeroAleatorio

Los comentarios en Java se escriben mediante doble barra // ó bien barra asterisco-asterisco barra /*-comentario-*/. El código está muy, muy, muy comentado para que sepáis qué significa exactamente cada línea. Cada comentario se refiere a la línea inmediatamente posterior a él (comentario arriba, línea comentada abajo). Los colores los pongo tal y como se asignan en java.

    /*Este método genera un número aleatorio comprendido en el intervalo [1,valoresPosibles]*/
    public static int generaNumeroAleatorio(int valoresPosibles){
                    /*Almacena en una variable llamada "f", un número aleatorio decimal generado entre [0,valoresPosibles]*/
        double f=Math.random()*(valoresPosibles+1);
                    /*Le pedimos que sólo se quede con la parte entera (número sin comas) del número generado.*/
        int a=(int)f;
        /*En las tres líneas siguientes evalúa si el número generado es cero. De ser así lo cambia.*/
        while(a==0){
            f=Math.random()*(valoresPosibles+1);
            a=(int)f;
        }
        /*Una vez nuestros requisitos se cumplan, se devuelve el valor del número generado*/
        return a;
    }


Y eso es todo. Queríamos un número del intervalo cerrado [1, valoresPosibles], así que sólo teníamos que generar números aleatorios y decirle que si generaba un cero lo descartase y volviese a generar otro número aleatorio.


Oh, btw... sólo hay dos lenguas que me resultan tremendamente apasionantes. Puede que la primera ocupe ese lugar privilegiado porque la mayoría de los lenguajes de programación se escriban así, porque sus construcciones idiomáticas resulten apasionantes o porque resulte Descaradamente Genial en labios de Brian Kinney... pero, sea como sea, el inglés es definitivamente la lengua más cool y sexy del mundo. Seguida de cerca, claro está, por el fluido japonés que emana de los labios de Orihara Izaya y compañía...



1 comentario:

Niwa dijo...

Habrá que echar una partidita, ¿no?

Si te soy sincera, detesto estas entradas tuyas con frgmentos de código, no te hace ni idea de cuánta envidia me dan >.<
Al verlo echo de menos hasta los proyectos basura de VB que hacía el año pasado. Me da rabia no tener más tiempo para jugar y crear cosas bonitas... Pero estas navidades o este verano, pienso obligarte a darme un par de clases prácticas de java, que lo sepas.