首页 > 解决方案 > 如何让玩家在pygame中进入下一个级别

问题描述

当我的玩家到达地图的尽头时,我希望它进入下一个级别。我已经创建了第一级,一切正常。我想要做的是,当玩家完成第一级时,我想加载另一张可以向前移动的地图。但我不明白该怎么做。这是我的一段代码

def runGame(theGame):

    theGame.clock.tick(FPS)

    # This function consists code for Events
    theGame.events()
    # This function consists code from enemy hit events
    theGame.hit_or_not()
    # This function consists code for player movements
    theGame.movements()
    # This function consists code for drawing the sprites over the screen
    theGame.redrawGameWindow()


def readyGame(run, gameOver):
    game = Game()

    while run:
        runGame(game)

        keys = pygame.key.get_pressed()

        if keys[pygame.K_x]:
            game = Game()
        elif keys[pygame.K_ESCAPE]:
            run = False
        pygame.event.pump()

        if gameOver:
            runGame(game)


readyGame(True, False)

这是我的第一级代码:https ://pastebin.com/yRb8T6ku (游戏类)

我是否必须像第一级一样为第二级创建另一个课程?

标签: pythonpygame

解决方案


首先,一些与您的具体问题无关的建议:不要使用敌人 = ...,敌人2 = ...,敌人3 = ...等等。使用列表

self.enemies = [
  enemy(),
  enemy(),
  enemy()
]

平台和硬币的方式相同,当您可以将大多数方法更改为循环时:

    def hit_or_not(self):
        # Checking Collision of Enemy and Hero
        for enemy in self.enemies:
            self.enemyCollide(self.hero, enemy)

那么,我们来看看什么是水平。我认为是英雄、敌人、平台和硬币,所以声明

LEVELS = [
  {  # level1
    'enemies': [ 
      enemy(...),  # move here from your Game.__init__
      enemy(...),
      ....
    ],
    'platforms': [
      Platform(...),
      ...
    ]
    'coins': [
      Coins(...),
      ...
    'hero': thePlayer(...)
    ]
  }
  {  # level2
    ...
  }
  ...
] 

然后你可以切换到这样的水平:

# in the Game class
def switchLevel(self, levelno):
   self.hero = LEVELS[levelno]['hero']
   self.enemies = LEVELS[levelno]['enemies']
   self.platforms = LEVELS[levelno]['platforms']
   self.coins = LEVELS[levelno]['coins']

因此,当您决定切换级别时,请执行

game.switchLevel(...)
game.redrawGameWindow()

推荐阅读