78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
|
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()
|