




class Monster(sprite.Sprite): def __init__(self, x, y, left, up, maxLengthLeft,maxLengthUp): 






 import tmxreader #   tmx  import helperspygame #  tmx     pygame  def loadLevel(name): global playerX, playerY #   ,    global total_level_height, total_level_width global sprite_layers #    world_map = tmxreader.TileMapParser().parse_decode('%s/%s.tmx' % (FILE_DIR, name)) #   resources = helperspygame.ResourceLoaderPygame() #    resources.load(world_map) #      pygame  sprite_layers = helperspygame.get_layers_from_map(resources) #     #     0 -  , 1-  , 2 -    # 3 -   , 4 -    platforms_layer = sprite_layers[1] dieBlocks_layer = sprite_layers[2] for row in range(0, platforms_layer.num_tiles_x): #     for col in range(0, platforms_layer.num_tiles_y): if platforms_layer.content2D[col][row] is not None: pf = Platform(row * PLATFORM_WIDTH, col * PLATFORM_WIDTH)#       Platform platforms.append(pf) if dieBlocks_layer.content2D[col][row] is not None: bd = BlockDie(row * PLATFORM_WIDTH, col * PLATFORM_WIDTH) platforms.append(bd) teleports_layer = sprite_layers[4] for teleport in teleports_layer.objects: try: #       goX = int(teleport.properties["goX"]) * PLATFORM_WIDTH goY = int (teleport.properties["goY"]) * PLATFORM_HEIGHT x = teleport.x y = teleport.y - PLATFORM_HEIGHT tp = BlockTeleport(x, y, goX, goY) entities.add(tp) platforms.append(tp) animatedEntities.add(tp) except: #    ,       print(u"   ") monsters_layer = sprite_layers[3] for monster in monsters_layer.objects: try: x = monster.x y = monster.y if monster.name == "Player": playerX = x playerY = y - PLATFORM_HEIGHT elif monster.name == "Princess": pr = Princess(x, y - PLATFORM_HEIGHT) platforms.append(pr) entities.add(pr) animatedEntities.add(pr) else: up = int(monster.properties["up"]) maxUp = int(monster.properties["maxUp"]) left = int(monster.properties["left"]) maxLeft = int(monster.properties["maxLeft"]) mn = Monster(x, y - PLATFORM_HEIGHT, left, up, maxLeft, maxUp) entities.add(mn) platforms.append(mn) monsters.add(mn) except: print(u"   ") total_level_width = platforms_layer.num_tiles_x * PLATFORM_WIDTH #     total_level_height = platforms_layer.num_tiles_y * PLATFORM_HEIGHT #   renderer = helperspygame.RendererPygame() #   for lvl in range(1,4): loadLevel("map_%s" % lvl)  for sprite_layer in sprite_layers: #    if not sprite_layer.is_object_group: #       renderer.render_layer(screen, sprite_layer) #   *** center_offset = camera.reverse(CENTER_OF_SCREEN) #      renderer.set_camera_position_and_size(center_offset[0], center_offset[1], \ WIN_WIDTH, WIN_HEIGHT, "center")  class Camera(object): def __init__(self, camera_func, width, height): self.camera_func = camera_func self.state = Rect(0, 0, width, height) def apply(self, target): return target.rect.move(self.state.topleft) def update(self, target): self.state = self.camera_func(self.state, target.rect) def reverse(self, pos):#      return pos[0] - self.state.left, pos[1] - self.state.top  def main(): pygame.init() #  PyGame,   screen = pygame.display.set_mode(DISPLAY) #   pygame.display.set_caption("Super Mario Boy") #    bg = Surface((WIN_WIDTH, WIN_HEIGHT)) #    #     renderer = helperspygame.RendererPygame() #  for lvl in range(1,4): loadLevel("levels/map_%s" % lvl) bg.fill(Color(BACKGROUND_COLOR)) #     left = right = False #   -  up = False running = False try: hero = Player(playerX, playerY) #    (x,y)  entities.add(hero) except: print (u"     ,   -") hero = Player(65, 65) entities.add(hero) timer = pygame.time.Clock() camera = Camera(camera_configure, total_level_width, total_level_height) while not hero.winner: #    timer.tick(60) for e in pygame.event.get(): #   if e.type == QUIT: raise SystemExit, "QUIT" if e.type == KEYDOWN and e.key == K_UP: up = True if e.type == KEYDOWN and e.key == K_LEFT: left = True if e.type == KEYDOWN and e.key == K_RIGHT: right = True if e.type == KEYDOWN and e.key == K_LSHIFT: running = True if e.type == KEYUP and e.key == K_UP: up = False if e.type == KEYUP and e.key == K_RIGHT: right = False if e.type == KEYUP and e.key == K_LEFT: left = False if e.type == KEYUP and e.key == K_LSHIFT: running = False for sprite_layer in sprite_layers: #    if not sprite_layer.is_object_group: #       renderer.render_layer(screen, sprite_layer) #   for e in entities: screen.blit(e.image, camera.apply(e)) animatedEntities.update() # a  monsters.update(platforms) #    camera.update(hero) #     center_offset = camera.reverse(CENTER_OF_SCREEN) renderer.set_camera_position_and_size(center_offset[0], center_offset[1], \ WIN_WIDTH, WIN_HEIGHT, "center") hero.update(left, right, up, running, platforms) #  pygame.display.update() #        screen.blit(bg, (0, 0)) #      for sprite_layer in sprite_layers: if not sprite_layer.is_object_group: renderer.render_layer(screen, sprite_layer) #    for e in entities: screen.blit(e.image, camera.apply(e)) #     font=pygame.font.Font(None,38) text=font.render(("Thank you MarioBoy! but our princess is in another level!"), 1,(255,255,255))#   screen.blit(text, (10,100)) pygame.display.update() time.wait(10000) #  10    -     Source: https://habr.com/ru/post/204112/
All Articles