Sobre como esta ordenado pilas

Si tienes alguna duda sobre cómo usar pilas, o tienes problemas para instalar o hacer algo en pilas comentalo aquí.

Sobre como esta ordenado pilas

Notapor Alzacon » Vie Ene 28, 2011 8:17 pm

Seguro que es debido a ser nuevo en esto de la programación, pero me resulta un poco lioso como esta organizado el motor. Y al no haber un archivo que te diga como está estructurado y que hay, aunque sea por encima, en cada hay en cada carpeta o archivo; por lo que al final me termino mareando un poco buscando entender el trabajo ya hecho para poder ayudar y no 'volver a inventar la rueda'.

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 :roll:
Alzacon
 
Mensajes: 19
Registrado: Jue Ene 27, 2011 8:35 pm

Re: Sobre como esta ordenado pilas

Notapor hugoruscitti » Sab Ene 29, 2011 5:58 am

Alzacon escribió:Seguro que es debido a ser nuevo en esto de la programación, pero me resulta un poco lioso como esta organizado el motor. Y al no haber un archivo que te diga como está estructurado y que hay, aunque sea por encima, en cada hay en cada carpeta o archivo; por lo que al final me termino mareando un poco buscando entender el trabajo ya hecho para poder ayudar y no 'volver a inventar la rueda'.


Saludos Alzacon, recién escribí el capítulo 27 de pilas, llamado "Cómo funciona pilas por dentro". Ahí
escribí varios detalles técnicos para comprender la estructura del motor:

http://bitbucket.org/hugoruscitti/pilas ... engine.pdf

Ten en cuenta uno de los primeros consejos que aparecen ahí, hay solo 3 componentes que son
indispensables para investigar, los demás puedes ir aprendiendolos de a poco, a medida que avanzas.

Posiblemente agregue un poco mas de texto a este capítulo mas adelante.

Alzacon escribió: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.


Para clasificar estamos usando clases, porque se las puede documentar, se pueden extender
con herencia y pueden encapsular distitas características.

Por ejemplo, si hago "actor.eliminar()" puede explotar (si es de la clase Bomba) o simplemente desaparecer
haciendo "puff!" si es de la clase "Globo". Esos comportamientos es bueno escribirlos en un solo lugar, y
no hacer preguntas de tipo "si es tipo == 1 entonces 'a', si es tipo == 2 entonces 'b'"... una característica
de orientación a objetos es que el mensaje proboca un comportamiento, y ese comportamiento
depende del receptor.

Alzacon escribió: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


m... parece interesante, pero creo que no tenemos tantos actores para ir clasificando, dejámelo pensar.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Sobre como esta ordenado pilas

Notapor danielpuch » Sab Ene 29, 2011 5:53 pm

hugoruscitti escribió:Saludos Alzacon, recién escribí el capítulo 27 de pilas, llamado "Cómo funciona pilas por dentro". Ahí
escribí varios detalles técnicos para comprender la estructura del motor:

http://bitbucket.org/hugoruscitti/pilas ... engine.pdf


Buenisimo Hugo, voy a investigar esas ultimas modificaciones al manual de pilas. Me va a venir muy bien ya que para los que estamos aprendiendo programacion
se nos hace dificil entender la estructura, cuando van ciertos llamados, cuando no, etc. etc... como tiene que ir estructurada una sentencia para que funcione, eso me confunde bastante...
:-)
Avatar de Usuario
danielpuch
 
Mensajes: 71
Registrado: Mar Ene 11, 2011 10:40 pm
Ubicación: Elizabeth, New Jersey

Re: Sobre como esta ordenado pilas

Notapor pchack » Sab Ene 29, 2011 6:32 pm

Hola Hugo :D ,
Estuve leyendo el nuevo capítulo de la documentación "Cómo funciona pilas por dentro", y lo encontre muy bueno,
esta genial sobre todo porque te introduce a los conceptos centrales de pilas, y te aclara su funcionamineto.

Gracias por esta información y se me ocurre que podrias agregar información sobre el sistema de eventos, como funciona
internamente en pilas.

Saludos.
Pablo Garrido
pchack
 
Mensajes: 106
Registrado: Lun Dic 13, 2010 12:23 am

Re: Sobre como esta ordenado pilas

Notapor hugoruscitti » Sab Ene 29, 2011 7:55 pm

pchack escribió:Gracias por esta información y se me ocurre que podrias agregar información sobre el sistema de eventos, como funciona
internamente en pilas.


Listo, ya escribí sobre el sistema de eventos de pilas, es bastante, pero creo que me
quedó bien.

Está en la página 80:

http://bitbucket.org/hugoruscitti/pilas ... engine.pdf

Avisame ante cualquier duda...
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Sobre como esta ordenado pilas

Notapor Alzacon » Sab Ene 29, 2011 9:55 pm

hugoruscitti escribió:Saludos Alzacon, recién escribí el capítulo 27 de pilas, llamado "Cómo funciona pilas por dentro". Ahí
escribí varios detalles técnicos para comprender la estructura del motor:

http://bitbucket.org/hugoruscitti/pilas ... engine.pdf

Ten en cuenta uno de los primeros consejos que aparecen ahí, hay solo 3 componentes que son
indispensables para investigar, los demás puedes ir aprendiendolos de a poco, a medida que avanzas.

Posiblemente agregue un poco mas de texto a este capítulo mas adelante.

Gracias por el curro que te has dado, lo estoy mirando. Un cuanto lo de aprender poco a poco el resto, eso va a resultar un poco dificil, soy muy tozudo y me gusta entenderlo rápido. De hecho con la copia del repositorio estoy creandome mi versión para tontos, repleta de comentarios para entenderlo todo y que no se me olvide. Me va a costar entenderlo pero no cesare en mi empeño :mrgreen: , 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...)

hugoruscitti escribió:Para clasificar estamos usando clases, porque se las puede documentar, se pueden extender
con herencia y pueden encapsular distitas características.

Por ejemplo, si hago "actor.eliminar()" puede explotar (si es de la clase Bomba) o simplemente desaparecer
haciendo "puff!" si es de la clase "Globo". Esos comportamientos es bueno escribirlos en un solo lugar, y
no hacer preguntas de tipo "si es tipo == 1 entonces 'a', si es tipo == 2 entonces 'b'"... una característica
de orientación a objetos es que el mensaje proboca un comportamiento, y ese comportamiento
depende del receptor.
hugoruscitti escribió:m... parece interesante, pero creo que no tenemos tantos actores para ir clasificando, dejámelo pensar.

Te entiendo bien. Pero creo que no me termine de explicar. No me refiero a complicarlo todo como en el ejemplo con listas, sería más bien utilizar clases organizadas por funciones que pueden realizar. Agrupandolas como en el esquema que puse de mas general a más concreta, para no terminar teniendo un monton de clases diferentes que deriven de otras para poder realizar una función o acción. Las clases ya creadas, como Mono, se quedarían como estan porque creo que son muy buenas para aprender de como va pilas. Y cuando se tengan clases concretas donde se podría utilizar las listas, para evitar tener infinitas clases.
Alzacon
 
Mensajes: 19
Registrado: Jue Ene 27, 2011 8:35 pm

Re: Sobre como esta ordenado pilas

Notapor Juanxo » Dom Ene 30, 2011 3:37 am

buenas alzacon:

tu aproximación tiene ventajas si, pero para quién? Por lo que he visto, igual simplificaría el número de clases a desarrollar para los programadores, pero creo que dificultaría bastante el uso de la biblioteca que, no hay que olvidarlo, es el objetivo de Pilas, que se use xD.

Para mí como usuario, me sería más simple crearme una nueva clase Nave, que con que herede de Actor ya tengo mucho ganado... y sin ni siquiera haberme dado cuenta. El problema de lo que planteas es que la biblioteca pierde flexibilidad y extensibilidad, ya que hay que conocer que dentro del actor hay un diccionario x o una lista y, y que tipo 0 es para tal cosa, tipo 1 para otra, tipo 9993 para aquella. Quizás para nosotros que estamos más habituados esto no supusiera nada del otro mundo, pero para el que empieza lo veo negro...
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Sobre como esta ordenado pilas

Notapor Alzacon » Dom Ene 30, 2011 9:33 pm

Borro el post y me auto cito, para añadir algo
Alzacon escribió:
Juanxo escribió:buenas alzacon:

tu aproximación tiene ventajas si, pero para quién? Por lo que he visto, igual simplificaría el número de clases a desarrollar para los programadores, pero creo que dificultaría bastante el uso de la biblioteca que, no hay que olvidarlo, es el objetivo de Pilas, que se use xD.

Para mí como usuario, me sería más simple crearme una nueva clase Nave, que con que herede de Actor ya tengo mucho ganado... y sin ni siquiera haberme dado cuenta. El problema de lo que planteas es que la biblioteca pierde flexibilidad y extensibilidad, ya que hay que conocer que dentro del actor hay un diccionario x o una lista y, y que tipo 0 es para tal cosa, tipo 1 para otra, tipo 9993 para aquella. Quizás para nosotros que estamos más habituados esto no supusiera nada del otro mundo, pero para el que empieza lo veo negro...

Buenas Juanxo,

Creo que te refieres a los de las listas. Tienes razón que complica un poco a la hora de usarlo, pero crear miles de clases diferentes que se diferencian en una función, es un poco tonto (creo), porque también habría que que saber cual clase de todas es la que hace lo que queremos. Por eso proponía la idea de estructurarlas en forma de arbol.

Ahora veo que se me olvido, cosa frecuente en mi, responder al ejemplo de actores.eliminar() de hugo. En el caso de los ejemplos que me pones creo que tambien seria de globo y bomba. En la función eliminar podria aceptar un argumento para decir como se elimina. Por ejemplo en lugar de mi malos ejemplos tipo1, tipo2,... se podría utilizar dos argumentos muy sencillos usando listas ocultas para el usuario: comoBomba, comoGlobo. Se utilizarían de la siguiente forma actores.eliminar(comoGlobo).

Saludos ;)

He estado dando vueltas a lo del ultimo parrafo mio, y creo que ya sé como se podría seguir teniendo una función eliminar() que permitiera tener o no argumentos, y asi manter el estado de como funciona ahora y ser extendible. Pongo el esquema del código que he obtenido:

Código: Seleccionar todo
def f(*arg):
        if arg:
                "aqui añariamos la funcionalidades nuevas"
        else:
                "aqui iría el codigo de la función tal como esta"

Creo que funcionaría con todos los argumentos que se quieran.
Alzacon
 
Mensajes: 19
Registrado: Jue Ene 27, 2011 8:35 pm

Re: Sobre como esta ordenado pilas

Notapor Alzacon » Lun Feb 14, 2011 11:23 pm

Perdón por revivir el hilo.

No recuerdo si comente que me estaba comentando y reorganizando el código de pilas para que se me hiciese más entendible y me liase menos. Y para que no se quedase exclusivamente en mi pc pense en compartirlo, como ya hay un Pilas veo mal tener mi 'versión' (si se le puede llamar asi) también rondando por la red. Por eso le comente a Hugo si podía hacer un 'fork' para hacer mis anotaciones y retoques sin estropear la versión original, cosa que seguramente parasaría si tuviese permisos para trastear. Sería genial que resultase útil para gente como yo, los que no tenemos mucha idea de programar, y así entender mejor su funcionamiento. Si algo consigue ser utilizable para llevar a Pilas ya sería la leche. Espero en un futuro intentar ayudar con algún aporte.

El enlace al repositorio es --> https://bitbucket.org/Alzacon/pilas

Por ahora solo he hecho unos retoques en el __init__ principal, una pena que por mi torpeza borrase los archivos que ya tenía modificados.

Saludos
Alzacon
 
Mensajes: 19
Registrado: Jue Ene 27, 2011 8:35 pm


Volver a Consultas, problemas o bugs.

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado