Antes de guardar el codigo en un fichero, debes crear un directorio llamado data y alli guardar las imagenes que podras descargar de esta pagina con el tag get info.

   1 #!/usr/bin/python
   2 # -*- coding: iso-8859-15 -*-
   3 
   4 import pygame, os.path
   5 from pygame.locals import *
   6 
   7 RECTANGULO_PANTALLA  = Rect(0, 0, 800, 600)
   8 
   9 #Algunas variables globales para un amistoso acceso.
  10 rectangulos_sucios = [] # Lista de rectangulos_sucios
  11 
  12 class Img: pass # Contenedor de imagenes
  13 
  14 class Actor:
  15     "Esta es una clase tipo sprite"
  16     def __init__(self, imagen):
  17         self.imagen = imagen
  18         self.rectangulo = imagen.get_rect()
  19 
  20     def update(self):
  21         "actualiza el estado del sprite para este frame"
  22         pass
  23 
  24     def dibujar(self, ventana):
  25         "dibuja el sprite in la pantalla"
  26         r = ventana.blit(self.imagen, self.rectangulo)
  27         #print r
  28         rectangulos_sucios.append(r)
  29 
  30     def borrar(self, ventana, superficie):
  31         "borra el sprite de la superficie"
  32         r = ventana.blit(superficie, self.rectangulo, self.rectangulo)
  33         #print r
  34         rectangulos_sucios.append(r)
  35 
  36 class Garza(Actor):
  37     def __init__(self):
  38         Actor.__init__(self, Img.pico)
  39 
  40         self.rectangulo = Img.pico.get_rect()
  41         self.rectangulo.centerx = RECTANGULO_PANTALLA.centerx - 300
  42         self.rectangulo.bottom = RECTANGULO_PANTALLA.bottom - 50
  43 
  44     def mover(self, direccion, estado_tecla):
  45         if estado_tecla[K_RIGHT] or estado_tecla[K_LEFT]:
  46             self.rectangulo = self.rectangulo.move(direccion, 0).clamp(RECTANGULO_PANTALLA)
  47         elif estado_tecla[K_UP] or estado_tecla[K_DOWN]:
  48             self.rectangulo = self.rectangulo.move(0, direccion).clamp(RECTANGULO_PANTALLA)
  49 
  50 def main():
  51     global rectangulos_sucios
  52 
  53     # Inicializa componentes SDL y submodulos
  54     pygame.init()
  55     ventana = pygame.display.set_mode(RECTANGULO_PANTALLA.size, 0)
  56     reloj = pygame.time.Clock()
  57 
  58     #http://upload.wikimedia.org/wikipedia/commons/f/f7/Costa3.jpg
  59     surface = pygame.image.load(os.path.join('data', 'DrozCosta.jpg'))
  60     Img.fondo = surface.convert()
  61 
  62     surface = pygame.image.load(os.path.join('data', 'DrozC2.png'))
  63     Img.pico = surface.convert()
  64 
  65     # Crear el background o fondo
  66     superficie = pygame.Surface(RECTANGULO_PANTALLA.size)
  67 
  68     # Esto pondrá nuestro fondo en la pantalla para que sea utilizado
  69     # como superficie para otras imagenes del juego tal como la garza.
  70     superficie.blit(Img.fondo, (0, 0))
  71 
  72     # Y despues colocaremos la superficie dentro de nuestra ventana para
  73     # que así esta sea la superficie general a todo lo que vaya en el
  74     # juego.
  75     ventana.blit(superficie, (0,0))
  76 
  77     # Ahora se hace una actualización de nuestras superficies.
  78     pygame.display.flip()
  79 
  80     # Inicialza nuestra objeto garza.
  81     pico = Garza()
  82 
  83     while 1:
  84         reloj.tick(400)
  85 
  86         # Esto lo usamos para la comunicacion con el sistema manejador de ventanas
  87         # y otras partes de la plataforma. Se usa para mantener una sincronia con
  88         # el sistema en cualquier actualización. Esta función es necesariamente llamada
  89         # una vez por loop del while.
  90         pygame.event.pump()
  91 
  92         # Guarda una tupla de numeros en cero la cual segñun tecla oprimida, uno
  93         # de estos datos queda activado mostrando un uno en vez de cero.
  94         estado_tecla = pygame.key.get_pressed()
  95 
  96         if estado_tecla[K_ESCAPE] or pygame.event.peek(QUIT):
  97             return
  98 
  99         # Se borra la garza antes de colocarla denuevo.
 100         pico.borrar(ventana, superficie)
 101         pico.update()
 102 
 103         # Según el evento en nuestro teclado podremos mover la garza
 104         # en diferentes direcciones.
 105         if estado_tecla[K_RIGHT] or estado_tecla[K_LEFT]:
 106             direccion = estado_tecla[K_RIGHT] - estado_tecla[K_LEFT]
 107             pico.mover(direccion, estado_tecla)
 108 
 109         if estado_tecla[K_UP] or estado_tecla[K_DOWN]:
 110             direccion = estado_tecla[K_DOWN] - estado_tecla[K_UP]
 111             pico.mover(direccion, estado_tecla)
 112 
 113         # Dibujar todo con la garza en una nueva posicion según el evento
 114         # de teclado.
 115         pico.dibujar(ventana)
 116 
 117         pygame.display.update(rectangulos_sucios)
 118         rectangulos_sucios = []
 119 
 120     pygame.time.wait(200)
 121 
 122 if __name__ == '__main__':
 123     main()

Python/Code/MoviendoImagenConPygame (last edited 2010-09-20 20:39:41 by Kmilo)