Programación I Práctica final: el juego del pinball (Septiembre)

Anuncio
Programación I
Práctica final: el juego del pinball (Septiembre)
(ENTREGA OBLIGATORIA)
El objetivo de esta práctica es implementar un juego de pinball con ciertas variantes respecto
de la práctica de Diciembre. En esta nueva práctica, el escenario sigue siendo una matriz de
20x20. Sigue habiendo líneas y simulaciones que se deberán leer de unos ficheros que
después se explican. Y también hay resultados y estadísticas que se escribirán en un fichero.
Sin embargo, hay algunas diferencias que se resumen a continuación y se describen más
adelante.
Esta vez, en los ficheros de entrada, la posición de cada línea se indica mediante las
coordenadas (fila y columna) de sus dos extremos. De esta manera, a partir de las
coordenadas, podéis deducir si se trata de una línea vertical, horizontal, diagonal desde abajoizquierda hasta arriba-derecha o diagonal desde abajo-derecha hasta arriba-izquierda.
Además se introducen puertas de tele-transportación en el escenario. Una puerta de teletransportación se compone de dos puntos (uno de entrada y otro de salida) en el espacio bidimensional del juego. Cuando la bola cae en el punto de entrada de una puerta, es teletransportada al punto de salida de la misma puerta. Nótese que debe tenerse en cuenta que el
paso por una puerta conlleva únicamente dos pasos (uno para el punto de entrada y otro para
el punto de salida), es decir, en el cómputo de pasos que hace la pelota, no se cuentan las
casillas que separan los puntos de entrada y de salida de la puerta. Después de atravesar una
puerta, la pelota conserva su movimiento inicial. Por ejemplo, si una pelota con movimiento
hacia la izquierda cae en una puerta, seguirá teniendo un movimiento hacia la izquierda
después de salir de la puerta de salida.
También hay algunas diferencias en el cálculo de estadísticas. Finalmente también se explican
algunas reglas que debéis seguir en el código. Todo ello se detalla en los siguientes apartados.
Formato de los ficheros
Para la ejecución de la práctica són necesarios dos ficheros: escenario.txt y simulaciones.txt.
Fichero escenario.txt
Este fichero contiene la información del escenario concreto del juego. En particular, incluye
información sobre las líneas y puertas de tele-transportación. Comenzamos describiendo la
forma en la que se especifican las líneas. Nótese que, mientras en la versión anterior la
posición de las líneas se especificaba en un fichero matriz, ahora se especifica mediante las
coordenadas de sus extremos.
Cada una de las líneas se describe como sigue:
- el carácter ‘L’, que la identifica como una línea
- un nombre (una cadena de caracteres sin espacios en blanco con un máximo de 20
caracteres)
- un valor (un número entero positivo) que será el que se utilizará para calcular el
número de puntos de cada simulación o lanzamiento (cada vez que la pelota impacte
con la línea se sumará este valor a la puntuación del lanzamiento)
- cuatro valores (enteros no negativos) que representan los dos pares de coordenadas
que corresponden a las posiciones de los dos extremos de la línea. Estos valores están
separados por un espacio en blanco y el orden en que aparecen es: fila del primer
extremo, columna del primer extremo, fila del segundo extremo, columna del segundo
extremo.
Aunque la representación de las líneas ha cambiado con respecto a la práctica de diciembre,
aún se conservan los 4 tipos de líneas permitidos: horizontal, vertical y diagonales (45° y 45°). Las líneas diagonales son todavía los únicos obstáculos que pueden cambiar la
dirección de movimiento (hacia izquierda o hacia derecha).
La información de cada línea aparece en una línea diferente, y para cada línea, cada uno de
sus elementos (carácter L, nombre, valor, y las coordenadas) estará separado por un espacio
en blanco, e inmediatamente después de la última coordenada aparece el carácter salto de
línea. Se mantienen las mismas reglas respecto de la disposición de las líneas: no pueden
tocarse dos líneas y no habrá líneas ni en la primera (0) ni última (19) filas ni columnas.
Por otro lado, cada una de las puertas de tele-transportación se describe en el fichero del
siguiente modo:
-
-
el carácter ‘P’ que la identifica como una puerta
un nombre (una cadena de caracteres sin espacios en blanco con un máximo de 20
caracteres)
un valor (un número entero positivo) que será el que se utilizará para calcular el
número de puntos de cada simulación o lanzamiento (cada vez que la pelota atraviese
la puerta se sumará este valor a la puntuación del lanzamiento)
cuatro valores (enteros no negativos) que representan los dos pares de coordenadas
que se corresponden con las posiciones de los dos puntos de la puerta. Estos valores
están separados por un espacio en blanco y el orden en que aparecen es: fila del punto
de entrada, columna del punto de entrada, fila del punto de salida, columna del punto
de salida.
La información de cada puerta aparece en una línea diferente, y para cada puerta, cada uno de
sus elementos (carácter P, nombre, valor, y las coordenadas) estará separado por un espacio
en blanco, e inmediatamente después de la última coordenada aparece el carácter salto de
línea. No habrá puertas ni en la primera (0) ni última (19) fila. Tampoco habrá ninguna puerta
superpuesta a una línea.
Por ejemplo:
L girona 24 1 1 1 3
P lleida 13 3 5 5 13
L tarragona 22 1 15 3 17
...
Fichero simulaciones.txt
Cada una de las 10 simulaciones (lanzamientos de pelota) de que consta el juego se asocia a
un jugador diferente. Este fichero contiene 10 líneas (una para cada uno de los 10
lanzamientos), y cada línea contiene el nombre del jugador (una cadena de caracteres sin
espacios en blanco con un máximo de 20 caracteres), la columna inicial del lanzamiento
(número entero de 0 a 19) y la dirección de impulso (‘i’ para izquierda o ‘d’ para derecha).
Cada uno de estos tres elementos va separado por un espacio en blanco e inmediatamente
después del carácter de la dirección de impulse aparece el carácter salto de línea.
Por ejemplo:
toni 3 i
jesus 5 d
amaury 18 d
nir 16 d
mar 12 i
...
Generación del fichero de resultados
Los resultados que se describen a continuación se guardarán en el fichero resultados.txt, en el
orden y formato indicados. Recordad que debéis respetar tanto el formato de la visualización
como el de los resultados. No respetarlo conlleva penalizaciones en la nota.
1- Visualización
Se escribirá el contenido de la tabla, usando un espacio en blanco si la casilla esta vacía, el
símbolo '*' si la casilla contiene un fragmento de una línea y el símbolo 'p' si contiene una
puerta de tele-transportación (ya sea un punto de entrada o de salida).
Después de imprimir la última línea, se pasará a la siguiente línea sin incluir más saltos de
línea
2- Estadísticas acerca de tabla
Se calcularán las estadísticas de obstáculos siguientes:
z s0, s1, s2, s3: Número de líneas presentes de cada tipo (vertical, horizontal, diagonal
desde abajo-izquierda hasta arriba-derecha, diagonal desde abajo-derecha hasta arribaizquierda)
z s4, s5, s6, s7: Nombre y longitud (separados por un guión ‘-‘) de la línea más grande
para cada tipo, en el mismo orden. Por ejemplo:
mataro-6 manresa-5 vielha-2 reus-3
s4
z
z
z
z
s5
s6
s7
s8: Número total de líneas
s9: Nombre y longitud (separados por un guión ‘-‘) de la línea más larga
s10: Nombre y valor (separados por un guión ‘-‘) de la línea con un valor más alto
s11: Número total de puertas
s12: Nombre y longitud (separados por un guión ‘-‘) de la puerta con los puntos de
entrada y salida más distantes entre sí.
z
Estas 11 estadísticas se escribirán en la misma línea separadas por un espacio en blanco:
s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12
y a continuación se saltará a la línea siguiente
3-Simulación de la caída de las pelotas
z Se calcularán y se imprimirán por pantalla las estadísticas siguientes:
c s13: índice de la columna en la cual la pelota haya tocado el suelo más veces y
cuántas veces lo ha hecho (separados por un guión ‘-‘). En caso de empate se
seleccionará el índice de columna más pequeño. Los índices van de 0 a 19. Por
ejemplo:
5-7 (la pelota ha acabado 4 veces en la columna con índice 5)
s14: nombre de la línea que más impactos ha recibido a lo largo de todas las
simulaciones y número de impactos (separados por un guión ‘-‘). En caso de empate
se seleccionará la menor alfabéticamente.
c
s15: nombre de la línea que más puntos ha producido a lo largo de todas las
simulaciones y puntos que ha producido (separados por un guión ‘-‘). En caso de
empate se seleccionará la menor alfabéticamente.
c s16: nombre de la puerta que más veces ha sido atravesada a lo largo de todas las
simulaciones y número de veces (separados por un guión ‘-‘). En caso de empate se
seleccionará la menor alfabéticamente.
c s17: nombre de la puerta que más puntos ha producido a lo largo de todas las
simulaciones y puntos que ha producido (separados por un guión ‘-‘). En caso de
empate se seleccionará la menor alfabéticamente.
c
Las estadísticas se imprimirán por pantalla de la manera siguiente:
s13 s14 s15 s16 s17
Después de la imprimir la última línea, se saltará a la línea siguiente sin incluir más saltos de
línea.
4-Matriz de ocupación
Se imprimirá la matriz de ocupación después de haber realizado las 10 simulaciones y se
saltara a la línea siguiente, se saltará a la línea siguiente sin incluir más saltos de línea.
En caso de que alguna pelota entre y salga por una puerta, se sobrescribirá el símbolo 'p' de
sus puntos de entrada y salida para dejar aparecer el contador de ocupación de las casillas.
5. Top-3
A continuación se incluirá la lista de las mejores tres simulaciones en función del número de
puntos obtenidos, ordenadas de la primera a la tercera. Cada simulación estará en una línea
diferente y contendrá, separados por espacios los siguientes elementos:
nombre número puntos
Donde nombre es el nombre de la simulación (por ejemplo “toni”), número es el número de
simulación (de 0 a 9), puntos es el número total de puntos de esa simulación. En caso de
empate a puntos, se seleccionará el nombre alfabéticamente menor.
Normas adicionales
El uso de variables globales está prohibido. Lógicamente sí pueden definirse tipos de datos
de forma global.
Documentación
Además del correcto funcionamiento del programa, se valorará:
-
Estructuración en funciones (y facilidad para la reutilización)
Documentación del código (y legibilidad)
Así mismo, hay que entregar una memoria (documento en Word, OpenOffice o RTF) en la
que se incluya una explicación sobre el funcionamiento general del código, y se justifiquen
los tipos de datos y funciones utilizadas. Además, cada función debe ser descrita brevemente,
especificando sus parámetros y valor retornado.
Indicaciones para la entrega
Esta práctica se realizará en parejas. Alternativamente puede realizarse individualmente, pero
bajo ninguna circunstancia en grupos de más de dos alumnos.
La entrega de esta práctica es obligatoria. La fecha límite de entrega es el 1 de septiembre a
las 10:00 de la mañana.
Depositad la carpeta con vuestro trabajo, incluyendo la memoria, (el nombre de la carpeta
será vuestros nias, separados por un guión bajo, por ejemplo “31234_32345”) en la carpeta de
vuestro grupo de práctica correspondiente (P11, P12, P13, P21 o P22), dentro de
\\rec-c1au\PUBLIC\FOLDERS\3371-3372\12406\Alumnes\practica_septiembre
Si una vez copiada tenéis algún problema o tenéis que hacer algún cambio, volvedlo a copiar
desde una carpeta nueva añadiendo "_b" al nombre, por ejemplo "31234_32345_b"
Para acceder desde fuera de la UPF debéis utilizar NetStorage. En
http://www.upf.edu/bibtic/_pdf/C1AU-NETSTORAGE.pdf encontraréis una guía detallada
sobre cómo hacerlo (para visualizarlo deberéis autenticaros con vuestro usuario del Campus
Global)
No se permite la entrega por correo electrónico ni mediante ningún otro mecanismo
aparte de los anteriormente especificados.
Recordad que el compilador a utilizar es gcc, en Linux o en Cygwin. Los ficheros que no
puedan compilarse con gcc no se corregirán.
El hecho de no cumplir cualquiera de los requerimientos (incluyendo el de dos personas
por grupo, compilador válido, uso de variables globales, estructuras de datos requeridas
y entrega de la memoria) supondrá un cero como nota de la práctica. Así mismo, es
fundamental que los ficheros con los que trabajéis sigan los formatos y nombres que se
detallan en este enunciado. Si los formatos y nombres de ficheros no son los correctos la
parte de ejecución tendrá una nota de cero.
Reiteramos que, para la evaluación, tanto o más importante que el que el programa
funcione es que esté bien estructurado en funciones y que sea legible y esté bien
documentado.
Como es lógico, la copia está terminantemente prohibida, ya sea de todo o de parte del
código o de la memoria. Además, os recordamos que la detección de una copia de
trabajos ajenos conlleva el suspenso automático de la asignatura para todos los alumnos
involucrados en la copia, además de la iniciación del consiguiente procedimiento
disciplinario.
Descargar