Hacé con software Libre: programando un juego Parte 2

Al finalizar la primera parte del tutorial compartido la semana pasada, logramos tener un actor (la nave) volando por el espacio. Vamos a agregarle algunas líneas de código para moverlo con las flechas de dirección del teclado. Para eso, vamos a “enseñarle” un comportamiento de PILAS llamado “MoverseConElTeclado”:

Agregamos la siguiente línea:

minave.aprender(pilas.habilidades.MoverseConElTeclado)

Luego, para que la nave no salga de la pantalla, le enseñamos una segunda habilidad, “LimitadoABordesDePantalla”:

minave.aprender(pilas.habilidades.LimitadoABordesDePantalla)

Recordá que cada vez que agregamos nuevas líneas de código debemos guardar el archivo.
Como segundo paso, vamos a agregar un detalle al juego: haremos que nuestra nave largue humo. Para eso, usaremos el sistema de Partículas de pilas. Agregamos al código de la nave las siguientes líneas:

c2 = pilas.fisica.Circulo(minave.x, minave.y, 100, restitucion=0.1, amortiguacion=0.5)
minave.imitar(c2)

emisor = EmisorHUMO(pilas, 0, 0)
emisor.imagen_particula = pilas.imagenes.cargar_grilla(“imagenes/humo.png”)
emisor.constante = True
emisor.composicion = “blanco”
emisor.duracion = 2
emisor.frecuencia_creacion = 0.03
emisor.vida = 8
emisor.aceleracion_x_min = 36
emisor.aceleracion_x_max = 50
emisor.x_min = 171
emisor.y_min = 2
emisor.transparencia_min = 30
emisor.transparencia_max = 50

emisor.aprender(pilas.habilidades.Imitar, minave)

—————————————
La “clase” Nave  quedaría así :

class Nave(pilasengine.actores.Actor):

def iniciar(self):
self.imagen = “imagenes/lanave.png”

minave = Nave(pilas);
minave.z = -2

c2 = pilas.fisica.Circulo(minave.x, minave.y, 100, restitucion=0.1, amortiguacion=0.5)
minave.imitar(c2)

emisor = EmisorHUMO(pilas, 0, 0)
emisor.imagen_particula = pilas.imagenes.cargar_grilla(“imagenes/humo.png”)
emisor.constante = True
emisor.composicion = “blanco”
emisor.duracion = 2
emisor.frecuencia_creacion = 0.03
emisor.vida = 8
emisor.aceleracion_x_min = 36
emisor.aceleracion_x_max = 50
emisor.x_min = 171
emisor.y_min = 2
emisor.transparencia_min = 30
emisor.transparencia_max = 50

emisor.aprender(pilas.habilidades.Imitar, minave)

minave.aprender(pilas.habilidades.MoverseConElTeclado)
minave.aprender(pilas.habilidades.LimitadoABordesDePantalla)

————————–
Necesitamos copiar este archivo a la carpeta de nuestro proyecto, luego lo renombramos a “emisorHUMO.py”  y agregamos esta línea al comienzo del archivo “juego.py” , luego de “import pilasengine” :

from emisorHUMO import *

Guardamos, y ejecutamos en la terminal. En este momento, deberías ver algo así:

juego-pilas_05

Ahora, agregaremos algunos objetos enemigos, aquellos que debemos esquivar para evitar recolectar los pedazos de nuestra nave por la galaxia. Para añadir el actor “Asteroide”, copiamos antes del pilas.ejecutar(), el siguiente código:

class Asteroide(pilasengine.actores.Actor):

def iniciar(self):
self.imagen = “imagenes/asteroide.png”
self.escala = 0.3
self.x = -500
self.y = pilas.azar(-300, 300)
self.giro = 2
self.z = self.y

def actualizar(self):
self.rotacion += self.giro
self.x += 2
# Elimina el objeto cuando sale de la pantalla.
if self.x > 500:
self.eliminar()

juego-pilas_06

Nuevamente, guardamos el proyecto y lo ejecutamos en la terminal.
Ahora que ya sabemos cómo serán y cómo actuarán nuestros enemigos, necesitamos “instanciarlos”, es decir, que de un molde (la clase) se generen muchos objetos (instancias).
Para ello, primero creamos un grupo, con la siguiente línea:

enemigos = pilas.actores.Grupo()

ahora creamos el método que generará los asteroides:

def crear_asteroide():
#creo el actor enemigo
asteroide = Asteroide(pilas);
#creo un objeto para la física
c1 = pilas.fisica.Circulo(asteroide.x, asteroide.y, 100, restitucion=1, amortiguacion=2)
asteroide.imitar(c1)
#lo agrego al grupo
enemigos.agregar(asteroide)

Finalmente, necesitamos programar cada cuanto queremos que aparezca nuestro actor enemigo. Para ello, PILAS tiene una herramienta llamada “Tareas”.
En nuestro juego queremos que aparezca un asteroide cada dos segundos, entonces creamos una Tarea que llame cada dos segundos al método “crear_asteroide”:

pilas.tareas.siempre(2, crear_asteroide)

Después de guardar y ejecutar en la terminal, tendremos la nave volando y los asteroides dispersos aleatoriamente en la pantalla, rodando amenazantes, funcionando con el motor de física de PILAS.
Para terminar y que los asteroides no caigan como pelotas, necesitamos eliminar la gravedad.

Agregamos al final (siempre antes de pilas.ejecutar() ):

#Elimino los límites laterales y la gravedad
pilas.fisica.gravedad_x = 0
pilas.fisica.gravedad_y = 0
pilas.fisica.eliminar_paredes()
pilas.fisica.eliminar_techo()
pilas.fisica.eliminar_suelo()

El código del archivo juego.py completo hasta este punto es el siguiente:



# -*- coding: utf-8

import pilasengine
from emisorHUMO import *

pilas = pilasengine.iniciar(ancho=900, alto=550, titulo=’De la tierra a la luna’)

puntaje = pilas.actores.Puntaje(280, 200, color=pilas.colores.blanco)
fondo = pilas.fondos.Galaxia(dx=-2, dy=0)

class Nave(pilasengine.actores.Actor):

def iniciar(self):
self.imagen = “imagenes/lanave.png”

minave = Nave(pilas);
minave.z = -2

c2 = pilas.fisica.Circulo(minave.x, minave.y, 100, restitucion=0.1, amortiguacion=0.5)
minave.imitar(c2)

emisor = EmisorHUMO(pilas, 0, 0)
emisor.imagen_particula = pilas.imagenes.cargar_grilla(“imagenes/humo.png”)
emisor.constante = True
emisor.composicion = “blanco”
emisor.duracion = 2
emisor.frecuencia_creacion = 0.03
emisor.vida = 8
emisor.aceleracion_x_min = 36
emisor.aceleracion_x_max = 50
emisor.x_min = 171
emisor.y_min = 2
emisor.transparencia_min = 30
emisor.transparencia_max = 50

emisor.aprender(pilas.habilidades.Imitar, minave)

minave.aprender(pilas.habilidades.MoverseConElTeclado)
minave.aprender(pilas.habilidades.LimitadoABordesDePantalla)

class Asteroide(pilasengine.actores.Actor):

def iniciar(self):
self.imagen = “imagenes/asteroide.png”
self.escala = 0.3
self.x = -500
self.y = pilas.azar(-300, 300)
self.giro = 2
self.z = self.y

def actualizar(self):
self.rotacion += self.giro
self.x += 2
# Elimina el objeto cuando sale de la pantalla.
if self.x > 500:
self.eliminar()

#defino un grupo de enemigos
enemigos = pilas.actores.Grupo()

def crear_asteroide():
#creo el actor enemigo
asteroide = Asteroide(pilas);
#creo un objeto para la física
c1 = pilas.fisica.Circulo(asteroide.x, asteroide.y, 100, restitucion=1, amortiguacion=2)
asteroide.imitar(c1)
#lo agrego al grupo
enemigos.agregar(asteroide)

# Creo una tarea para que aparezca un asteroide cada 2 segundos.
pilas.tareas.siempre(2, crear_asteroide)

#Elimino los límites laterales y la gravedad
pilas.fisica.gravedad_x = 0
pilas.fisica.gravedad_y = 0
pilas.fisica.eliminar_paredes()
pilas.fisica.eliminar_techo()
pilas.fisica.eliminar_suelo()

pilas.ejecutar()


En la próxima entrega veremos cómo tratar las “colisiones”, cuando la nave choca con uno de los asteroides.
Podes descargarte el ejemplo completo acá.

¡Hasta pronto!
Diego.

Primera parte del tutorial

Hacé con software Libre: programando un juego Parte 1

Escribí este tutorial para la página de Huayra, dentro del Programa Conectar Igualdad, y se los comparto en el blog. Hoy toca una actividad muy divertida: la programación. Y para probar vamos a crear un juego simple con PILAS-Engine.

Para comenzar a trabajar,  vamos a crear una carpeta donde estará todo nuestro proyecto.  Creamos la carpeta “ejemploPILAS” y dentro creamos un archivos de texto plano y lo llamamos “juego.py” ( botón derecho -> crear un documento -> archivo nuevo )

juego-pilas_01

Vamos a editar el archivo con la aplicación “Geany”,  aunque podés usar tu editor preferido, como Pluma o cualquier otro.  Dentro del archivo vamos a escribir el siguiente código:

# -*- coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

pilas.ejecutar()

juego-pilas_02

Vamos a probar esta estructurá básica del engine PILAS,  solo nos debería mostrar una ventana vacía de color azul, característica de PILAS.   Para ejecutar lo que hicimos hasta ahora,  abrimos una Terminal ( CTRL + ALT + T )  o usamos la que trae incluida Geany.   Escribimos $ python [ ruta hasta el archivo ]/juego.py.   En nuestro ejemplo la carpeta de nuestro juego está en el escritorio, entonces sería:

$ python /home/alumno/Escritorio/ejemploPILAS/juego.py

juego-pilas_03

Avancemos agregando algunas cosas al juego, por ejemplo un contador de vidas o puntos y un fondo animado. Para eso agregamos las siguientes líneas a nuestro código, justo después de pilas = pilasengine.iniciar()  y antes de pilas.ejecutar()

# -*- coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()
puntaje = pilas.actores.Puntaje(280, 200, color=pilas.colores.blanco)
fondo = pilas.fondos.Galaxia(dx=-2, dy=0)

pilas.ejecutar()


Al mejor estilo programa de cocina,  tenemos “acá preparadas” un par de imágenes que nos servirán para nuestro ejemplo.  se trata de una nave espacial (original, no?)  y una estrella. Nótese que son archivos en formato PNG con Alfa, esto quiere decir que el fondo de la imagen es transparente.

lanave

La nave espacial es la protagonista en este ejemplo, vamos a incorporarla al juego.  Primero copiamos los archivos a una carpeta “imagenes” dentro de “ejemploPILAS”.   Luego, agregamos el siguiente código a nuestra aplicación.

primero vamos a ajustar el tamaño de la ventana, y agregarle un título.  Modificamos esta línea:
pilas = pilasengine.iniciar()
para que quede así:
pilas = pilasengine.iniciar(ancho=900, alto=550, titulo=’De la tierra a la luna’)

ahora agregamos el código para crear un “actor” en PILAS. El código completo del programa sería:

# -*- coding: utf-8
import pilasengine

pilas = pilasengine.iniciar(ancho=900, alto=550, titulo=’De la tierra a la luna’)

puntaje = pilas.actores.Puntaje(280, 200, color=pilas.colores.blanco)
fondo = pilas.fondos.Galaxia(dx=-2, dy=0)

class Nave(pilasengine.actores.Actor):

def iniciar(self):
self.imagen = “imagenes/lanave.png”

minave = Nave(pilas);
minave.escala = 0.7

pilas.ejecutar()

juego-pilas_04

En la próxima entrega veremos cómo interactuarán los actores dentro del juego.  Nos vemos!
Copyleft · Diego Accorinti para Huayra gnu/linux.
Licencia Creative Commons CC-BY

Fuentes TrueType en la web con font-face Generator

A la hora de incluir cualquier tipografía en un sitio web moderno, podemos utilizar @font-face.  Pero depende el navegador, (el karma de todos los diseñadores web se mantiene inpune) podemos tener problemas a la hora de usar una fuente determinada.

http://convertfonts.com/font-face.php

Buscando una solución al respecto, encontré este sitio en el cual podemos subir nuestra fuente preferida en TTF y nos genera un .zip con todo lo necesario para usar dicha fuente en una web. Excelente.

font-face

Firefox OS, el sistema operativo libre para móviles

Vení el próximo sábado 26 de enero en Areatres, para aprender, hackear y
disfrutar de Firefox OS, el sistema operativo libre para móviles basado
en la web de Mozilla.

Si sos desarrollador web, te encontrarás como en casa programando
aplicaciones en HTML5, JavaScript y CSS para Firefox OS. Te ayudaremos
con todo lo demás, incluyendo el acceso a las APIs web y cómo usar
Firefox OS Simulator en tu navegador de escritorio para que pruebes tus
aplicaciones móviles.

Firefox OS

Habrá charlas en las que representantes de de Mozilla presentarán esta
tecnología construida para ampliar y apoyar esta nueva plataforma.

Este “App Day” no es una competición; es una oportunidad para iniciar la
creación de aplicaciones móviles para Firefox Marketplace y el próximo
dispositivo Firefox OS. También es una gran oportunidad para que
muestres tu proyecto a una audiencia conformada por compañeros e
innovadores.

Te presentaremos las herramientas que necesitás para iniciarte.

¡Te esperamos!

Qué tenés que traer:

Traé tu máquina de desarrollo Linux, Mac o Windows y dispositivo(s).
Nosotros te proporcionaremos todo lo demás,

Qué vas a crear:

Aplicaciones. Aplicaciones. Aplicaciones. El Firefox Marketplace busca
aplicaciones web abiertas que funcionen bien en dispositivos móviles
para Firefox OS y Firefox para Android. Pero estamos interesados en todo
tipo de aplicaciones. Podés traer una aplicación HTML5 que ya hayas
empezado para continuarla, finalizarla, pulirla o simplemente presentarla.

Cronograma:

8:30 – 9:30. Registración. café, desayuno liviano.
9:30 – 10:00. Introducción a Firefox OS y Apps Marketplace
10:00 – 11:30. Charlas
11:30 – 12:00. Video. Preguntas
12:00 – 13:00.  Almuerzo

13:00 – 17:00. hackaton

17:30pm -19:00. Demos y bebidas.

Mas Info e inscripcion en http://firefoxosbsas.eventbrite.com/

Saludos,
Comunidad Mozilla Argentina

Libro sobre programación orientada a objetos y patrones de diseño

Diseño evolucionado de sistemas informáticos orientados a objetos, desde el lenguaje natural. Incluye una gran colección de ejemplos en Python y PHP.
Una nueva forma de aplicar el paradigma de la programación orientada a objetos, yendo desde lo más básico a conceptos avanzados.
Tipos de objetos (basados en caso de uso real). Patrones de diseño (Singleton, Factory y Composite).

Link de descarga

Link alternativo

EKO party Security Conference 7′ edition

El miércoles 21, junto con la llegada de la primavera, se celebró la cumbre hacker más importante de sudamérica en Buenos Aires:

EKOparty 2011

 

 

 

 

 

 

 

Módulo para Joomla : Linkeámela

Necesitaba un módulo para Joomla que me permitieran articular un sitio web con sus cuentas en Facebook y Twitter. Luego de probar tres o cuatro que no me gustaron, llegué a  la conclusión de que lo mejor era crearlo yo mismo, y este es el resultado.  Lo libero bajo licencia GPL así que pueden usarlo libremente.

¿Cómo lo uso?

0. Te bajas el módulo.
1. Ingresas al administrador de Joomla.
2. “Extensiones” -> “Instalar / Desinstalar
3.  en “Subir paquete”  examinas, elegís el módulo (.zip) y cliqueás en “subir archivo e instalar“.
4. Luego vas nuevamente a “Extensiones” y entrás al “Gestor de módulos“.
5. Buscas en la lista el módulo “Linkeamela” y haces click en él.
6. Configuramos de la siguiente manera:

Mostrar título :  NO
Habilitado :         SI
Posición :   [ Elegís en que lugar del template aparecerá ]
Orden : [ Elegís el orden ya que en la misma posición puede haber varios módulos a mostrar.]
Asignación de Menu : [ Elegís en que partes o secciones del sitio queres que aparezca. ]
Facebook URL :  [ dirección del grupo/página/persona en Facebook ]
Twitter URL :  [ dirección de la cuenta en Twitter ]

7. damos “Guardar”  y listo!

Aptana + php + Smarty

La última versión de Aptana no trae soporte para el sistema de plantillas Smarty. Para activarlo hace falta seguir estos pasos:

1- Desinstalar el plugin PDT.
2- Bajar este archivo comprimido Aptana PHP 1.1.0.25753 DE.
3- Descomprimir el archivo.
4- Ir a  “help” -> “install new software” -> “add” -> “local”   y elegimos la carpeta del punto 3.
5- Tidamos los plugins que queremos (php, smarty, etc) y damos ok. Debería comenzar la instalación.

Luego de esto, tenemos soporte para PHP y Smarty.

Corazones 0.1.1

Bueno, ya está en SourceForge una release nueva del proyecto (0.1.1)

Feature list:

# Arreglé un par de detalles menores.
# Incorporé una nueva herramienta:   Diccionarios / Brute Force
Es un gestor que permite almacenar los diccionarios y revisarlos, y en un futuro permitirá eliminar palabras repetidas, mergear diccionarios y lógicamente utilizarlos para hacer alguna prueba de fuerza bruta.

corazonesBF