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 (básico) Un punto se caracteriza por sus coordenadas x e y de tipo entero pudiendo tomar valores negativos. Un círculo se caracteriza por un punto que representa el centro y por el radio (valor entero). Tiene la propiedad perímetro que se calcula como 2.π.radio. Un rectángulo se caracteriza por sus cuatro vértices y el tamaño de los lados. Las figuras geométricas (círculo y rectángulo) se pueden desplazar en el espacio. La dirección de desplazamiento puede ser: izquierda, derecha, arriba y abajo. Conceptos del juego 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. 1 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. A continuación se desarrollan las burbujas del juego. En primer lugar se define una burbuja básica y posteriormente se describen burbujas especializadas. 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. 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. - 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. - 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 burbuja hacia arriba. La cantidad de desplazamiento en el eje Y equivale a su velocidad actual. Por último, se incrementa la velocidad actual en una unidad, siempre que no supere la velocidad límite. - Chocar: establece la velocidad actual a 0. 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. 2 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. 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). Una burbuja express es una burbuja que se caracteriza por incrementar su velocidad límite con el paso del tiempo. Así pues, la velocidad límite se calcula como la velocidad límite inicial multiplicada por el número de segundos que han transcurrido desde su creación. Geometría (avanzado) Las figuras geométricas (círculo y rectángulo) deben ofrecer la funcionalidad adicional: - Obtener polígono de encuadre. El polígono de encuadre de una figura está formado por los cuatro puntos que definen las coordenadas: (menorX, menorY), (menorX, mayorY), (mayorX, mayorY) y (mayorX, menorY). El método retorna una lista con estos puntos. - Consulta si un punto está dentro de la figura. Un punto está dentro de una figura si las coordenadas (x, y) del punto cumplen las condiciones: 1) x >= menorX, 2) x <= mayorX, 3) y >= menorY, 4) y <= mayorY. - Consulta si otra figura está dentro de la figura. Una figura B está dentro de otra figura A si todos los puntos del polígono de encuadre de B están dentro de A. - Solapamiento con otra figura. Sean A y B dos figuras, siendo menorX(A) la coordenada menor X de la figura A, menorY(A) la coordenada menor Y de figura A, etc., se dice que A y B están solapadas 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) Para los cálculos anteriores, se definen las siguientes propiedades: - menorX: coordenada menor en X - mayorX: coordenada mayor en X - menorY: coordenada menor en Y - mayorY: coordenada mayor en Y Tablero Un tablero representa el escenario en el que se desarrolla el juego. Las propiedades de un tablero son las siguientes: - Anchura del tablero (inmutable). - Altura del tablero (inmutable). - 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: no iniciado, arrancado y finalizado (enumerado). 3 Así mismo, un tablero se caracteriza por crear burbujas cada cierto tiempo (periodo de generación en milisegundos). Para ello hace uso de una colección de burbujas que actúan como semillas para crear las nuevas burbujas. Además, las nuevas burbujas se van situando alternativamente en posiciones fijas de la parte inferior del escenario. Estas posiciones se denominan focos. La funcionalidad que ofrece un tablero es la siguiente: - Establecer el jugador. El estado del tablero debe ser “no iniciado”. También es requisito que la región del jugador esté dentro del tablero. - Arrancar: establece el estado del juego en “arrancado”. Es requisito para aplicar esta operación que el estado sea “no iniciado”. - Parar: establece el estado del juego en “finalizado”. Para aplicar esta operación el tablero debe estar en estado “arrancado”. La funcionalidad más importante de un tablero es actualizar la situación del juego cada vez que es solicitado. Es requisito para aplicar esta operación que el tablero esté en estado “arrancado”. El algoritmo de actualización del juego es el siguiente: - Generar burbujas. Debido a su extensión, este paso del algoritmo se explica más adelante. - 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 una burbuja, el jugador bota sobre la burbuja (rebote) si tiene activada la propiedad botar, 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 completamente fuera del tablero. - Controlar el fin de juego. El juego finaliza cuando la región del jugador esté completamente fuera del tablero. La generación de burbujas es la operación más importante para el funcionamiento del juego. Se genera una nueva burbuja cada vez que transcurra un tiempo igual o superior al periodo de generación. Las acciones a realizar son las siguientes: - En primer lugar, se elige una burbuja de la colección de semillas. La nueva burbuja será una copia de la burbuja elegida. - A continuación, se elige un foco y se sitúa la nueva burbuja en ese foco. - Por último, se introduce la burbuja en la colección de burbujas. 4