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.phys = CollideRect(Rect(self.x, self.y, sprite.width, sprite.width), static=False) self.add(self.phys) 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): T = 2 v = 2 pac_surf = Surface((S//T, S//T)).convert() pac_surf.fill((0, 0, 0)) draw.circle(pac_surf, (255, 255, 0), (S//(2*T), S//(2*T)), S//(2*T)) pacman = MovingEntity(pac_surf) def pacman_script(entity): p = pacman.phys inputs = key.get_pressed() if inputs[K_UP]: # entity.y -= 2 p.vy = -v if inputs[K_DOWN]: # entity.y += 2 p.vy = v if inputs[K_LEFT]: # entity.x -= 2 p.vx = -v if inputs[K_RIGHT]: # entity.x += 2 p.vx = v pacman.script = pacman_script pacman.x = pacman.phys.rect.x = S*15 pacman.y = pacman.phys.rect.y = S*15 pacman.phys.rect.w = S//T pacman.phys.rect.h = S//T self.entities.append(pacman) self.entities.append(Level('lvl0.png')) super().load() scene = Lvl0()