Loading...
XOPLANET 2.2

Crear juegos en Pygame

KnightOfDarkness

  • *****
  • 1.408
    • okay Admin
  • Laptop: : Unknown
Crear juegos en Pygame
« en: Enero 07, 2014, 04:01:03 am »
En este Articulo veremos un Tutorial de como crear nuestro Primer Juego con PyGame en Python, realizaremos un juego que talvez no tenga mucho sentido, pero que sin duda nos adentrara en el proceso de desarrollo de futuros proyectos, abarcaremos temas como inicializacion de pygame, frecuencia de reloj (FPS), manejo de colores, carga de imagenes y su aparicion en el juego, carga de sonidos y su aparicion en el juego, carga de tipos de letra y su aparicion en el juego, sistema de coordenadas, dibujado de figuras simples, eventos de teclado y actualizacion de pantalla. El juego en si sera un ambiente donde un personaje tendra como mision llegar a la meta y el juego terminara. Asi que veamos como crear nuestro Primer Juego con PyGame en Python, Comencemos…


Requerimientos:

Python
PyGame
Archivos Necesarios


Desarrollo

Para Comenzar a programar nuestro Primer Juego con PyGame en Python necesitaremos primeramente tener nuestro entorno correctamente configurado para lo cual te recomiendo leer los articulos mencionados el area de requerimientos, tambien necesitaras descargar el archivo comprimido que contiene las imagenes y sonidos para seguir al pie este articulo.
Vamos a crear nuestro archivo de codigo fuente, puedes usar cualquier editor de texto, y comenzaremos a escribir el codigo.


import pygame, sys
from pygame.locals import *



importamos los modulos necesarios para nuestro juego


pygame.init()

Inicializamos el modulo de pygame, necesario antes de empezar a utilizar cualquier cosa de PyGame


FPS = 30
frecuencia = pygame.time.Clock()



Creamos una variable con los fotogramas por segundo, y otra con la que modificaremos la frecuencia de reloj de nuestro juego


PANTALLA = pygame.display.set_mode((800, 600),0,32)
pygame.display.set_caption('Primer Juego en Pygame!')



Creamos nuestro objeto para manejar la pantalla, establecemos la resolucion de pantalla y profundidad, establecemos tambien el titulo de ventana


CIELO = (0,255,255)
NUBE = (255,255,255)
SOL = (255,255,0)
ROJO = (255,0,0)



Establecemos variables para los colores que utilizaremos, utilizamos el modelo RGB para crear los colores


PERSONAJE = pygame.image.load("personaje.png")
ARBUSTO = pygame.image.load("arbusto.png")
META = pygame.image.load("meta.png")


Creamos variables que almacenaran las imagenes que queremos mostrar en nuestro juego, estas imagenes estan el el archivo comprimido que esta en requerimientos, estas son la imagen de nuestro personaje principal, una imagen de un arbusto que repetiremos algunas veces, la imagen de la meta.


PERSONAJEX = 20
PERSONAJEY = 460
ARBUSTOX = -100
ARBUSTOY = 450
METAX = 620
METAY = 470



Estas Variables definen la posicion inicial de nuestras imagenes que cargamos anteriormente, puedes observar que pertenecen a las coordenadas X y Y






NUBE1_DIM = [100,50,200,100]
NUBE2_DIM = [300,100,200,100]


Estos objetos son rectangulos que nos ayudaran a dibujar algunas nubes, 2 para ser exactos, estos rectangulos definen la posicion inicial x,y asi como el ancho y alto de la nube(2do y 3er parametro)


aumX = 0
aumY = 0


Variables auxiliares utilizadas para mover nuestro personaje, las utilizaremos mas tarde


fontObject = pygame.font.Font("StripeAttack.ttf",40)
textSurfaceObject = fontObject.render("Primer Juego en PyGame",True,ROJO,CIELO)
textRectObject = textSurfaceObject.get_rect()
textRectObject.center = (200,30)


Ahora para mostrar un mensaje en nuestro juego con un tipo de letra, tamaño y color, vamos a crear un objeto con el tipo de letra (que debe estar en la misma carpeta que el archivo de codigo fuente) y el tamaño de fuente, escribimos el texto que sera mostrado asi como otros parametros que son: True, antialiasing para mejorar la calidad del texto, ROJO, el color principal del texto, CIELO, color de fondo de nuestro rectangulo que contiene el texto. Establecemos el centro de nuestro texto


fontObject2 = pygame.font.Font("StripeAttack.ttf",60)
textSurfaceObject2 = fontObject2.render("Has Ganado el Juego",True,ROJO,CIELO)
textRectObject2 = textSurfaceObject.get_rect()
textRectObject2.center = (400,300)


Ahora creamos otro similar solo que cambiara el tamaño del texto a 60, el mensaje y la posicion donde se mostrara, este sera el mensaje utilizado para mostrar al usuario cuando haya ganado el juego


pygame.mixer.music.load("Molinos_de_viento.mp3")
pygame.mixer.music.play(-1,0.0)


Ahora como todo juego no podia faltar el sonido, para esto nosotros utilizaremos una cancion de sonido de fondo, utilizamos los metodos de pygame music, cargamos primero escribiendo el nombre de la cancion, puede ser wav o mp3, recuerda que estos recursos externos tienen que estar en la misma carpeta que nuestro archivo fuente, establecemos -1 para indicar que unavez que termine vuelva a empezar.

Todo juego en pygame necesita un ciclo principal, que se estara repitiendo a lo largo de la ejecucion de nuestro juego, recuerda que en python la indentacion juega un papel muy importante, nuestro ciclo principal iniciara asi


while True:

   PANTALLA.fill(CIELO)
   pygame.draw.circle(PANTALLA,SOL,(700,100),120,0)
   pygame.draw.ellipse(PANTALLA,NUBE,NUBE1_DIM,0)
   pygame.draw.ellipse(PANTALLA,NUBE,NUBE2_DIM,0)


Empezamos nuestro ciclo principal, utilizamos nuestro objeto pantalla que definimos antes para rellenar la pantalla de un color azul cielo que tambien hemos realizado ya, haremos uso de algunos metodos de pygame para dibujar figuras geometricas como el ellipse y el circulo, los cuales ocuparemos para crear un sol muy simple y un par de nubes, a estos metodos le pasaremos nuestro objeto pantalla, coordenadas y tamaños de figuras, en el caso de los ellipses pasaremos rectangulos.


PANTALLA.blit(ARBUSTO,(ARBUSTOX,ARBUSTOY))
PANTALLA.blit(ARBUSTO,(ARBUSTOX+200,ARBUSTOY))
PANTALLA.blit(ARBUSTO,(ARBUSTOX+340,ARBUSTOY))
PANTALLA.blit(ARBUSTO,(ARBUSTOX+500,ARBUSTOY))
PANTALLA.blit(ARBUSTO,(ARBUSTOX+660,ARBUSTOY))
PANTALLA.blit(META,(METAX,METAY))
PANTALLA.blit(PERSONAJE,(PERSONAJEX,PERSONAJEY))
PANTALLA.blit(textSurfaceObject,textRectObject)


Ahora mediante el metodo blit de nuestro objeto pantalla agregaremos elementos a nuestra pantalla, agregaremos algunos arbustos con el mismo objeto arbusto pero diferentes coordenadas, tambien agregaremos la imagen de meta mediante su objeto y sus coordenadas, agregamos nuestro personaje y por ultimos nuestro objeto de texto, el primero que creamos no el segundo.


PERSONAJEX = PERSONAJEX + aumX
PERSONAJEX = PERSONAJEX + aumX


En este par de lineas sumamos a las coordenadas de X de personaje, es decir a las de derecha/izquierda, el contenido de la variable aumX que mas adelante modificaremos segun si presionamos la tecla de derecha o izquierda de nuestro teclado, esto hara que nuestro personaje se mueva de izquierda a derecha, al modificar la posicion X


if PERSONAJEX >= 800:
   PANTALLA.blit(textSurfaceObject2,textRectObject2)


en este conficional comprobamos si las coordenadas de X de nuetro personaje sobrepasan los 800, tamaño que le dimos de largo a nuestro juego, si es asi significa que nuestro personaje se ha movido lo suficiente a la derecha que ya no es visible en la pantalla, lo que significa que ha cruzado la meta, entonces se mostrara el segundo mensaje de texto que dice que el jugador ha ganado


for event in pygame.event.get():
   if event.type == QUIT:
      pygame.mixer.music.stop()
      pygame.quit()
      sys.exit()
   elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_RIGHT:
         aumX = 5
      if event.key == pygame.K_LEFT:
         aumX = -5
   elif event.type == pygame.KEYUP:
      if event.key == pygame.K_RIGHT:
         aumX = 0
      if event.key == pygame.K_LEFT:
         aumX = 0


Aqui trateremos los eventos de nuestro juego, en esta ocacion solo ocuparemos el basico de QUIT para salir correctamente, y los de KEYDOWN Y KEYUP, para saber cuando se presione y se libere una tecla, en particular la tecla derecha (K_RIGHT) Y izquierda (K_LEFT) que son las que ocupamos para movernos de izquierda a derecha, al detectar este evento estableceremos el aumento en positivo 5 para derecha o negativo 5 para izquierda y cuando se suelte la tecla estableceremos el aumento en 0, esto es, sin movimiento.


pygame.display.update()

Con esta instruccion se actuliza la pantalla de nuestro juego


frecuencia.tick(FPS)


Establecemos la frecuencia de nuestro juego que fue de 30

Ejecutamos el juego y veremos nuestro primer juego con pygame en python.




FUENTE: http://jonathanmelgoza.com/blog/primer-juego-con-pygame-en-python-tutorial/


___________________________

Y ahora les muestro un par de juegos hechos en python




« Última modificación: Enero 11, 2014, 11:59:41 am por NICO-X »

nachoel01

  • *
  • 51
    • Ignacio Rodríguez
  • Laptop: : Mac Book
Re:Crear juegos en Pygame
« Respuesta #1 en: Enero 11, 2014, 11:15:59 am »
Buen post, para la próxima pasale PyFlakes y Pep8 (podes usar ninja ide que te dice esos errores).
Pep8 hace el código más legible por ejemplo:
"Hola,Adios" es tremendo error que te vi (Vos lo hicistes con números o otras cosas)
SIEMPRE, deja un espacio despues de la coma

Y un espacio adelante y atrás de los operadores, es decir:
Citar
total = 20 + 50
Eso está bien
total = 20+50
Eso está mal

Otra cosa, las variables no las nombres con mayúsculas, es un error que yo cometí muchas veces:
Citar
ignacio = "Ignacio Rodriguez"
Eso está bien
Ignacio = "Ignacio Rodriguez"
Eso está mal

Son unos consejos que a mi me ayudaron un montón,
PD: Si podes mirá http://ninja-ide.org/
PD2: Cuando desarolles "local" (Para el Foro por ejemplo) usa variables con nombres en español, es mucho más fácil para cualquier usuario "nuevo".
PD3: +5

KnightOfDarkness

  • *****
  • 1.408
    • okay Admin
  • Laptop: : Unknown
Re:Crear juegos en Pygame
« Respuesta #2 en: Enero 11, 2014, 11:57:53 am »
Buen post, para la próxima pasale PyFlakes y Pep8 (podes usar ninja ide que te dice esos errores).
Pep8 hace el código más legible por ejemplo:
"Hola,Adios" es tremendo error que te vi (Vos lo hicistes con números o otras cosas)
SIEMPRE, deja un espacio despues de la coma

Y un espacio adelante y atrás de los operadores, es decir:
Otra cosa, las variables no las nombres con mayúsculas, es un error que yo cometí muchas veces:
Son unos consejos que a mi me ayudaron un montón,
PD: Si podes mirá http://ninja-ide.org/
PD2: Cuando desarolles "local" (Para el Foro por ejemplo) usa variables con nombres en español, es mucho más fácil para cualquier usuario "nuevo".
PD3: +5
Gracias Nacho por los consejos, Pero este Post es totalmente Copy&Paste, y casi ni me puse a revisar las faltas de Ortografía, por eso puse la Fuente al final


PD: Aunque esta no la sabía "SIEMPRE, deja un espacio despues de la coma" la tomaré en cuenta :)