Diferencia entre revisiones de «PrInf18: Juego: doble o nada»
(→Descripción del juego) |
(→Segunda versión del juego) |
||
| Línea 66: | Línea 66: | ||
== Segunda versión del juego == | == Segunda versión del juego == | ||
| − | + | En la primera versión del juego, el imán "salta" una única vez. Vamos a incrementar las posibilidades de ganar, haciendo que el imán pueda saltar varias veces si cae dentro del polígono. | |
| + | |||
| + | {{Tarea|Escribe el programa de esta versión del juego en un fichero de nombre ''dobleNadaSaltos.m''}} | ||
[[Categoría:Prácticas de Informática]] | [[Categoría:Prácticas de Informática]] | ||
Revisión del 11:43 10 ago 2013
| Práctica de Informática | |
|---|---|
| Juego: doble o nada | |
| Práctica anterior | Siguiente práctica |
| Este artículo es un guión de prácticas de Informática | |
| |
En esta práctica vamos a implementar un juego, reutilizando las funciones que hemos escrito en la práctica anterior. En este juego, tenemos un polígono y pedimos al usuario un punto, al igual que en los programas anteriores. El ordenador coloca un imán en el punto que indica el usuario. En el vértice más cercano hay otro imán que repele a nuestro imán, y lo lanza al doble de distancia. Si el imán continúa dentro del polígono tras ser lanzado, el jugador pierde. Por el contrario, si el imán logra escapar del polígono, el jugador gana.
Contenido
1 Requisitos previos
Antes de realizar esta práctica, es imprescindible haber realizado antes la práctica anterior:
2 Primera versión del juego
2.1 Descripción del juego
Antes de empezar a programar, vamos a ver dos ejemplos de una jugada ganadora y otra perdedora, teniendo como polígono un triángulo. En la primera imagen tenemos un ejemplo de jugada ganadora. El usuario introduce el punto en la posición azul. El programa busca el vértice más cercano, calcula la distancia hasta ese vértice, y lanza el imán hasta el doble de distancia. La nueva posición es la del punto morado, que al caer fuera del polígono, hace que la jugada sea ganadora.
En la segunda imagen, el usuario introduce un punto diferente. El vértice más cercano resulta ser el mismo. Esta vez, el punto morado, resultado de repeler el imán hasta el doble de distancia al vértice, continúa dentro del polígono, por lo que el jugador pierde.
En resumen, nuestro programa tiene que realizar las siguientes tareas:
- Pedir un punto al usuario
- Buscar el vértice más cercano al punto
- Calcular un nuevo punto al doble de distancia del vértice que el punto introducido por el usuario
- Comprobar si el nuevo punto está dentro o fuera del polígono
La salida de datos del programa debe constar de un mensaje que diga alguno de los dos mensajes siguientes (las tildes se han quitado a propósito para evitar problemas en la corrección del programa). Si el jugador gana:
El iman ha salido del poligono. Has ganado!
Si el jugador pierde:
El iman continua dentro del poligono. Has perdido :(
Es importante que estos dos mensajes se escriban usando el comando disp, para que la comprobación final de la práctica funcione correctamente. El programa debe generar también una imagen como las de la derecha, aunque no es necesario que incluya ninguna etiqueta de texto en los ejes.
2.2 Código para dibujar el triángulo y los puntos
Para generar las imágenes con el polígono y los puntos, podemos usar el siguiente código:
clf;
fill(x, y, 'g');
hold on;
plot(xp,yp,'x','LineWidth',8,'MarkerSize',14);
plot(xc,yc,'or','LineWidth',8, 'MarkerSize', 14);
plot(xn,yn,'om','LineWidth',8, 'MarkerSize', 14);
set(gca,'fontsize',14);
set(gca,'fontweight','bold');
set(gca,'linewidth',4);
grid on;
hold off;En este código, se supone que el polígono y los puntos están en las siguientes variables:
- x e y son los vectores con las coordenadas de los vértices del polígono
- xp e yp son las coordenadas del punto introducido por el usuario, que aparece con una cruz azul
- xc e yc son las coordenadas del vértice más cercano al punto, que aparece con un círculo rojo
- xn e yn son las coordenadas del punto donde aterriza el imán tras ser repelido, y se representa por un círculo en color violeta
2.3 Funciones útiles para el juego
Además de las funciones distancia y encuentraVerticeMasCercano, programadas en la práctica anterior, para este juego necesitamos otra función, que calcule la posición del punto donde aterriza el imán. Para este cálculo, tenemos el punto que introduce el usuario [math](x_p, y_p)[/math], y el punto del vértice más cercano [math](x_v, y_v)[/math]. Independientemente de la posición relativa de [math]p[/math] y [math]v[/math], la posición del punto donde aterriza el imán tras ser repelido [math](x_n, y_n)[/math] vendrá dada por
[math]\displaystyle \begin{eqnarray*} x_n &= x_p + (x_p - x_v) \\ y_n &= y_p + (y_p - y_v) \end{eqnarray*}[/math]
Para implementar el juego, sería útil tener una función de nombre doblaDistancia, que devuelva dos argumentos, xn e yn, y que acepte cuatro argumentos de entrada, xp, yp, xv e yv. La cabecera de la función sería
function [xn, yn] = doblaDistancia(xp, yp, xv, yv)Es muy importante que esta función tenga esta definición, y que las función encuentraVerticeMasCercano tenga la definición incluida en la práctica anterior. De lo contrario, el corrector automático del programa no funcionará correctamente.
| |
Tarea: | Termina la función doblaDistancia, para poder usarla dentro del programa. |
| |
Tarea: | Cuando hayas terminado la función, escribe el programa del juego en un fichero de nombre dobleNada.m |
2.4 Comprobación de las funciones
Puedes usar este programa para comprobar si has creado correctamente las funciones necesarias para el juego: CompruebaDobleNada
Descarga el fichero en el mismo directorio donde tengas creadas las funciones del juego, y luego ejecuta CompruebaDobleNada. El programa comprobará un conjunto de varios miles de puntos con diferentes tipos de polígonos, e informará del porcentaje de puntos que han sido correctamente calculados por las funciones del juego.
Es importante que las funciones tengan las mismas cabeceras que se han definido en esta práctica y en la anterior. Hay que tener en cuenta también que este programa no comprueba el juego en sí, sino que solo prueba las funciones necesarias para que el juego funcione correctamente.
3 Segunda versión del juego
En la primera versión del juego, el imán "salta" una única vez. Vamos a incrementar las posibilidades de ganar, haciendo que el imán pueda saltar varias veces si cae dentro del polígono.
| |
Tarea: | Escribe el programa de esta versión del juego en un fichero de nombre dobleNadaSaltos.m |