[英]I'm trying to make a platforming game with levels which appear after completion of the previous
Im using pygame and attempting to make a parkour/platforming game and I want the player to be able to move onto levels by reaching a certain coordinate.我正在使用 pygame 并尝试制作跑酷/平台游戏,我希望玩家能够通过达到某个坐标进入关卡。 In my code I have three levels available but if I die it automatically moves me to the next.
在我的代码中,我提供了三个级别,但如果我死了,它会自动将我移至下一个级别。 How can I only let the player move into the next level once they have actually completed it rather than dying?
我怎样才能让玩家在真正完成后才进入下一个关卡而不是死掉?
class Game:
def __init__(self):
pg.init()
self.screen = pg.display.set_mode((width, height))
pg.display.set_caption("Final")
self.clock = pg.time.Clock()
self.running = True
def new_game(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(200, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(800, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
if self.player.rect.x >= 1300:
'''
self.playing = True
self.screen.fill(red)
'''
def new_lvl(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(300, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(800, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
def lvl_3(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(300, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(900, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
def run(self):
self.playing = True
while self.playing:
self.clock.tick(fps)
self.events()
self.update_game()
self.draw()
def update_game(self):
self.all_characters.update()
collide = pg.sprite.spritecollide(self.player, self.obstacles, False)
if collide:
self.player.center = collide[0].rect.top
print("You died")
self.playing = False
'''
if self.player.rect.x >= 1300:
self.playing = False
self.screen.fill(red)
'''
def events(self):
for event in pg.event.get():
if event.type == pg.QUIT:
if self.playing:
self.playing = False
self.running = False
def draw(self):
self.screen.fill(black)
self.all_characters.draw(self.screen)
pg.display.flip()
g = Game()
while g.running:
g.new_game()
g.new_lvl()
g.lvl_3()
class Game:
def __init__(self):
pg.init()
self.screen = pg.display.set_mode((width, height))
pg.display.set_caption("Final")
self.clock = pg.time.Clock()
self.running = True
def new_game(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(200, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(800, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
if self.player.rect.x >= 1300:
'''
self.playing = True
self.screen.fill(red)
'''
def new_lvl(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(300, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(800, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
def lvl_3(self):
self.all_characters = pg.sprite.Group()
self.obstacles = pg.sprite.Group()
self.player = Player()
self.grounds = pg.sprite.Group()
self.all_characters.add(self.player)
gr = Ground(0, height - 200, width, 40)
self.all_characters.add(gr)
self.obstacles.add(gr)
ob1 = Obstacle(300, 370, 40, 30)
self.all_characters.add(ob1)
self.obstacles.add(ob1)
ob2 = Obstacle(350, 370, 40, 30)
self.all_characters.add(ob2)
self.obstacles.add(ob2)
ob3 = Obstacle(500, 399, 170, 20)
self.all_characters.add(ob3)
self.obstacles.add(ob3)
ob4 = Obstacle(900, 370, 40, 30)
self.all_characters.add(ob4)
self.obstacles.add(ob4)
ob5 = Obstacle(950, 370, 40, 30)
self.all_characters.add(ob5)
self.obstacles.add(ob5)
ob6 = Obstacle(1100, 399, 170, 20)
self.all_characters.add(ob6)
self.obstacles.add(ob6)
self.run()
def run(self):
self.playing = True
while self.playing:
self.clock.tick(fps)
self.events()
self.update_game()
self.draw()
def update_game(self):
self.all_characters.update()
collide = pg.sprite.spritecollide(self.player, self.obstacles, False)
if collide:
self.player.center = collide[0].rect.top
print("You died")
self.playing = False
'''
if self.player.rect.x >= 1300:
self.playing = False
self.screen.fill(red)
'''
def events(self):
for event in pg.event.get():
if event.type == pg.QUIT:
if self.playing:
self.playing = False
self.running = False
def draw(self):
self.screen.fill(black)
self.all_characters.draw(self.screen)
pg.display.flip()
g = Game()
while g.running:
g.new_game()
g.new_lvl()
g.lvl_3()
Just have the:只要有:
g.new_game()
g.new_lvl()
g.lvl_3()
methods return True or False depending on whether the player completed or died.方法返回 True 或 False 取决于玩家是完成还是死亡。 Loop each until they complete it.
循环每个,直到他们完成它。 Something like this:
像这样的东西:
completed = False
while not completed:
completed = g.new_game()
completed = False
while not completed:
completed = g.new_lvl()
completed = False
while not completed:
completed = g.lvl_3()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.