from engine.resources import res from engine.scene import Scene from engine.entity import Entity from engine.components.sprite import Sprite from engine.components.collide_rect import CollideRect from engine.servers.graphics import GraphicsServer from pygame import Rect from pygame import image from pygame import Surface from pygame import draw from pygame.locals import * from pygame import key from itertools import product S=20 class Level(Entity): def __init__(self, path): super().__init__() desc = image.load(res(path)) w, h = desc.get_size() GraphicsServer().resize((w * S, h * S)) self.surf = Surface((w * S, h * S)).convert() self.surf.fill((0, 0, 0)) wall = Surface((S, S)).convert() wall.fill((0, 0, 255)) for x, y in product(range(w), range(h)): if desc.get_at((x, y)) == (0, 0, 255): self.add(CollideRect(Rect(x * S, y * S, S, S))) self.surf.blit(wall, (x * S, y * S)) self.add(Sprite(self.surf, 0)) class MovingEntity(Entity): def __init__(self, surf): super().__init__() sprite = Sprite(surf, 1) self.add(sprite) self.add(CollideRect(Rect(self.x, self.y, sprite.width, sprite.width))) class Ghost(MovingEntity): def update_ghost(): pass def __init__(self): super().__init__(image.load(res('ghost.png')).convert()) self.script = update_ghost() class Lvl0(Scene): def load(self): pac_surf = Surface((S, S)).convert() pac_surf.fill((0, 0, 0)) draw.circle(pac_surf, (255, 255, 0), (S//2, S//2), S//2) pacman = MovingEntity(pac_surf) def pacman_script(entity): inputs = key.get_pressed() if inputs[K_UP]: entity.y -= 2 if inputs[K_DOWN]: entity.y += 2 if inputs[K_LEFT]: entity.x -= 2 if inputs[K_RIGHT]: entity.x += 2 pacman.script = pacman_script self.entities.append(pacman) self.entities.append(Level('lvl0.png')) super().load() scene = Lvl0()