jueves, 26 de febrero de 2009

Primeros pasos con JavaFX - !Sigo queriendo aprender a programar divirtiéndome!

jugar código

En estos días he descubierto JavaFX, un nuevo lenguaje script que es la alternativa de Sun para Flash, Flex, Silverlight. Es un lenguaje para el desarrollo de aplicaciones RIA (Rich Internet applications), independiente de la plataforma: escritorio, web, movil.

Pues dicho y hecho, para aprender me he puesto a desarrollar un juego muy simple, un mata fantasma.

Si quereis probar el juego pulsa aquí. Simplemente, mueve el muñeco con las teclas y para disparar la barra espaciadora. Os dejo el código mata-fantasma

Valoración: excelente. Muy fácil de programar y buena documentación. Algo muy sorprendente ha sido el soporte de data binding y triggers. Me siento incapaz de explicar en que consiste sin poner ejemplos de su potencia, y esto lo puedes ver en esta página.

Lo peor: el lenguaje debería ser python en vez de java.


Enlaces:

sábado, 14 de febrero de 2009

BPMN para el modelado de procesos de negocio

Business Process Modeling Notation (BPMN) establece un estándar para el modelado de procesos de negocio. Su primera versión data de 2004 y es desarrollada por Business Process Management Initiative (BPMI).

Es una notación gráfica. A continuación vemos un ejemplo de esta notación BPMN


Hasta que he empezado a usar esta notación para el modelado de procesos, empleaba el diagrama de actividades de UML. Desde mi punto de vista, BPMN es una notación más legible tanto para analistas como para los propios expertos de negocio. En el siguiente artículo se compara BPMN y los diagramas de actividades de UML.

Una introducción a BPMN la podéis encontrar en este enlace y en español en este otro enlace.

¿Qué editor puedo usar? Existen diferentes alternativas en el mercado, hasta ahora yo me quedo con Bizagi

Un IDE para Python

Ante todo, no necesitas un IDE para programar en Python. Es más, si te sirve mi consejo, aprende a programar en Python directamente con su intérprete, ejecutando "python" desde la línea de comandos. Luego usa el IDE que viene integrado con Python, llamado IDLE.

Ok, ya has aprendido las nociones básicas para programar en Python y sigues queriendo usar un IDE. Cuando yo me dispuse a buscar un IDE tenía dos requisitos básicos:
  1. Debía ser gratuito, y mejor si fuera open source.
  2. Debía correr tanto en Windows como en Linux
Probé algunos, por ejemplo, Eclipse con sus plugin correspondientes para Python. No me gustó, muy pesado y sencillamente no me resultaba cómodo.

Al final, me decante por usar SPE (Stani's Python Editor). En mi opinión, muy bueno, realmente bueno.

Pero hace poco tiempo me encontré con que Netbeans estaba integrando componentes para Python. Aunque aún se encuentra en fase de prueba, muestra ser bastante estable. Y me he decantado por su uso. Para ser justo lo tengo que decir, Netbeans siempre ha sido mi debilidad, ya me había gustado Netbeans cuando desarrollaba en Java o en Ruby on Rails.

domingo, 25 de enero de 2009

Pylumines - Otro juego con pygame

código pylumines

Os dejo otro ejemplo de un juego desarrollado en Python + Pygame. Se trata de un clon del famoso juego Lumines. Es una variante de Tetris, en donde se debe formar cuadrados de 2 x 2 del mismo color.


lunes, 5 de enero de 2009

pacman - Game over

Finalizo aquí las entradas a través de las que he ido construyendo el típico videojuego de pacman usando Python y Pygame. El objetivo de todo esto era proponer el desarrollo de un juego para enseñar a los alumnos a programar de una forma entrenida y eficaz.

Por favor, déjanos saber a través de comentarios en este blog tu opinión acerca de esta propuesta y si lo usas en clase, cuéntanos que tal te ha ido.

pacman 0.008 - Sonido

código pacman

En esta ocasión introducimos los sonidos en nuestro videojuego. Además, aprovechamos para introducir algunas otras mejoras:

  • Añadimos teletransportadores.
  • Contador de disparos.
  • Mensajes de puntos y disparos.
  • Control de fin de juego. El juego finalizará cuando muera pacman o todos los fantasmas.
  • Los fantasmas se reproducirán cada 20 segundos.

El uso de sonido es muy sencillo con Pygame. Para cargar un sonido basta con crear un objeto Sound de la siguiente forma:

sonido = pygame.mixer.Sound ( fichero_sonido )
Y para reproducirlo empleamos la función "play" del objeto sonido.
sonido.play()

Si queremos reproducir el sonido de forma indefinida, por ejemplo, para la música de fondo, basta con pasar "-1" como parámetro a la función "play".

sonido.play(-1)

Si queremos detener el sonido tan solo tenemos que llamar a la función "stop"

sonido.stop()

En nuestro juego hemos creado un repositorio de sonido para evitar recargar continuamente el mismo fichero.

sonidos = {}
def cargar_sonido ( fichero_sonido ):
   global sonidos
sonido = sonidos.get ( fichero_sonido, None )
if sonido is None:
sonido = pygame.mixer.Sound ( os.path.join ("sonidos",
fichero_sonido))        
sonidos[fichero_sonido] = sonido
    
return sonido

El resto de mejoras las puedes ver en el código de esta nueva versión de Pacman

domingo, 4 de enero de 2009

pacman 0.007 - animando al pacman

código pacman

En esta ocasión vamos a mejorar nuestro juego haciendo una especie de gif animado con nuestro pacman para que abra y cierre la boca. Además, aprovechamos la ocasión para refactorizar nuestro código creando la clase "SpriteMovil" de la que heredera todos los sprites que se mueven en pantalla como el pacman y los fantasmas. El resto de objetos estáticos heredaran de la clase "MiSprite".

El sprite Pacman contará con una lista de imágenes que irá cambiando según la dirección que tome el pacman y de forma continua para simular el efecto de abrir y cerrar la boca. Vamos a tener cuatro vectores de ocho imágenes, uno con pacman apuntando a la izquierda, otro a la derecha, otro arriba y el último, con pacman apuntando hacia abajo. Cargamos las imágenes en el constructor de la clase Pacman

class Pacman ( SpriteMovil ):
NUMERO_FOTOGRAMAS = 8

def __init__(self, fichero_imagen, pos_inicial):
SpriteMovil.__init__(self, fichero_imagen, pos_inicial, [0,0])
self.vidas = 3
self.puntos = 0

self.__imagenArriba = {}
self.__imagenAbajo = {}
self.__imagenDerecha = {}
self.__imagenIzquierda = {}

for i in range(0, self.NUMERO_FOTOGRAMAS, 1):
self.__imagenIzquierda[i] = cargar_imagen(
"pacman-izquierda" + str(i+1) + ".gif")
self.__imagenDerecha[i] = cargar_imagen(
"pacman-derecha" + str(i+1) + ".gif")
self.__imagenArriba[i] = cargar_imagen(
"pacman-arriba" + str(i+1) + ".gif")
self.__imagenAbajo[i] = cargar_imagen(
"pacman-abajo" + str(i+1) + ".gif")

self.__fotogramasActuales = self.__imagenDerecha
self.__fotogramaActual = 1
self.__tiempoCambioFotograma = pygame.time.get_ticks()

La propiedad "_fotogramasActuales" cambiará según la dirección que tome nuestro Pacman y la propiedad "_fotogramaActual" cambiará de forma iterativa a lo largo del tiempo cada 100 milisegundos, tomando como valores de 1 a 8, lo que represesenta cada uno de los ocho fotogramas. Estas propiedades se cambian en la función "update" de la clase "Pacman".
def update (self):
...
if self.velocidad[0] > 0:
self.__fotogramasActuales = self.__imagenDerecha
elif self.velocidad[0] < 0:
self.__fotogramasActuales = self.__imagenIzquierda
elif self.velocidad[1] > 0:
self.__fotogramasActuales = self.__imagenAbajo
elif self.velocidad[1] < 0:
self.__fotogramasActuales = self.__imagenArriba

if pygame.time.get_ticks()-self._tiempoCambioFotograma > 100:
self.__fotogramaActual = (self.__fotogramaActual + 1) %
self.NUMERO_FOTOGRAMAS
self.__tiempoCambioFotograma = pygame.time.get_ticks()

En nuestra próxima versión del juego introduciremos los sonidos y algunas mejoras más.