Created
April 18, 2022 14:48
-
-
Save mirwox/ea60978a3fe60e180d8a7a2258f589c5 to your computer and use it in GitHub Desktop.
Reescrita do jogo com a classe Meteoro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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