1 Proyecto Burbujas

Anuncio
Proyecto Burbujas
Introducción
El proyecto de programación consiste en la
implementación de un sencillo videojuego en 2D. El
juego propuesto está formado por un tablero que
contiene burbujas y un jugador que puede rebotar sobre
ellas o hacerlas explotar. El objetivo del juego es que el
jugador se mantenga dentro del tablero el mayor tiempo
posible.
Geometría
Un punto se caracteriza por sus coordenadas x e y de tipo entero pudiendo tomar
valores negativos. Un punto puede ser desplazado por el plano especificando el
incremento de desplazamiento en cada eje.
Un círculo se caracteriza por un punto que representa el centro y por el radio (valor
entero positivo). Tiene la propiedad perímetro que se calcula como 2.π.radio.
Un rectángulo se caracteriza por los puntos que representan sus cuatro vértices y el
tamaño de los lados (paralelos a los ejes de coordenadas). Así mismo, también
interesa conocer las coordenadas mayores y menores de los vértices en los dos ejes:
menorX, mayorX, menorY y mayorY.
Las figuras geométricas (círculo y rectángulo) se pueden desplazar en el espacio. Los
desplazamientos siempre se realizan en el sentido de alguno de los ejes y se
especifican indicando una dirección. La dirección de desplazamiento puede ser:
izquierda, derecha, arriba y abajo.
Así mismo, interesa determinar el solapamiento de rectángulos. Para ello se utiliza
la siguiente fórmula que se apoya en las propiedades “menor/mayor” del rectángulo:
-
Sean A y B dos rectángulos, siendo menorX(A) la coordenada menor X del
rectángulo A, menorY(A) la coordenada menor Y del rectángulo A, etc., se
dice que A y B están solapados si se cumplen las siguientes condiciones:
-
1) mayorX(A) >= menorX(B), 2) menorX(A) <= mayorX(B), 3)
mayorY(A) >= menorY(B), y 4) menorY(A) <= mayorY(B)
Por último, queremos obtener de los círculos el rectángulo de encuadre, entendido
como el rectángulo más pequeño que rodea al círculo. La siguiente figurar muestra un
ejemplo.
1
Conceptos del juego
Una burbuja es un componente del juego que se mueve siempre en sentido vertical
ascendente. El jugador podrá botar sobre las burbujas o hacerlas explotar (se detalla
más adelante).
Las propiedades que caracterizan a una burbuja son las siguientes:
-
Región que ocupa en el plano (círculo).
-
Velocidad límite: velocidad máxima que puede alcanzar.
-
Velocidad actual: representa la velocidad que tiene la burbuja. Inicialmente tendrá
valor 0.
-
Explotada: atributo booleano que informa si la burbuja ha sido explotada.
La funcionalidad que caracteriza a las burbujas es la siguiente:
-
Explotar: hace explotar la burbuja (establece la propiedad explotada a verdadero).
-
Situar. Esta operación recibe como parámetro un punto que se utiliza como
referencia para situar la región de la burbuja. El resultado de la operación será que
el centro de la región de la burbuja estará situado en el punto que se establece
como parámetro.
-
Ascender. Esta operación desplaza la región de la burbuja hacia arriba. La
cantidad de desplazamiento en el eje Y equivale a su velocidad actual. Además,
incrementa la velocidad actual en una unidad, siempre que no supere la velocidad
límite.
-
Chocar: establece la velocidad actual a 0.
Un jugador representa la entidad controlada por el usuario que se mueve por el
tablero del juego. Se caracteriza por las propiedades:
-
Región que ocupa en el plano (rectángulo).
-
Velocidad, que será representada con un valor entero. Inicialmente tendrá el
valor 0.
-
Botar: valor booleano que indica si el jugador puede rebotar.
La funcionalidad de un jugador es la siguiente:
-
Botar: establece la propiedad botar a verdadero.
-
Desplazar a la derecha: desplaza la región del jugador a la derecha. El valor
del incremento de desplazamiento será una constante (por ejemplo, 10).
-
Desplazar a la izquierda: operación análoga a la anterior que realiza el
desplazamiento a la izquierda.
-
Mover: desplaza en el eje vertical la región del jugador. La cantidad de
desplazamiento será igual a la velocidad menos la gravedad. El valor de la
gravedad es una constante del juego (por ejemplo, 10). Tras realizar el
desplazamiento, la velocidad quedará reducida a la mitad.
-
Rebotar: realiza la acción de rebote que consiste en incrementar la velocidad
en tres veces el valor de la gravedad y establecer la propiedad botar al valor
falso.
2
Tipos de burbujas
En el apartado anterior se ha descrito el concepto burbuja básica. A continuación se
describen burbujas que especializan este concepto.
Una burbuja limitada es una burbuja que puede desplazarse hasta una determinada
cantidad. El límite de desplazamiento se establece en su construcción y no varía.
Cada vez que la burbuja asciende, determina si puede seguir subiendo, esto es, si ya
ha alcanzado su límite de desplazamiento. En caso de llegar al límite, la burbuja se
queda en su posición y no actualiza la velocidad actual, es decir, no hace nada.
Una burbuja débil es una burbuja que se caracteriza por soportar un número limitado
de botes (botes restantes). Esta propiedad se establece en la construcción. Cada vez
que recibe un bote (se aplica la operación chocar), reduce en una unidad el número de
botes restantes. Cuando esta propiedad alcanza el valor 0, la burbuja explota.
Una burbuja creciente es una burbuja débil que va aumentando el radio de su región
en 25% cada vez que soporta un bote (se aplica la operación chocar). Dado que es
una burbuja débil, este tipo de burbujas explota cuando ha recibido un número de
botes igual a su tamaño inicial (radio de su región).
Una burbuja sensible es una burbuja que se caracteriza por quedar detenida un
cierto tiempo cada vez que recibe un choque. Esta cantidad de tiempo es una
constante para este tipo de burbujas que denominamos tiempo de espera. Una
burbuja sensible almacena una marca de tiempo con el instante en el que han recibido
el último choque. El método ascender sólo será efectivo si ha transcurrido el tiempo de
espera desde el último choque. Finalmente, se puede consultar si una burbuja sensible
está en su tiempo de espera tras recibir un choque.
Tablero
Un tablero representa el escenario en el que se desarrolla el juego. Las propiedades
de un tablero son las siguientes:
-
Anchura del tablero. Esta propiedad no varía.
-
Altura del tablero. Esta propiedad no varía.
-
Región del plano ocupada (rectángulo). Esta propiedad no varía.
-
Colección de burbujas que contiene.
-
Jugador.
-
Tiempo de juego. Indica el tiempo en segundos que ha pasado desde que el
juego se ha iniciado.
-
Estado del juego. El juego puede estar en los estados “no iniciado”, “arrancado”
y “finalizado” (enumerado).
-
Semillas: colección de burbujas que actúan como semilla para crear nuevas
burbujas.
El tablero se construye estableciendo las dimensiones (anchura y altura) y la colección
de semillas. Inicialmente el estado del juego es “no iniciado”, la colección de burbujas
es vacía y no tiene jugador.
La funcionalidad que ofrece un tablero es la siguiente:
-
Arrancar: establece el estado del juego en “arrancado”. Esta operación
inicializa una marca de tiempo para controlar el tiempo del juego. Así mismo,
crea un jugador que sitúa dentro del escenario, en la parte superior y centrado.
3
El tamaño de la región del jugador se establece como una proporción (por
ejemplo, 1/6) de los lados de la región del escenario.
-
Parar: establece el estado del juego en “finalizado”.
La funcionalidad más importante de un tablero es actualizar la situación del juego cada
vez que es solicitada la actualización. El algoritmo de actualización del juego es el
siguiente:
-
Generar nueva burbuja. Si ha transcurrido más un segundo desde la última
generación de una burbuja, se elige al azar una burbuja de la colección de
semillas, se copia y se sitúa en la base del escenario. El centro de su región
debe tener valor 0 para su coordenada Y, y un valor para la coordenada X
comprendido entre 0 + radio y anchura del escenario – radio. Este último se
obtendrá de forma aleatoria.
-
Mover las burbujas. Sobre todas las burbujas, aplica la operación que las hace
ascender.
-
Mover al jugador.
-
Comprobar choques entre el jugador y las burbujas. Si se produce
solapamiento entre la región del jugador y el rectángulo de encuadre de la
región de una burbuja, el jugador bota sobre la burbuja (rebotar) si tiene la
propiedad botar a verdadero, y además se le indica a la burbuja que va a
soportar un bote (chocar). En cambio, si la propiedad botar vale falso, la
burbuja será explotada.
-
Eliminar las burbujas que han explotado.
-
Eliminar las burbujas que estén fuera del tablero. Una burbuja está fuera del
tablero si el rectángulo de encuadre de su región no solapa con la región del
tablero.
-
Controlar el fin de juego. El juego finaliza cuando la región del jugador esté
fuera del tablero, esto es, que no tenga solapamiento con la región del
escenario.
Por último, y en relación a la corrección del código (Diseño por Contrato), ha de
tenerse en cuenta que la clase Tablero tiene estado. Por ejemplo, la operación
arrancar sólo debe ser aplicada si el estado es “no iniciado” y la operación parar
cuando el estado sea “arrancado”.
4
Descargar