45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from itertools import product
|
|
|
|
from pygame import Surface, Rect, image
|
|
|
|
from engine.entity import Entity
|
|
from engine.resources import res
|
|
from engine.servers.graphics import GraphicsServer
|
|
from engine.components.collide_rect import CollideRect
|
|
from engine.components.sprite import Sprite
|
|
|
|
from .common import S
|
|
from .pacdot import PacDot, EnsmallmentDot
|
|
|
|
|
|
class Level(Entity):
|
|
def __init__(self, path):
|
|
super().__init__('level')
|
|
self.path = path
|
|
|
|
def load(self):
|
|
desc = image.load(res(self.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)):
|
|
col = desc.get_at((x, y))
|
|
if col == (0, 0, 255):
|
|
self.add(CollideRect(Rect(x * S, y * S, S, S)))
|
|
self.surf.blit(wall, (x * S, y * S))
|
|
elif col == (139, 139, 139):
|
|
pc = PacDot()
|
|
pc.x = x * S
|
|
pc.y = y * S
|
|
self.scene.add(pc)
|
|
PacDot.tot += 1
|
|
elif col == (193, 193, 193):
|
|
pc = EnsmallmentDot()
|
|
pc.x = x * S
|
|
pc.y = y * S
|
|
self.scene.add(pc)
|
|
self.add(Sprite(self.surf, 0))
|