Pygame level changing help

This topic is 2178 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

Straight to the point: I need to send a value from a function in a class to the main function, and can't figure it out without confusing myself.

The game I'm making is a very simple platformer made using Pygame. Basically, you jump around on blocks, and get to an end block that will either end the level or change the level. The way my game creates the levels is by taking the letter P in a text document, and converting each of those into a block platform. The letter E is created into the end block.

(For a quick visual example of the game, youtube)

 for row in level: for col in row: if col == "P": p = Platform(x, y) platforms.append(p) entities.add(p) if col == "E": e = ExitBlock(x, y) platforms.append(e) entities.add(e) x += 32 y += 32 x = 0 

The above code is what takes the letters and converts them into block using a couple of functions. the 'level' on the first line is a list that is pulled from a text file using the read function. This way, the level can simply be changed by changing the file that is being read from:

 levelID = 1 if levelID == 1: file = "levels\level1.txt" if levelID == 2: file = "levels\level2.txt" if levelID == 3: file = "levels\editable.txt" f = open(file,"r") data = f.readlines() f.close() level = (data) 

My problem is, I want the LevelID to be incremented by 1 whenever the player gets to the end block. However, then collision between the player and the end block are down in a collision function in the Player class:

 for p in platforms: if sprite.collide_rect(self, p): if isinstance(p, ExitBlock): pass 

I've currently set it to pass, as this just enables me to run the code.

How could I create a way that will enable the collision between the player and the end block increment the LevelID?

I hope this post makes sense, and that I've provided the right information.

I've posted the full code here if you want to have a look.

Thanks!