Skip to content

Instantly share code, notes, and snippets.

@mirwox
Created April 18, 2022 14:48
Show Gist options
  • Save mirwox/ea60978a3fe60e180d8a7a2258f589c5 to your computer and use it in GitHub Desktop.
Save mirwox/ea60978a3fe60e180d8a7a2258f589c5 to your computer and use it in GitHub Desktop.
Reescrita do jogo com a classe Meteoro
import pygame
from random import randint, choice
WIDTH = 640
HEIGHT = 480
# Meteoro
# Criar
# Atualiza estado
# Desenhar
class Meteoro:
def __init__(self, x, y, vel):
self.vel = vel
self.x = x
self.y = y
def atualiza_estado(self, delta_t):
self.y = self.y + self.vel*(delta_t/1000)
if self.y > HEIGHT:
self.x = (randint(0, WIDTH-44))
self.y = -100
def desenha(self, window):
window.blit(assets['meteoro'], (self.x, self.y))
class Horizontoro:
def __init__(self, x, y, vel):
self.vel = 20
self.x = 0
self.y = 100
def atualiza_estado(self, delta_t):
self.x = self.x + self.vel*(delta_t/1000)
if self.x > WIDTH:
self.x = 0
def desenha(self, window):
window.blit(assets['meteoro'], (self.x, self.y))
def inicializa():
pygame.init()
w = pygame.display.set_mode((640, 480))
pygame.key.set_repeat(50)
assets = {
'player': pygame.image.load('player.png'),
'meteoro': pygame.image.load('meteorSmall.png'),
}
#44X42
state = {
'nave_x':640/2 - (99/2),
'nave_y': 480 - 75,
'last_updated': 0,
'meteors': [Meteoro(randint(0, WIDTH-44), -100, choice(range(100, 300, 50))), # x, y, vel
Meteoro(randint(0, WIDTH-44), -130, choice(range(100, 300, 50))),
Meteoro(randint(0, WIDTH-44), -160, choice(range(100, 300, 50))),
Meteoro(randint(0, WIDTH-44), -190, choice(range(100, 300, 50))),
Meteoro(randint(0, WIDTH-44), -210, choice(range(100, 300, 50))),
Horizontoro(0, 100, 30)
],
}
return w, assets, state
def finaliza():
pygame.quit()
def desenha(window: pygame.Surface, assets, state):
window.fill((0,0,0))
window.blit(assets['player'], (state['nave_x'], state['nave_y']))
for meteor in state['meteors']:
meteor.desenha(window)
pygame.display.update()
def atualiza_posicao_meteoros(state, delta_t):
for m in state['meteors']:
m.atualiza_estado(delta_t)
def recebe_eventos(state):
now = pygame.time.get_ticks()
delta_t = now - state["last_updated"]
for ev in pygame.event.get():
if ev.type == pygame.QUIT:
return False
elif ev.type == pygame.KEYDOWN:
if ev.key == pygame.K_LEFT:
state['nave_x']-=8
elif ev.key == pygame.K_RIGHT:
state['nave_x']+=8
state['last_updated'] = now
atualiza_posicao_meteoros(state, delta_t)
return True
def gameloop(window, assets, state):
while recebe_eventos(state):
desenha(window, assets, state)
if __name__ == '__main__':
window, assets, state = inicializa()
gameloop(window, assets, state)
finaliza()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment