TUTORIAL DE PROGRAMACION DE JUEGOS CON PYTHON Y PYGAME

Iniciado por Checmated, 15 Diciembre 2008, 17:08 PM

0 Miembros y 2 Visitantes están viendo este tema.

Checmated

Que onda gente..?

Bueno pues, soy poco conocido en este foro... Pero para darme conocido, ire posteando un tutorial de programacion de juegos con pygame que estoy desarollando continuamente

______________________

Programación de Videojuegos con Python y Pygame
By: Checmated


Nota: El siguiente curso ah sido desarrollado por David Salvatore Pensa Uzcategui (Checmated)...Por ello se pide respetar los derechos de autor: En caso de publicar este tutorial en otro foro, pagina, entre otros, se pide identificar a su autor como: David S. Pensa U. o Checmated

Escrito para: foro.code-makers.es y ahora para foro.elhacker.net



Introducción a Pygame

Pygame, es un conjunto de módulos creados exclusivamente para su uso en Python... Estos módulos están desarrollados en C y tienen como fin ayudar al desarrollo de videojuegos en Python. Pygame, trabaja con la librería SDL como base y provee a Python de métodos fáciles y sencillos con los cuales controlar Imágenes, Videos, Sonidos y Entradas de datos, tanto en ratón como en el teclado, todo esto de manera simultanea, fácil, rápida y eficaz


Historia

Pygame comenzó en el verano del 2000.Creada por Sam Lantinga, es una biblioteca multiplataforma para controlar multimedia, comparable a DirectX. A sido usada para cientos de juegos comerciales y de código abierto.

Conocimientos Previos

Para continuar con este Tutorial, es necesario tener conocimientos previos en el lenguaje de programación Python...No quiero entrar mucho en detalles ya que existen buenos tutoriales y quiero "orientar" este tutorial solo a la programación de Videojuegos en Python, ya que hay escasa existencia de material bueno y bien explicado en español

Para continuar con este tutorial, debes tener:

*Conocimiento Básico/Avanzado de Python
*Estar familiarizado con la sintaxis de Python
*Pygame (Lo podemos descargar desde aquí: LINK)
*Python (Recomendado: 2.5.2)
*Interés en la programación de Videojuegos
*Ganas de aprender

Y como ultimo pero no menos importante: Paciencia

________


Comenzando en lo básico
De Pygame

Importar Pygame:

Para realizar una aplicación en Pygame, es necesario primero exportar los módulos de este al programa... La mayoría de los juegos realizados con python y pygame importan todo pygame de la siguiente manera

Código (python) [Seleccionar]
import pygame
from pygame.locals import*


La primera linea es la realmente necesaria, ya que se encarga de importar todos los módulos que están dentro del paquete de pygame... La segunda coloca un grupo limitado de constantes y funciones dentro del espacio de nombres global de su script.

Iniciar Pygame:

Antes de poder hacer mucho con pygame, debemos iniciar este... Esto lo logramos con esta linea:

Código (python) [Seleccionar]
pygame.init()

Esto intentara iniciar todos los módulos, pero también podemos iniciar cada modulo por separado... Esto lo logramos de una manera muy facil:

Supongamos que queremos llamar al módulo 'Font', para ello colocamos:

Código (python) [Seleccionar]
pygame.font.init()

Notaran que si se produce un error cuando inicializa con "pygame.init()", este fallará silenciosamente. Cuando inicializa módulos a mano como este, cualquier error producirá una excepción. Cualquiera de los módulos que deba ser inicializado también tiene una función "get_init()", que retornará True (verdadero) si el módulo ha sido inicializado.

Es seguro llamar a la función "init()" por cada módulo mas de una vez.



Módulos de Pygame:

Existen distintos modulos, cada uno permite un control de un área en especifico, los modulos mas destacados son:

Cdrom: administra los dispositivos CDROM y la reproducción de CDs de audio.
Cursors: carga imágenes de cursor, incluyendo los cursores por defecto.
Display: controla la ventana principal o pantalla.
Draw: dibuja figuras simples sobre objetos Surface.
Event: administra eventos y la cola de eventos.
Font: genera e imprime fuentes tipográficas Truetype.
Image: lee y graba imágenes.
Joystick: administra dispositivos de joystick.
Key: administra el teclado.
Mouse: permite controlar el mouse
Movie: reproduce películas en formato MPEG.
Sndarray: manipula sonidos con Numeric.
Surfarray: manipula imágenes con Numeric.
Time: controlador de tiempo.
Transform: puede escalar, rotar e invertir imágenes.

Empezando por lo básico y principal

Bien, ahora comenzaremos a jugar con python y pygame... Algo fundamental de un juego al que nunca se le presta atención es a la ventana de la aplicación... Todos le damos doble clic al icono del juego y comenzamos a jugar... Bueno, en pygame una venta se crea de manera muy sencillo, la mas común y facil es con pygame.display.set_mode()

Probamos lo siguiente:

Código (python) [Seleccionar]
import pygame
pygame.init()
#colocamos las medidas en una variable, especificando que primero sera width y luego height (Ancho y luego  Largo)
size = width, height = 320, 240
screen = pygame.display.set_mode(size)
raw_input()


Esto no requiere de mucha explicación ya que es algo sencillo... Bien, normalmente pygame no responderá a cierres, es decir, que muchas veces se quedara colgado cuando lo intenten cerrar... Esto se arregla con colocando "pygame.quit()" al final de todo code sencillo, como el que acabamos de ver en este momento, entonces, nos quedaría así:


Código (python) [Seleccionar]
import pygame
pygame.init()
size = width, height = 320, 240
screen = pygame.display.set_mode(size)
raw_input()
pygame.quit()


Estableciendo fondo a una ventana:

Bien, ya creamos nuestra ventana, pero ahora queremos colocar una imagen de fondo, esto lo hacemos de manera muy sencilla con "screen.blit()"

Para esto hay que usar un "image.load" que nos permite cargar una imagen de una dirección específica... La sintaxis es muy sencilla:

Código (python) [Seleccionar]
pygame.image.load("ruta/de/archivo/nombredeimagen.extension")

En caso de que nuestra imagen este en la misma ubicación donde nos encontramos nosotros, no es necesario especificar la ruta... De igual manera, si la imagen se encuentra en una ruta que nos incluye anteriormente (Ejemplo estamos en la carpeta CM y la imagen esta en Mis documentos/CM/imágenes/imagen.jpg) solo debemos colocar el resto de la ruta (En este caso imágenes/imagen.jpg)

Entonces, declaramos en una variable la imagen y luego le colocamos la variable como valor al "screen.blit"
Pero basta de teoria y miremos el siguiente code


Citarimport pygame
pygame.init()
#Colocamos el code anterior
size = width, height = 320, 240
screen = pygame.display.set_mode(size)
#Aqui colocamos el fondo
Imagen = pygame.image.load("Mis documentos/imágenes/hola.jpg")
screen.blit(imagen, (0,0))
#Ahora si lo colocamos xD
raw_input()
pygame.quit()

Y listo, ya hemos agregado un fondo a la imagen... Algunos se preguntaran para que coloco "(0,0)" luego de colocar la variable con la imagen... Esto se hace para no alterar el tamaño de la imagen

Bueno aquí termina esta entrega, espero que la disfruten y le sea igualmente útil... En la próxima haremos cosas mas interesantes aun...

Avanzando en el camino del aprendizaje

En la entrega anterior vimos como crear una ventana y como colocar un fondo a esta ventana... Ahora seguiremos con otro complemento muy importante

Antes de comenzar quiero aclarar algo que cuando estaba comenzando a escribir esta entrega me dijeron

¿Hasta que nivel piensas llegar en este curso?

Bueno, realmente planeo avanzarlo hasta tal punto que se llegue a el desarrollo de aplicaciones básicas

También otra pequeña cosa que alguien del foro me pregunto por correo

¿Cuál es la diferencia entre programar un juego por Python y hacerlo por C++?

La verdad, C++ tiene mas "Logros" en el mundo de los juegos, pero cabe destacar que python se usa en los juegos desde hace no mucho... Python es más facil y posee una sintaxis mas limpia, lo que permite desarrollar el juego con más facilidad, pero sin embargo C++ pone en tus manos una optimización impresionante...

Resumiendo, mi respuesta a esa pregunta es: Que los que se programan es C++ están hechos en C++ y que los que se programan en Python están hechos en Python, tan sencillo como eso...

Bien, ahora exploraremos ese complemento importante de los juegos que nombre atrás: Los Sonidos

¿Que seria de un juego sin sonido? ¿Sin efectos sonoras? ¿Sin música que haga el suspenso 3 segundos antes de que aparezca el tipo malo? Bueno creo que estoy exagerando xD

La reproducción de sonido se logra con el "Mixer", este maneja la mayor parte de lo que se refiera a sonido... Antes de ver el código de ejemplo hay que decir que colocando la clásica linea "pygame.init()" no es iniciado este modulo, por eso debemos colocar "pygame.mixer.init()" ya que como dije en la primera entrega, en "pygame.init()" Intenta iniciar todos, pero no siempre lo logra, por eso sugiero siempre respaldar los modulos que importan iniciándolos de manera manual, bien, comenzamos:

Código (python) [Seleccionar]
import pygame
from pygame.locals import*
#Inciamos el "mixer"
pygame.mixer.init()
#Ahora cargamos el sonido
pygame.mixer.music.load("rutadelarchivodesonido/nombre.extension")
pygame.mixer.music.play()
raw_input()
pygame.exit()


Destacamos de igual manera que:

En caso de que nuestro sonido este en la misma ubicación donde nos encontramos nosotros, no es necesario especificar la ruta... De igual manera, si el sonido se encuentra en una ruta que nos incluye anteriormente (Ejemplo estamos en la carpeta CM y el sonido esta en Mis documentos/CM/sonidos/sonido.wav) solo debemos colocar el resto de la ruta (En este caso sonidos/sonido.wav)

Lectura del teclado


Que tal gente... Antes de todo pido disculpas por el retraso al colocar una nueva entrega, el motivo de esto es la falta de tiempo, ya que eh comenzado con las actividades escolares y carezco del tiempo necesario... Bueno en esta 4ta entrega pasaremos a la lectura del teclado... Esto se logra con la función "pygame.key.get_pressed()"... Bien, para mostrar como hacer coloco un simple código:

Código (python) [Seleccionar]
Import pygame
from pygame.locals import*
pygame.init()
k = pygame.key.get_pressed()
if k[K_SPACE] :
   print "Pisaste la tecla espacio"
   raw_input()
   sys.exit()


Creo que es perfectamente entendible este código, pero de igual manera lo explicare

Importamos e iniciamos pygame

CitarImport pygame
from pygame.locals import*
pygame.init()

Declaramos en la variable "k" la función "pygame.key.get_pressed()" que es la que se usara para asignar una evento a una tecla

Código (python) [Seleccionar]
k = pygame.key.get_pressed()

Definimos el inicio de función para la barra espaciadora...

Código (python) [Seleccionar]
if k[K_SPACE] :

Colocamos el resto de la función y salimos

Código (python) [Seleccionar]
   print "Pisaste la tecla espacio"
   raw_input()
   sys.exit()



NOTA: IRE EDITANDO CONTINUAMENTE

zZznewbiezZz

GRACIASSSS MUY BUENO jejej recien estoy empezando python y esto me ayuda bastante  ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D

Gabriela

Ole!!!!!!!!!!!!!!!!! por tu aporte. En este foro se aprende o se aprende ( para el que quiere, como el compañero que te responde antes, yo tmbien, voy en los primeros pasos, y todo tutorial se agradece.

Gabriela
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

seele

muy buen tutorial Checmated ;)

esperamos ver pronto un juego por aqui

saludos

flony

si un problema no tiene solucion entonces no es un problema...es algo inevitable


Gabriela

Cambia algo que sea del 2008? Es que si es así dilo, por favor.

Para los que estamos comenzando, que lo hayan traido a las fechas actuales resulta bueno, salvo que la antiguedad influya en algo negativo, errores, etc.

Gracias.

Gabriela.
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

flony

si un problema no tiene solucion entonces no es un problema...es algo inevitable