Ofrenating es el segundo juego en Python que hemos iniciado, para ello, hemos comenzado con la definición de la mecánica y la dinámica como ya hicimos con Burning City. Hemos empleado la plantilla para diseñar juegos como documento para compilar la información y compartirla.
También seguimos con temas locales, en este caso la Ofrenda de Flores a la patrona de Valencia.
Así, el Theme es el siguiente:
Como organizador de la ofrenda de flores de Valencia tienes mucho trabajo que hacer. Hay que ordenar la llegada de las comisiones, gestionar la cola de autobuses, hacer que las comisiones vayan hacia la plaza, hacer que dejen las flores en el sitio adecuado y asegurarse de que todos vuelven a casa. Todo ello, sin dejar ninguna comisión fuera de juego ni hacer que se enfaden por esperar demasiado.
Para ello, debes gestionar en tiempo real a los autobuses y las comisiones para que cumplan su función. Selecciona con el ratón a los autobuses y las comisiones y dales las órdenes adecuadas para cumplir la misión.
Las órdenes se dan seleccionando de un menú contextual las posibles opciones, que dependen de la zona en la que se encuentren los autobuses y las comisiones.
La dinámica del juego es del tipo razonamiento espacial:
Impedir que se choquen las comisiones, que los autobuses se acumulen o que las comisiones no dejen las flores en el lugar adecuado.
La mecánica es similar a la de los juegos de point & click como el “Airport Madness” aunque con dos elementos: los autobuses y las comisiones en lugar de sólo uno.
Al comenzar la programación de Ofrenating hemos descubierto algunos problemas que no tuvimos con Burning city:
- El primero es que Burning city era tremendamente sencillo, de modo que con un boceto de la idea ésta podía plasmarse en la programación. Esto no sucede con Ofrenating. Los bocetos sencillos que acompañan a la idea original no dan suficiente información a la hora de programar, de manera que hace falta volver atrás y definir en detalle los elementos del juego y sus funciones.
Boceto demasiado sencillo de Ofrenating. Vale como concepto pero no para implementarlo en la programación |
- El segundo de los problemas ha tenido que ver con el movimiento de los elementos del juego en la pantalla. Reaprovechando código, hemos comenzado por mover los elementos del mismo modo que en Burning city. Esto es, añadiendo x píxeles a la posición del sprite. El inconveniente radica en que Pygame emplea para mover el objeto, las coordenadas del pixel superior izquierdo. Mientras el movimiento es lineal no hay problemas, pero para giros (como es el caso) es distinto. Así que, tras darle algunas vueltas:
def rot_center(image, angle):
"""rotate an image while keeping its center and size"""
orig_rect = image.get_rect()
rot_image = pygame.transform.rotate(image, angle)
rot_rect = orig_rect.copy()
rot_rect.center = rot_image.get_rect().center
rot_image = rot_image.subsurface(rot_rect).copy()
return rot_image
Para mover los Sprites tomando las curvas hemos empleado getRect para conocer la posición del Sprite y, posteriormente, hemos modificado la posición del centro del Sprite:
self.image = image
self.rect = self.image.get_rect()
self.rect.centerx= INICIO_BUS[0]
self.rect.centery = INICIO_BUS[1]
(...)
self.rect.centerx = self.rect.centerx + self.vel[0]
self.rect.centery = self.rect.centery + self.vel[1]
El movimiento y el point and click ya están implementados, pero hemos de volver al documento de definición para aclarar qué es lo que hace exactamente cada Sprite en función de su posición antes de volver al código.
No hay comentarios:
Publicar un comentario