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






 ,
 , , aunque muchas veces me termino perdiendo porque eso de mirar un archivo para ver que significaba una cosa (que seguramente la haya visto antes pero se me olvida...)
 , aunque muchas veces me termino perdiendo porque eso de mirar un archivo para ver que significaba una cosa (que seguramente la haya visto antes pero se me olvida...)
