Pygame class

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Pygame class

Notapor J_K » Dom Jun 03, 2012 10:01 am

Hola mi duda es sobre las clases de python, si quiero definir una clase Edificio, me dan una imagenplanta que es una imagen de una sola planta (una pared de ladrillos por ejemplo), me dan una posicion donde tengo que pegar el area del piso dentro de una area grafica, nplantas las plantas que hay.

class Edifici(pygame.sprite.Sprite):
def __init__(self, nPlantas, posicion, imagenPlanta):
self.rect
self.image
self.nplantas

el self.rect son las coordenadas (x0,y0,x1,y1) posicion y grandaria del area del piso. self.nplantas las plantas que hay y self.image es una imagen final que es el resultado de pegar nplanta veces la imagenplanta son una separacion de 1 pixel entre plantas de forma vertical y que ocupa el area del piso.

Mi pregunta es como hago lo de self.image solo con el init ? yo lo he hecho creando otra funcion:

class Edifici(pygame.sprite.Sprite):

def __init__(self, nPlantes=0, posicio=0, imatgePlanta=0):

self.rect = (posicio[0],posicio[1],imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[3]*nPlantes + nPlantes)
self.nPlantes = nPlantes
self.image = pygame.Surface((self.rect[2],self.rect[3]))

def edifici(self, nPlantes, posicio, imatgePlanta):
i=0
while i < nPlantes:
self.image.blit(imatgePlanta,(posicio[0],posicio[1]+imatgePlanta.get_rect()[3]*i+i,imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[2]))
i+=1
J_K
 
Mensajes: 3
Registrado: Dom Jun 03, 2012 9:37 am

Re: Pygame class

Notapor Barajas » Lun Jun 04, 2012 2:40 am

Primero, creo que es bueno que le des una leída a esto: http://mundogeek.net/archivos/2008/03/05/python-orientacion-a-objetos/ :)

Además, tienes un gran numero de "cosas feas", nada malo, solo que van contra la "elegancia del lenguaje".

Ahora, es solo acomodarlo todo, tienes dos opciones, si necesitas la función mas allá del init, puedes conservarla y mandarla llamar...

class Edifici(pygame.sprite.Sprite):
#definir un valores como cero, cuando en realidad no son enteros, si no, otro tipo de valores, es... feo
# es mejor ponerles un null o un objeto vació....
def __init__(self, nPlantes=0, posicio=0, imatgePlanta=0):
self.rect = (posicio[0],posicio[1],imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[3]*nPlantes + nPlantes)
self.nPlantes = nPlantes
self.image = pygame.Surface((self.rect[2],self.rect[3]))
self.edifici(nPlantes,posicio,imatgePlanta) #aquí llamo a la función interna dentro del main...
def edifici(self, nPlantes, posicio, imatgePlanta):
i=0
while i < nPlantes:
self.image.blit(imatgePlanta,(posicio[0],posicio[1]+imatgePlanta.get_rect()[3]*i+i,imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[2]))
i+=1


O, si solo la utilizaras en el init, puedes ahorrarte el def....

class Edifici(pygame.sprite.Sprite):
#definir un valores como cero, cuando en realidad no son enteros, si no, otro tipo de valores, es... feo
# es mejor ponerles un null o un objeto vació....
def __init__(self, nPlantes=0, posicio=0, imatgePlanta=0):
self.rect = (posicio[0],posicio[1],imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[3]*nPlantes + nPlantes)
self.nPlantes = nPlantes
self.image = pygame.Surface((self.rect[2],self.rect[3]))
#nota que se ha eliminado la función y se ejecuta cuando se inicia....
i=0
while i < nPlantes:
self.image.blit(imatgePlanta,(posicio[0],posicio[1]+imatgePlanta.get_rect()[3]*i+i,imatgePlanta.get_rect()[2],imatgePlanta.get_rect()[2]))
i+=1


Espero que te sirva....
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Pygame class

Notapor J_K » Vie Jun 08, 2012 2:04 pm

Al final lo he sacado y me ha quedado algo parecido al tuyo. Pero muchas gracias por responder teniendo en cuenta lo mal que he explicado el problema :wink: Que grande soys. Este verano me pasaré bastante por el foro, que quiero aprender a programar por android con python. :D
J_K
 
Mensajes: 3
Registrado: Dom Jun 03, 2012 9:37 am


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron