jueves, 1 de enero de 2009

pacman 0.004 - ¡A comer!

código pacman

Lo que haremos a continuación es enseñar a comer a nuestro pacman. La regla será que pacman se comerá todos los objetos (sprites) comestibles con los que se encuentre. Un sprite será comestible si tiene el atributo "comestible" y éste tiene valor "True" y pacman se lo comerá si colisiona con él.

Para ver los sprites con los que va colisionando nuestro pacman vamos a emplear la función "pygame.sprite.spritecollide". Esta función dado un sprite X y una lista de sprites devuelve los sprites de esta lista que colisiona con el sprite X. El tercer parámetro de esta función, que tenemos a False, indica si queremos que se eliminen automáticamente de la lista todos aquellos sprites con los que colisiona.

sprites_choque = pygame.sprite.spritecollide(spriteX,
sprites,
False)

Así quedará nuestra función "update" de Pacman. Para facilitar su lectura no la incluyo entera pero la puedes ver en el código que te adjunto

class Pacman ( MiSprite ):
...
def update (self):
...
MiSprite.update(self)

global sprites
sprites_choque = pygame.sprite.spritecollide(self,
sprites,
False)
for sprite in sprites_choque:
if sprite != self:
if hasattr ( sprite, "comestible" ):
if sprite.comestible:
sprite.kill() #destruimos el sprite

Por si no sabes mucho de Python, la función "hasattr" te permite comprobar si un objeto tiene definido un determinado atributo.

Destruimos un sprite llamando a su método "kill" que lo destruye eliminándolo de todas aquellas listas que lo contienen.

Para hacer que las cerezas y las bolitas sean comestibles basta con indicarlo a través del nuevo atributo "comestible".

sprite = MiSprite ("fruta.gif", [0, 100], [0,0])
sprite.comestible = True
sprites.add ( sprite )

sprite = MiSprite ("bola.gif", [100, 100], [0,0] )
sprite.comestible = True
sprites.add ( sprite )
En la próxima entrega veremos còmo crear paredes dentro de nuestro juego de tal forma que sean infranqueables.

No hay comentarios: