pilas.actores.personajes_rpg

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

# Source Code for Module pilas.actores.personajes_rpg

      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  # Imagenes del actor de J. M. Silveira Neto - http://silveiraneto.net/tag/pixelart/

      9

     10  import pilas
     11  from pilas.actores import Actor
     12  from pilas.comportamientos import Comportamiento
     13

     14  VELOCIDAD = 100
     15

     16  NORTE = 0
     17  SUR = 2
     18  ESTE = 1
     19  OESTE = 3
     20

     21 -class BasePersonajeRPG(Actor):
     22      """Representa un personaje de juego tipo RPG."""
     23

     24 -    def __init__(self, mapa, x=0, y=0, imagen="rpg/calvo.png", velocidad=3):
     25          Actor.__init__(self, x=x, y=y)
     26          self.imagen = pilas.imagenes.cargar_grilla(imagen, 3, 4)
     27

     28          self.mapa = mapa
     29

     30          self.direccion = pilas.actores.personajes_rpg.SUR
     31          self.hacer(Esperando())
     32          self.velocidad = velocidad
     33

     34 -    def definir_cuadro(self, indice):
     35          self.imagen.definir_cuadro(indice)
     36          self.definir_centro((17, 48))
     37

     38 -    def actualizar(self):
     39          pass
     40

     41 -class Esperando(Comportamiento):
     42      "Un actor en posicion normal o esperando a que el usuario pulse alguna tecla."
     43

     44 -    def iniciar(self, receptor):
     45          """Inicializa el comportamiento.

     46

     47          :param receptor: Referencia al actor a controlar.

     48          """
     49

     50          self.receptor = receptor
     51          if (self.receptor.direccion == pilas.actores.personajes_rpg.NORTE):
     52              self.receptor.definir_cuadro(1)
     53          elif (self.receptor.direccion == pilas.actores.personajes_rpg.ESTE):
     54              self.receptor.definir_cuadro(4)
     55          elif (self.receptor.direccion == pilas.actores.personajes_rpg.SUR):
     56              self.receptor.definir_cuadro(7)
     57          elif (self.receptor.direccion == pilas.actores.personajes_rpg.OESTE):
     58              self.receptor.definir_cuadro(10)
     59

     60 -    def actualizar(self):
     61          if pilas.escena_actual().control.izquierda:
     62              self.receptor.hacer(Caminando())
     63          elif pilas.escena_actual().control.derecha:
     64              self.receptor.hacer(Caminando())
     65          elif pilas.escena_actual().control.arriba:
     66              self.receptor.hacer(Caminando())
     67          elif pilas.escena_actual().control.abajo:
     68              self.receptor.hacer(Caminando())
     69

     70 -class Caminando(Esperando):
     71      """Representa al personaje caminando por el escenario."""
     72

     73 -    def __init__(self):
     74          self._repeticion_cuadro = 3
     75

     76          self.cuadros = [[1,1,1,1,0,0,0,0,1,1,1,1,2,2,2,2],

     77                          [4,4,4,4,3,3,3,3,4,4,4,4,5,5,5,5],

     78                          [7,7,7,7,6,6,6,6,7,7,7,7,8,8,8,8],

     79                          [10,10,10,10,9,9,9,9,10,10,10,10,11,11,11,11]]
     80

     81          self.paso = 0
     82

     83 -    def iniciar(self, receptor):
     84          """Inicializa el comportamiento.

     85

     86          :param receptor: Referencia al actor a controlar.

     87          """
     88          self.receptor = receptor
     89

     90 -    def actualizar(self):
     91          self.avanzar_animacion()
     92

     93          dx = 0
     94          dy = 0
     95

     96          if pilas.escena_actual().control.izquierda:
     97              dx = self.receptor.velocidad * -1
     98              self.receptor.direccion = pilas.actores.personajes_rpg.OESTE
     99          elif pilas.escena_actual().control.derecha:
    100              dx = self.receptor.velocidad
    101              self.receptor.direccion = pilas.actores.personajes_rpg.ESTE
    102          elif pilas.escena_actual().control.arriba:
    103              dy = self.receptor.velocidad
    104              self.receptor.direccion = pilas.actores.personajes_rpg.NORTE
    105          elif pilas.escena_actual().control.abajo:
    106              dy = self.receptor.velocidad * -1
    107              self.receptor.direccion = pilas.actores.personajes_rpg.SUR
    108          else:
    109              self.receptor.hacer(Esperando())
    110

    111          if not(self.receptor.mapa.es_punto_solido(self.receptor.x + dx, self.receptor.y + dy)):
    112              self.receptor.x += dx
    113              self.receptor.y += dy
    114

    115 -    def avanzar_animacion(self):
    116          """Cambia el cuadro de animación."""
    117          self.paso += 1
    118

    119          if self.paso >= len(self.cuadros[self.receptor.direccion]):
    120              self.paso = 0
    121

    122          self.receptor.definir_cuadro(self.cuadros[self.receptor.direccion][self.paso])
    123

    124 -class Calvo(BasePersonajeRPG):
    125      """Representa un personaje de juego tipo RPG."""
    126

    127 -    def __init__(self, mapa, x=0, y=0):
    128          """Inicializa al actor.

    129

    130          :param mapa: Mapa sobre el que podrá moverse el actor.

    131          :param x: Posición horizontal del mapa.

    132          :param y: Posición vertical del mapa.

    133          """
    134          BasePersonajeRPG.__init__(self, mapa=mapa, x=x, y=y, imagen="rpg/calvo.png", velocidad=2)
    135

    136 -class Maton(BasePersonajeRPG):
    137      """Representa un personaje de juego tipo RPG."""
    138

    139 -    def __init__(self, mapa, x=0, y=0):
    140          """Inicializa al actor.

    141

    142          :param mapa: Mapa sobre el que podrá moverse el actor.

    143          :param x: Posición horizontal del mapa.

    144          :param y: Posición vertical del mapa.

    145          """
    146          BasePersonajeRPG.__init__(self, mapa, x=x, y=y, imagen="rpg/maton.png", velocidad=2)
    147