pilas.actores.pingu

Package pilas :: Package actores :: Module pingu |
[hide private]
[frames] | no frames]

# Source Code for Module pilas.actores.pingu

      1  # -*- encoding: utf-8 -*-
      2  # Pilas engine - A video game framework.
      3  #
      4  # Copyright 2010 - Hugo Ruscitti
      5  # License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html)
      6  #
      7  # Website - http://www.pilas-engine.com.ar
      8
      9  import pilas
     10  from pilas.actores import Actor
     11  from pilas.comportamientos import Comportamiento
     12
     13  VELOCIDAD = 4
     14
     15 -class Pingu(Actor):
     16      """Muestra a un pingüino que sabe caminar con el teclado.
     17
     18      .. image:: images/actores/pingu.png
     19
     20      Este actor responde al teclado, así que podremos
     21      usar los direccionales del teclado ``izquierda``, ``arriba``
     22      y ``derecha``:
     23
     24          >>> pingu = pilas.actores.Pingu()
     25      """
     26
     27 -    def __init__(self, x=0, y=0):
     28          """Inicializa al actor.
     29
     30          :param x: Posición horizontal.
     31          :param y: Posición vertical.
     32          """
     33          Actor.__init__(self, x=x, y=y)
     34          self.imagen = pilas.imagenes.cargar_grilla("pingu.png", 10)
     35          self.definir_cuadro(4)
     36          self.hacer(Esperando())
     37          self.radio_de_colision = 30
     38          self.centro = ("centro", "abajo")
     39
     40 -    def definir_cuadro(self, indice):
     41          """Define el cuadro de la animación.
     42
     43          :param indice: Número de cuadro.
     44          """
     45          self.imagen.definir_cuadro(indice)
     46
     47
     48 -class Esperando(Comportamiento):
     49      "Un actor en posicion normal o esperando a que el usuario pulse alguna tecla."
     50
     51 -    def iniciar(self, receptor):
     52          self.receptor = receptor
     53          self.receptor.definir_cuadro(4)
     54
     55 -    def actualizar(self):
     56          if pilas.escena_actual().control.izquierda:
     57              self.receptor.hacer(Caminando())
     58          elif pilas.escena_actual().control.derecha:
     59              self.receptor.hacer(Caminando())
     60
     61          if pilas.escena_actual().control.arriba:
     62              self.receptor.hacer(Saltando())
     63
     64
     65 -class Caminando(Comportamiento):
     66      """Representa al personaje caminando por el escenario."""
     67
     68 -    def iniciar(self, receptor):
     69          self.receptor = receptor
     70          self.cuadros = [5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
     71          self.paso = 0
     72
     73 -    def actualizar(self):
     74          self.avanzar_animacion()
     75
     76          if pilas.escena_actual().control.izquierda:
     77              self.receptor.x -= VELOCIDAD
     78          elif pilas.escena_actual().control.derecha:
     79              self.receptor.x += VELOCIDAD
     80          else:
     81              self.receptor.hacer(Esperando())
     82
     83          if pilas.escena_actual().control.arriba:
     84              self.receptor.hacer(Saltando())
     85
     86 -    def avanzar_animacion(self):
     87          self.paso += 1
     88
     89          if self.paso >= len(self.cuadros):
     90              self.paso = 0
     91
     92          self.receptor.definir_cuadro(self.cuadros[self.paso])
     93
     94 -class Saltando(Comportamiento):
     95      """Representa al actor saltando con animación."""
     96
     97 -    def iniciar(self, receptor):
     98          self.dy = 10
     99          self.receptor = receptor
    100          self.receptor.definir_cuadro(0)
    101          self.origen = self.receptor.y
    102
    103 -    def actualizar(self):
    104          self.receptor.y += self.dy
    105          self.dy -= 0.3
    106
    107          if self.receptor.y < self.origen:
    108              self.receptor.y = self.origen
    109              self.receptor.hacer(Esperando())
    110
    111          if pilas.escena_actual().control.izquierda:
    112              self.receptor.x -= VELOCIDAD
    113          elif pilas.escena_actual().control.derecha:
    114              self.receptor.x += VELOCIDAD
    115