class PandaView: def __init__(self, image, width, height): self.__width = width self.__height = height self.__image = image self.__panda_sprite = AnimatedSprite(self.__slice_sprite(), 4) def get_image(self, time): self.__panda_sprite.update(time) return self.__panda_sprite.image def change_state(self, image): self.__image = image self.__panda_sprite.change_images(self.__slice_sprite()) def __slice_sprite(self): images = [] master_width, master_height = self.__image.get_size() for i in range(int(master_width/self.__width)): image = self.__image.subsurface((i*self.__width, 0, self.__width, self.__height)) images.append(image) return images
class Game: def __init__(self, size): pygame.init() pygame.key.set_repeat(200, 5) self.screen = pygame.display.set_mode(size) guy_image = pygame.image.load("data/images/guy.png") guy_image = guy_image.convert() self.guy = AnimatedSprite([0, 0], guy_image, 3, 4, 10) self.guy_idle = self.guy.create_animation([0, 1, 2, 3, 3, 2, 1, 0]) self.guy_waving = self.guy.create_animation([7, 8, 9, 10, 11, 11, 10, 9, 8, 7]) self.guy.set_animation(self.guy_idle) world_image = pygame.image.load("data/images/world.png") world_image = world_image.convert() self.world = World([200, 200], world_image) self.running = True def main_loop(self): while self.running: for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False elif event.type == pygame.KEYDOWN: self.key_handler(event.key) if distance(self.guy, self.world) < 140: if self.guy.animation != self.guy_waving: self.guy.set_animation(self.guy_waving) else: if self.guy.animation != self.guy_idle: self.guy.set_animation(self.guy_idle) self.guy.update() self.screen.blit(self.world.image, self.world.rect) self.screen.blit(self.guy.image, self.guy.rect) pygame.display.flip() def key_handler(self, key): if (key == pygame.K_DOWN or key == pygame.K_UP or key == pygame.K_LEFT or key == pygame.K_RIGHT): self.world.move(key) self.screen.fill((0, 0, 0))