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