domingo, 25 de mayo de 2014

El juego de las siete y media. Parte I.



Vamos a empezar con el primer programa más complicado y entretenido: El juego de las siete y media.
Lo primero es conocer el juego. Es un antiguo juego de cartas (a mí me lo enseñó mi abuela) en el que cada jugador va sacando cartas hasta acercarse lo máximo posible al valor 7 y medio, pero sin pasarse. El que quede más cerca del valor, es el ganador.

Las cartas tienen su valor del 1 al 7 y las tres cartas más altas (sota 8, caballo 9 y rey 10) tendrán el valor de medio punto.

A la hora de desarrollar una idea, hay que ir dividiendo el "problema" o idea en bloques más pequeños que sean más asequibles. La forma de abordar esto es totalmente personal y se puede realizar de todas las formas imaginables, habrá muchas formas de hacerlo y todas válidas, aunque unas pueden ser más eficientes que otras (en otro post hablaremos de la eficiencia y su importancia), ahora mismo, con que funcione, podemos estar contentos.

Por ejemplo, uno de los primeros problemas que podemos diferenciar es cómo simular que se obtienen cartas aleatorias de la baraja. Para simular esto, vamos a crear números aleatorios del 1 al 10, para eso se utiliza la función 'rand()'. Esta función se utiliza de la siguiente forma:
                                                              int carta = rand() % 10 + 1;
Así indicamos que nos devuelva un número aleatorio del 1 al 10 (por eso se le suma 1 al final, para que empiece desde 1 y no sea de 0 a 9);

Otro de los bloques a resolver sería cómo conocer el número de jugadores y hacer que todos jueguen. Para resolver esto, podemos preguntar al principio cuántos jugadores van a jugar y a través de un bucle, controlar que cada uno juegue su ronda.

Para guardar los resultados, se me ha ocurrido utilizar un array (una matriz). Una matriz es algo parecido a una estantería, en cada estante va una caja (variable). Como hasta que el usuario no nos lo indique no sabremos cuántos jugadores hay, utilizaremos lo que se conoce como memoria dinámica, es decir, que no crearemos la estantería hasta saber cuántos estantes tendrá. Es un concepto un poco abstracto, pero quizá se vea más claro en el ejemplo.
                             double *resultados;
                             resultados = new double[jugadores];
                             for ( int i=0; i<jugadores; i++)
                             {
                                        resultados[i] =0;

La primera línea crea la base de la estantería, una vez que conocemos el valor de la variable 'jugadores' es cuando creamos los pisos de la estantería con la palabra 'new'. Para acceder a las diferentes posiciones, se utiliza lo que sería el número de estante (empezando desde cero).

Al final del programa, podemos rescatar todos los resultados y mostrar el marcador con todos los jugadores y su puntuación.

El próximo post veremos el código (una posibilidad), el resultado y propondremos algunas mejoras para los valientes.

2 comentarios:

  1. Este fin de semana voy a intentar colgar un vídeo de la ejecución aunque quede algo cutre porque no he encontrado ningún software para grabar el escritorio de mi viejo portátil. Es lo que tiene reciclar los equipos hasta que ya no dan más de sí, pero aún así, se hará lo mejor posible.

    ResponderEliminar
  2. Ya está la entrada editada con el vídeo del resultado. Ha quedado bastante mal, pero ahora mismo no tengo posibilidades de mejorarlo. Puede que más adelante lo cambie por un vídeo mejor.

    ResponderEliminar