class Tab(object): path_to_tabs = '../resrc/tabs/' def __init__(self, wrapper, background_image_path=None): self.path_to_images = Tab.path_to_tabs + ( self.__class__.__name__.lower() if self.__class__ != Tab else '') + '/' if background_image_path is None: background_image_path = self.path_to_images + 'background.gif' self.wrapper = wrapper self.background = Drawable(background_image_path) self.objects = [] def add_drawable(self, obj): # type: (Drawable) -> None obj.set_position(obj.position + obj.get_size() // 2) self.objects.append(obj) def start(self): pass def get_size(self): # type: () -> Vector return self.background.get_size() def update(self): for obj in self.objects: obj.update() def draw(self): self.background.draw() for obj in self.objects: obj.draw()
class World: def __init__(self, robot): self.rects = [] self.mask = [] self.robot = robot self.block1 = None self.ground = None self.__create_rects() self.__create_items() @property def distance(self): d = int(self.block1.position.x - self.robot.position.x) if not self.robot.isJumping and 0 < d and d < 96: self.robot.jump() return d def __create_rects(self): x = self.robot.position.center[0] for idx in range(0, 23): rect = Rect((x + 10 * idx, 0), (10, 10)) rect.bottom = RULER self.rects.append(rect) self.mask = np.zeros(len(self.rects), np.uint8) def __create_items(self): self.ground = Drawable('ground.png', WORLD) self.ground.position.bottom = HEIGHT self.block1 = Drawable('block1.png', WORLD) self.block1.position.x = WIDTH + 10 self.block1.position.bottom = RULER def draw(self, screen): self.ground.draw(screen) self.ground.scroll(0, WIDTH) self.block1.draw(screen) self.block1.scroll(WIDTH + 10, -10) for idx in range(0, len(self.rects)): rect = self.rects[idx] rect.right = self.robot.position.center[0] + 10 * idx if rect.colliderect(self.block1.rect): self.mask[idx] = 1 screen.fill(RED, rect) else: self.mask[idx] = 0 screen.fill(BLUE, rect)