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()
