Java - MAQUINA PINBALL ECLIPSE (JAVA)

 
Vista:
sin imagen de perfil

MAQUINA PINBALL ECLIPSE (JAVA)

Publicado por juan (4 intervenciones) el 29/06/2015 15:43:15
Máquina pinball
Se pide escribir un programa que simule una máquina de tipo pinball. La máquina tiene una superficie plana en la que hay varios obstáculos (bumpers y muros). La superficie se modeliza como una rejilla de m x n posiciones con el origen en la esquina inferior izquierda. Cada bumper ocupa una posición en la rejilla. Las posiciones del borde de la rejilla son todas muros. Las bolas con las que se juega aparecen una a una en la rejilla, con una posición inicial, una dirección y un tiempo de vida. En esta simulación, todas las posiciones son enteras y la dirección de la bola es una de las siguientes: arriba, abajo, izquierda o derecha. La bola rebota por la rejilla, golpeando bumpers (lo que permite acumular puntos) y muros (que no aportan puntos). El número de puntos acumulados al golpear un bumper dado es el valor de ese bumper. La velocidad de todas las bolas es siempre un espacio de la rejilla por unidad de tiempo. Una bola "golpea" un obstáculo durante una unidad de tiempo cuando de otra forma se colocaría sobre el bumper o sobre el muro. Un golpeo causa que la bola "rebote" girando a la derecha (en el sentido de las agujas del reloj) 90 grados, sin colocarse encima del obstáculo y sin cambiar su posición (solamente la dirección cambia como resultado de un rebote). Observar que esta definición supone que una bola "deslizándose" a lo largo de un muro no constituye "golpear" el muro.

El tiempo de vida de una bola indica cuántas unidades de tiempo vivirá la bola antes de desaparecer de la superficie. La bola usa una unidad de tiempo de vida por cada paso que da en la rejilla. Además también usa unidades de tiempo de vida por cada bumper o muro que golpea. El tiempo de vida usado por un golpeo es el coste de ese bumper o muro. Siempre que la bola tenga un tiempo de vida positivo cuando golpea un bumper, obtiene la los puntos asociados a ese bumper. Observar que una bola con un única unidad de tiempo de vida morirá en el siguiente movimiento y por tanto no podrá obtener puntos al golpear un bumper durante su último movimiento ni se le aplicará el coste del bumper. Una vez que el tiempo de vida es negativo o cero, la bola desaparece y el juego continua con la siguiente bola.

La entrada
El programa simulará un juego de pinball con varias bolas. Hay varias líneas de entrada que describen el juego. La primera línea da dos enteros m y n, separados por un espacio. Juntos describen el tamaño de la rejilla y cualquier posición (x, y) cumple que tex2html_wrap_inline38 y tex2html_wrap_inline40. Siempre se cumplirá 2 < m < 51 y 2 < n < 51. La siguiente línea da el coste por golpear el muro. La siguiente línea da el número de bumpers, un entero tex2html_wrap_inline46. Las siguientes p líneas dan la posición x, la posición y, el valor y el coste de cada bumper, como cuatro enteros por línea separados por espacios. Las posiciones x e y de todos los bumpers estarán en el rango de la rejilla. El valor y el coste puede ser cualquier entero (es decir, pueden ser negativos; un coste negativo añade tiempo de vida a una bola que golpea el bumper). El resto de líneas del fichero representan las bolas. Cada línea representa un bola, y contiene 4 enteros separados por espacios: la posición x e y de la bola, la dirección de movimiento, y su tiempo de vida. La posición estará en el rango válido de la rejilla (y nunca encima de un bumper o del muro). La dirección será uno de los 4 valores siguientes: 0 para un incremento en x (derecha), 1 para un incremento en y (arriba), 2 para un decremento en x (izquierda), y 3 para un decremento en y (abajo). El tiempo de vida será un entero positivo.

La salida
Se dará una línea de salida por cada bola dando el número entero de puntos acumulados por esa bola y en el mismo orden en el que aparecen las bolas en la entrada. Después de esas líneas, se imprimirá el total de puntos acumulados por todas las bolas.

CON LA SIGUIENTE MODIFICACIÓN:

En el tablero de la máquina pinball podrán existir agujeros en distintas posiciones. Los agujeros tendrán una profundidad que será un número positivo que indicará el número de bolas que caben en el agujero. Todas las bolas que pasen por la casilla con agujero caerán en él hasta que esté lleno. Una vez lleno las bolas no caerán y podrán seguir jugando con normalidad. Toda bola que ha caído en un agujero no podrá seguir moviéndose pero mantendrá sus puntos.
La entrada al programa cambiará. Después de dar las posiciones de los bumpers aparecerá una línea con un único número que indicará el número de agujeros que vienen a continuación. Cada agujero vendrá dado por una terna de tres números, los dos primeros indicando la casilla en la que se posiciona el agujero y el tercero la capacidad de bolas que tiene el mismo. Ninguna bola podrá aparecer inicialmente en un agujero. La salida no cambiará respecto a la primera convocatoria.
Ejemplo
Entrada
5 5
0
2
2 2 1 0
4 3 1 0
2
4 2 1
4 4 2
3 2 0 1
3 2 0 2
3 2 1 3
3 2 1 4
3 2 1 6

Salida
0
0
0
0
1
1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder