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