Veo muchisimas clases por todos los lados, y no se si sería posible hacer una criba. Por ejemplo, en actores creo que reestructurandolo sería más facil añadir mejoras y saber donde añadirlas. Por otro lado creo que se podrían utilizar listas y diccionarios para cosas que he visto creadas mediante clases y más clases, y asi aprovechar las opciones que brindan diccionarios y listas. Puede que lo que crea que es una mejora no sea tal, pero si no lo expongo no nunca si es algo equicocado o no.
Un ejemplo para actores, para que me entendais mejor, con codigo un poco chapucero...
- Código: Seleccionar todo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Constantes
#-------------------------------------------------------------------------------
tipo0=[0,0]
tipo1=[1,0]
tipo2=[0,1]
tipo3=[1,1]
actividad=['sumar','saludar']
# Funciones
#-------------------------------------------------------------------------------
def n_append(lista, n, *arg,**kw):
''' Añade a la lista los argumentos y/o palabras clave por orden, y
repitiendo la secuencia n veces '''
Args=list(arg)+kw.values()
while n>0 and Args!=[]:
for i in Args:lista.append(i)
n-=1
return lista
def cotejar(lista1,lista2,palabra='actividad'):
'''Compará longitudes de las listas dadas, sino son iguales la más corta
se hace que tenga más miembros hasta igualar a la otra'''
dif_len=len(lista1)-len(lista2)
if dif_len:
if dif_len>0:
n_append(lista2,dif_len,0)
else:
n_append(lista1,-dif_len,palabra)
if dif_len>1:
print -dif_len,palabra+' sin actualizar'
else:
print -dif_len,palabra+'es sin acutalizar'
else: return
def estan_activas(lista1,lista2):
'''Reduce la primera lista, eliminado los valores cuyo indice tenga en la
otra lista el valor 0'''
cotejar(lista1,lista2)
poder=lista1[:]
for i in range(len(poder)):
if lista2[i]:
pass
else:
del poder[i]
return poder
# Clases
#-------------------------------------------------------------------------------
class actor:
def __init__(self, tipo=tipo1):
self.tipo=tipo
self.puede=estan_activas(actividad,self.tipo)
def sumar(self,*arg):
if 'sumar' in self.puede:
suma=sum(arg)
return suma
else:
print u'No puede hacerlo, usa la función activar para permitirselo'
pass
def saludar(self,nombre=''):
'''Tienes que escribir un nombre entre comillas'''
if 'saludar' in self.puede:
print 'Hola '+nombre
else:
print u'No puede hacerlo, usa la función activar para permitirselo'
pass
def activar(self,*arg):
'''Escribe la actividad/es entrecomillada/s para activarla/s'''
for i in arg:
if i not in self.puede:
self.puede.append(i)
else:print u'Ya podía '+i
def desactivar(self,*arg):
'''Escribe la actividad/es entrecomillada/s para desactivarla/s'''
for i in arg:
if i in self.puede:
self.puede.remove(i)
else:
print 'No se puede desactivar '+i+u', si ya estaba desactivada'
El tipo0 por ejemplo se le podríamos a asignar a una piedra, el tipo1 a una calculadora, tipo2 al malo del juego, tipo3 al protagonista, el bueno del juego. Activar y desactivar, creo que viene a ser algo parecido a lo de aprender y desaprender que ya hay en pilas.
En las subclases podriamos añadir nuevas habilidades facilmente añadiendo elementos a la lista y creando listas de a que tipo de actor pertenece dentro de cada subclase.
Un ejemplo de lo que tengo en mente con respecto a la restructuración
ObjetoPilas: Sería el objeto base, que aparece en la pantalla, creo que lo que ahora se llama actor en pilas.
--Actor: seria para todos los objetos animados ya sea por el jugador o por la maquina
----Protagonistas: los que se maneja el jugador
----Personajes: Todo bicho bueno o malo, que hay en escena con el que puede interactuar el protagonista.
--Escenario: Incluye fondo y elementos fijos y moviles, estos ultimos actuan de forma periódica, su posición o movimento no varia por interaccion con actores. Dividida en capas.
----capa0 o escena: La capa que interactua con los actores,para el efecto parallax
----Resto de capas:capa1,capa2,... una detras de otra para el efecto parallax, se podria crear una capa_1 (capa -1) por si se quiere que haya algo por delante de la escena.
----Capasuperior:donde se muestran puntos, vidas, etc
--Interfaz: Lo que teneis pensado hacer la GUI
Creo que queda más o menos claro con el esquema, algo asi breve y mejor explicado en pilas vendría bien.
Perdon por el sermón
