http://www.losersjuegos.com.ar/foro/vie ... highlight=
http://www.losersjuegos.com.ar/foro/vie ... highlight=
Pues ahora estoy pasando este "minijuego" a POO para practicarla y asentar un poco los conocimientos que tengo, ponerle sonidos para ver que tal va y eso.
El caso es que tengo un meteorito rondando por la pantalla, que se supone que sera un obstáculo para la nave, y que si esta choca con el pues pierdes. El choque lo gestionaré con colliderect, que es más que suficiente para este programa. Lo de las colisiones está por hacer, aunque es un momento. Lo que ya tengo hehco es que el meteorito, cada vez que inicias el juego, aparezca en un lugar distinto y con una velocidad deistinta, pero le falta un detalle:
Que gire sobre si mismo. Ya había visto eeste efecto en el ejemplo de asteroids que hizo Hugo, pero es que no entendí nada de como hacerlo rotar.
¡Muchas gracias y les paso el código fuente que llevo!
- Código: Seleccionar todo
- import pygame
 from pygame.locals import *
 import os
 import random
 SCREEN_WIDTH = 640
 SCREEN_HEIGHT = 480
 DATOS_IMA = 'ima'
 def load_image(name, colorkey = False):
 """ Carga una imagen, devuelve una superficie y su rectángulo"""
 
 fullname = os.path.join(DATOS_IMA, name)
 
 try: image = pygame.image.load(fullname)
 except pygame.error, message:
 print 'No se ha podido cargar la imagen', fullname
 raise SystemExit, message
 
 image = image.convert()
 if colorkey:
 colorkey = image.get_at((0,0))
 image.set_colorkey(colorkey, RLEACCEL)
 return image, image.get_rect()
 
 class Nave(pygame.sprite.Sprite):
 """ Este objeto representa la nave que controla el jugador"""
 
 def __init__(self):
 pygame.sprite.Sprite.__init__(self)
 self.image, self.rect = load_image('nave.gif')
 self.rect.centerx = SCREEN_WIDTH / 2
 self.rect.centery = SCREEN_HEIGHT - 400
 self.speed = [0,0]
 
 def gravedad(self, gravedad):
 self.speed[1] = self.speed[1] + gravedad
 
 def mueve_nave(self):
 tecla = pygame.key.get_pressed()
 
 if tecla[K_UP]:
 self.speed[1] = self.speed[1] - 0.3
 
 if tecla[K_LEFT]:
 self.speed[0] = self.speed[0] - 0.3
 
 if tecla[K_RIGHT]:
 self.speed[0] = self.speed[0] + 0.3
 
 def update(self):
 if self.rect.top <1>= SCREEN_HEIGHT:
 self.rect.bottom = SCREEN_HEIGHT
 self.speed[1] = 0
 if self.rect.left <1>= SCREEN_WIDTH + self.rect.width + 1:
 self.rect.left = -self.rect.width
 self.rect.move_ip((self.speed[0], self.speed[1]))
 
 class Meteorito(pygame.sprite.Sprite):
 
 def __init__(self, rock):
 pygame.sprite.Sprite.__init__(self)
 self.image, self.rect = load_image(rock)
 self.rect.centerx = random.randrange(0, SCREEN_WIDTH)
 self.rect.centery = random.randrange(0, SCREEN_HEIGHT)
 self.speed = [random.randrange(1, 3), random.randrange(1, 3)]
 
 def update(self):
 if self.rect.top <1>= SCREEN_HEIGHT + self.rect.height + 1:
 self.rect.top = -self.rect.height
 if self.rect.left <1>= SCREEN_WIDTH + self.rect.width + 1:
 self.rect.left = -self.rect.width
 self.rect.move_ip((self.speed[0], self.speed[1]))
 
 # ----------------------------------------------------------------------
 
 def main():
 pygame.init()
 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
 pygame.display.set_caption('Aterriza la nave')
 icon, icon_rect = load_image('icon.gif')
 pygame.display.set_icon(icon)
 
 background, background_rect = load_image('background.jpg')
 screen.blit(background, (0,0))
 
 nave = Nave()
 meteorito1 = Meteorito('big_rock1.gif')
 todos_sprites = pygame.sprite.RenderPlain((nave, meteorito1))
 clock = pygame.time.Clock()
 
 while True:
 clock.tick(60)
 
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 raise SystemExit
 elif event.type == pygame.KEYDOWN:
 if event.key == K_ESCAPE:
 raise SystemExit
 
 meteorito1.update()
 nave.mueve_nave()
 nave.gravedad(0.1)
 nave.update()
 
 screen.blit(background, (0,0))
 todos_sprites.draw(screen)
 pygame.display.flip()
 
 if __name__ == '__main__': main()






