Ola! Continuando nosso pequeno joguinho, esta semana vamos fazer a tela de fundo um pouco mais interessante que apenas um fundo preto e opaco... Vamos adicionar estrelas, com movimento! Abaixo esta o codigo da classe "Background", que devemos salvar no arquivo "background.py". # coding: utf8# background.pyimport pygameimport randomclass Background(object): def __init__(self, max_stars=100): self.max_speed = 6 screen = pygame.display.get_surface() size = screen.get_size() back = pygame.Surface(size).convert() back.fill( (0,0,0) ) self.image = back self.stars = [] for _ in range(max_stars): rand = random.randint self.stars.append( [rand(0, size[0]), rand(0, size[1]), rand(1, self.max_speed)]) def update(self): size = pygame.display.get_surface().get_size() for star in self.stars: star[1] += star[2] if star[1] >= size[1]: star[1] = 0 star[0] = random.randint(0, size[0]) star[2] = random.randint(1, self.max_speed) def draw(self, screen): image = self.image image.fill( (0, 0, 0) ) for star in self.stars: image.set_at(star[:2], (255, 255, 255)) screen.blit(self.image, (0, 0)) Como voces podem ver, a classe e bem simples. Inicializamos a o objeto background com um numero maximo padrao de 100 estrelas, cada estrela ira se mover de cima para baixo na tela, dando a impressao que estamos percorrendo o espaco. Atribuimos tambem a velocidade maxima com que cada estrela podera se movimentar. Preenchemos a tela com o tradicional fundo preto, criamos uma "Surface" que sera onde iremos desenhar nossas estrelas e salvamos essa "Surface" na variavel "self.image". Agora a parte interessante. A criacao das estrelas. Para nosso exemplo, faremos da forma mais simples possivel: uma array com 3 numeros, representando a posicao da estrela e sua velocidade (x, y, velocidade). O metodo "update(self)" e onde ocorre a atualizacao do estado do nosso background. O que faremos aqui e simplesmente adicionar a velocidade (star[2]) a coordenada y da posicao (star[1]). Caso apos adicionarmos a velocidade a estrela suma, ou seja, sua cordenada y passe a ser maior que o tamanho da nossa tela na vertical, reposicionamos esta estrela, colocando-a no topo da tela, com novos valores para a coordenada x e para a velocidade. Note que para a velocidade sempre iremos desejar um valor >= 1, pois caso contrario teriamos uma estrela estatica. O metodo "draw(self)" e mais simples ainda. Preenchemos a nossa imagem com preto e entao percorremos a lista de estrelas, adicionando um ponto branco para cada uma delas em sua posicao atual. Apos isso chamamos "blit" na variavel "screen". O que esta funcao faz e copiar o conteudo de uma "Surface" para outra. Assim, ao copiarmos o fundo para a "Surface" screen, estaremos substituindo a imagem que sera mostrada na tela na proxima atualizacao. O que resta agora e apenas alterar a classe "Game" para utilizar o nosso background animado. Abaixo esta o codigo da classe com as devidas alteracoes: # coding: utf8# game.pyimport pygameimport randomfrom pygame.locals import *import backgroundclass Game(object): def __init__(self, size): pygame.init() flags = DOUBLEBUF self.screen = pygame.display.set_mode(size, flags) self.screen_size = self.screen.get_size() pygame.mouse.set_visible(False) pygame.display.set_caption('Meu Primeiro Jogo em Python') self.run = True self.list = { 'player': pygame.sprite.RenderPlain(), 'enemy': pygame.sprite.RenderPlain(), 'fire': pygame.sprite.RenderPlain(), 'enemy_fire': pygame.sprite.RenderPlain(), } self.player = None self.background = background.Background() def update_actors(self): if self.background is not None: self.background.update() for actor in self.list.values(): actor.update() def draw_actors(self): if self.background is not None: self.background.draw(self.screen)