sábado, 14 de julio de 2012

Contando con el hombre planeta

Viendo que ustedes presentaron unos video juegos, no quise quedarme yo atrás y me puse manos a la obra para elaborar el mío propio.  El video juego que les presento ahora se llama "Contando con el Hombre Planeta" (este es su enlace de descarga).

Es un juego para reforzar el aprendizaje de mi hija Raquel de cuatro años, para que aprenda a contar.  De hecho, la figura del hombre planeta (el muñeco que parece una papa) y la de los pájaros fueron diseñadas por ella.  Simplemente escanee los dibujos en papel y los calqué con Gimp, agregandole yo mismo los colores según las indicaciones de mi hija.

Este juego tiene una particularidad: hace uso de la librería espeak, la cual deben descargar de synaptic (tienen que descargar el paquete espeak e espeak-python, que contiene los python bindings).  Esta librería es para poder darle a sus programas capacidad de sintesis de voz.  De hecho, el hombre planeta es capaz de contar en tres idiomas: español, inglés y francés.

Ustedes pueden colocar en el script el nombre del niño y el código del idioma que quieren usar: "ES","EN" y "FR" para español, inglés y frances respectivamente.

lunes, 9 de julio de 2012

Pygame en dos platos (o tres o más)

Lo Básico


Esta sería la estructura básica de un video juego implementado con Pygame:

01:    #!/usr/bin/env python
02:    # -*- coding: utf-8 -*-
03:    import sys, pygame
04:    pygame.init()
05:    #define las dimensiones y crea la ventana (pantalla)
06:    dimensiones = ancho, alto = 640, 480
07:    pantalla = pygame.display.set_mode(dimensiones)
08:    #define la velocidad del juego
09:    reloj = pygame.time.Clock()
10:    CUADROS_POR_SEGUNDO = 60
11:    #ciclo principal del juego
12:    while True:
13:        reloj.tick(CUADROS_POR_SEGUNDO)
14:        for event in pygame.event.get():
15:            if event.type == pygame.QUIT:
16:                sys.exit()

Comenzaré por comentar sobre las líneas 1 y 2.  La línea uno se incluye para convertir nuestro código en ejecutable bajo linux.  A pesar de que es un comentario, se indica en él el la ubicación del interprete python- esto es notación estándar para cualquier script en bash o python.  Para poder correr nuestro programa al hacer click sobre él, deberiamos marcar en sus propiedades que es ejecutable.  La segunda línea indica que estamos usando codificación utf-8.  Esta códificación es universal, para que nuestro juego no tenga problemas bajo ninguna plataforma con los acentos, las eñes, etc.  He visto que algunos de ustedes (particularmente los que tienen juegos copiados) no incluyen esta línea de comentario en sus scripts y a mi, no sé si a otros, me ha dado problemas al correrlos.

Después de importar los módulos necesarios para nuestro video juego en la línea 3 (casi siempre son esos dos), inicializamos el módulo pygame en la línea 4.  Al hacer esto se inicializan todos los submodulos que necesiten inicialización.  De modo tal que luego de invocar a pygame.init() no es necesario inicializar el módulo font de pygame con pygame.font.init, por ejemplo.

Las líneas 6 y 7 inicializan la pantalla, con lo cual se crea una ventana pygame sobre la cual eventualmente se desplegará el juego.  Nótese que la expresión "640, 480" en la línea 6 es una tupla de python, de modo que la variable "dimensiones" es una tupla.  Sin embargo, en la misma línea tambien estamos asignandole a las variables escalares "ancho" y "alto" los valores 640 y 480 respectivamente.  Esto es una de las particularidades de las asignaciones en python.  En la línea 7, hemos podido haber indicado otro parámetro en la función set_mode, como sigue:

            pygame.display.set_mode(dimensiones, FULLSCREEN)

Con esto tendriamos una ventana que ocupa la pantalla completa, en vez de ser sólo una ventana propiamente.  Otros parametros son:

DOUBLEBUF: que se usa para darle un aspecto de mayor continuidad a las animaciones.  Sin embargo, requiere invocar la función "flip" (como en pygame.display.flip() ) para acutalizar la pantalla en cada ciclo.
OPENGL: para rendición de escenas tridimensionales con PyOpenGL.  Sin embargo, con este parámetro no se permitirá utilizar la mayoría de las funciones de dibujo de Pygame.

Los parámetros se pueden indicar se a varios a la vez en set_mode.

Las líneas 9 y 10 definen el reloj, el cual a su vez marca la pauta de cuán rápido correrá nuestro juego.  La velocidad se mide en cuadros por segundo.  Se dice que el ojo humano no percibe cambios a velocidades mayores a 30 cuadros por segundo, pero cómo el computador tampoco ejecuta todas las instrucciones en el ciclo de juego instantáneamente, quizás sea necesario fijar una velocidad mayor.

A partir de la línea 12 se tiene el ciclo principal del video juego.  Durante todo el ciclo, nuestro programa no responderá a entradas por la cónsola, por lo cual hay que tomar previsiones para recibir las entradas del usuario y poder salir del programa.  En el ciclo de juego se despliega toda la acción del juego.  Esto incluye las animaciones, la detección de colisiones y otros eventos, la actualización del nivel, las vidas, la pantalla, etc.  Es de notar que en nuestro ejemplo de esqueleto, solo realizamos dos acciones dentro del ciclo principal en las líneas 13 y 14-16.  La línea 13 es una invocación a la función tick(), lo cual hace que nuestro programa haga una pausa de tantos milisegundos como sea necesario para que el juego corra a la velocidad indicada por nosotros en cuadros por segundo.  Lás lineas 14 a 16 verifican si ha ocurrido un evento de tipo "Quit", con lo cual nuestro programa finalizaría.

En lo que sigue veremos como desarrollar la acción de nuestro video juego.  Esto incluye el concepto de "superficie", el "blit" y los "sprites", con lo cual podemos implementar las animaciones de figuras sobre un fondo en el video juego.

Referencias


  • Jones, R. (2007). "Rapid Game Development in Python". Documento en línea.
  • Shinners, P. (2002). "Pygame Tutorials".  Disponible en instalación de pygame, para el caso linux, en el directorio usr/share/pyshare/pygame/docs.
  • Sweigart, A. (2010). "Invent Your Own computer Games with Python". 2nda Edición.


domingo, 8 de julio de 2012

Honestidad



Hola a todos:

Quisiera hablarles en esta oportunidad de un valor que no es muy frecuente en estos dias, pero que sigue siendo un valor importante: la honestidad.

Creo que he hablado bastante en clase sobre la importancia de no atribuirse la autoría de algo que uno no hizo.  Sin embargo, quiero enfatizar que eso no significa que uno debe hacer todo uno mismo.  Python, Pygame, los libros y programas de otros autores, todas son cosas no hechas por nosotros sobre las cuales nosotros construimos nuestro propio material.  Ciertamente, yo no inventé Python o Pygame, pero nunca me he atribuido la autoría de algo que yo no hice. También es cierto que a lo largo del curso he utilizado o me he basado en material no hecho por mi, pero siempre he tratado de citar al autor o dar crédito al trabajo de otros.  Lo mismo espero de ustedes.  No citar la autoría de algo que uno no hizo y presentarlo como su propia creación es extremadamente ofensivo y deshonesto, sobre todo en el mundo del software libre y del código abierto.  Por otro lado, a nadie le gusta que lo engañen porque se siente uno como si los demás lo toman por tonto.

Yo no tengo problemas en que ustedes usen el código de otros, siempre cuando den cŕedito a su verdadero autor.  Como nuestros fines son educativos/instruccionales (queremos aprender a programar en Python/Pygame, ¿recuerdan?), yo esperaría que en ese caso, ustedes se hayan tomado el tiempo de realizar el esfuerzo de entender cómo el verdadero autor crea el juego que ustedes presentan.  Además, se esperaría que ustedes sepan explicarselo a sus compañeros para que todos podamos beneficiarnos de ese conocimiento.

En el caso del juego de "Invasión y Batalla", este es una copia textual de un juego creado por PyMike llamado "Helicopters".  Su enlace de descarga es http://pymike.aftermatheffect.com/games/helicopters-1.2.zip.  A continuación una captura del juego:




Lo elegante hubiese sido ser honestos, ¿no creen? Ahora quiero que revisen las preguntas que les hice anteriormente y las respondan realmente.  No quiero respuestas llenas de palabras y errores pero ultimadamente vacias y que no responden las preguntas.

El proyecto de la documentación de Pygame está bien presentado, pero los últimos ejemplos de "hola mundo" con ventanas en Pygame son una traducción del libro "Invent Your Own Computer Games with Python", de Al Sweigart (capitulo 17, para ser exactos).  No esta mal que usen otras referencias, pero por favor, cítenlas.  Uds. saben que yo odio el plagio.  Además, no tiene nada de malo citar fuentes, pues ustedes estan presentando la información en castellano y en un formato distinto- la idea es llenar un vacio de documentación que explique de manera sencilla cómo desarrollar un video juego en Pygame.

Qusiera que quienes hayan presentado juegos o material hecho por otra persona den un paso al frente y den crédito a la autoría externa.  Vamos a sincerarnos.  Ello implica también que debemos de revisar los criterios de evaluación- cosas como "originalidad", "diseño", etc. ya no tienen sentido cuando se está presentando el trabajo de otro.  Recuerden: si logran aunque sea entender como fue elaborado el juego que presentan y explicarselo a los demás, se habrá logrado el objetivo del curso.  En eso, cada quien puede poner de su parte en este foro.

sábado, 7 de julio de 2012

Destruye el ladrillo




Introducción


Destruye el ladrillo es un juego parecido a "breakout". La página del juego es http://juegodelladrillo.es.tl/



Los integrantes de este equipo son:

  • JOSARETH RODRIGUEZ
  • BARBARA MADRID
  • JOSE LUIS FIGUEROA
  • MAGNELVIS ROLDAN
  • OSMAR GARCIA

Reseña


El juego Destruye el lLadrillo fue realizado utilizando Python/PyGame. Dicho juego posee diferentes funciones que se programaron para tener el resultado final. De igual manera se aplicaron colisiones, las cuales fueron de mucha importancia ya que la función collidelist verifica si la pelota (arma) chocó con alguno de los ladrillos y en caso tal, regresa el número de ladrillos contra los cuales se impactó o regresa un -1 en caso contrario (no hubo colisiones). En caso de haber colisionado, destruimos el ladrillo.

Referencias


Ellos citan como fuentes de información lo siguiente:

  1. chelintutorials.blogspot.com En este sitio web pudieron encontrar mucha información desde cómo crear un juego en Pygame desde cero, así como también diferentes tutoriales de Pythony que fueron de gran ayuda para ellos.
  2. http://razonartificial.com/tag/pygame/ En este sitio encontraron variedad de información y un juego llamado Arkanoid, el cual es parecido a Breakout.
  3. http://www.losersjuegos.com.ar/traducciones/pygame En este sitio encontraron la documentación oficial de PyGame traducida al español.

jueves, 5 de julio de 2012

Aventuras en busca de El Dorado

Hola a todos:

Esta es la reseña sobre el juego de "Aventuras en busca de El Dorado", el cual es el juego del equipo conformado por:

Pinto Leonor
Laya Oscar
Rondon Elieser
Urbano Leober
Velasquez Edibel
Vásquez Daniel

La página de su juego es la siguiente: http://aventuras.vzpla.net/personajes.html

Pido disculpas por lo breve de esta reseña- el trabajo de estos muchachos se ve muy prometedor y no se merecen una reseña tan chimba pero como saben estoy sin internet en la casa y tuve que ir a un ciber donde solo hay Guindous con Internet Explorer.  Esta basura de navegador no es compatible con Blogger y creo que voy a dejar esto hasta aqui porque de repente me dio nauseas y tengo ganas de vomitar ....  Bllaaaaarrchhhhh

martes, 3 de julio de 2012

Un parentesis ...

Hola a todos:

En estos días he estado sin internet en la casa, pudiendo conectarme apenas hoy desde la universidad.  Sin embargo, veo con preocupación que no ha habido novedades en cuanto al trabajo de cada equipo.  Evidentemente, mi preocupación se debe al corto plazo de tiempo que tenemos en lo que resta de este semestre.  Entienden que el trabajo de el videojuego vale el 60% de la nota?

Pero aparte de la nota, lo que a mi parecer es más grave es que estamos desaprovechando una excelente oportunidad para aprender colectivamente lo que implica la creación de un video juego.  Esta parte final es la parte más emocionante del curso, pero no veo animos de aprovechar la coyuntura. Será que los compañeros del curso pasado estaban mejor preparados que ustedes, y pudieron a pesar de todo desarrollar sus respectivas propuestas?

Trataré de conectarme luego.  Cuando lo haga espero ver el blog rebosante de comentarios y las propuestas de cada equipo (el código muchachos, el código) disponibles para su descarga en los respectivos blogs.

Efectos de Consola, Parte 4

En la entrada pasada vimos cómo crear animaciones y controlar los colores y otros atributos de visualización en modo texto usando secuencias de escape ANSI. En esta entrada veremos cómo utilizar una librería llamada libcaca que he portado a Python en forma castellanizada. La librería la deben instalar desde synaptic y los bindings de Python los deben descargar por aqui.

En esta entrada les traigo un pequeño script de un poco más de 100 lineas implementando el famoso juego de la culebra (recuerdan, el que venía en los Nokia?), pero en modo texto.  Ustedes pudiesen implementar su propia librería de visualización en modo texto usando secuencias de escape ANSI, pero las ventajas que ofrece libcaca es que permiten crear ventanas aparte, controlar eventos con dispositivos de entrada (ratón, teclado, etc.), etc.


El código para este juego lo pueden descargar por aqui.  Cuando vayan a correrlo, asegúrense de tener "caca.py" en el mismo directorio.  O instalen uds. mismos caca.py en /usr/local/... no-se-que-diablos para disponer de esta librería en todo momento.

Post-data: he probado el juego en python 2.7 pero hay problemas en la detección de eventos de presionado de teclas con libcaca. No sé si esto tenga que ver con la falta del paquete libcacadev (?).  En todo caso, no me he puesto a resolver este problema con detenimiento aún.