Validate all level data before starting game. No more getting to level 10 before realizing there's an error in the json syntax. Notify players when the level is locked with a boss level message.
This commit is contained in:
		| @@ -40,7 +40,10 @@ class Level: | ||||
|         self.player.set_footstep_sound(self.footstepSound) | ||||
|  | ||||
|         # Level intro message | ||||
|         levelIntro = f"Level {levelData['level_id']}, {levelData['name']}. {levelData['description']}" | ||||
|         levelIntro = f"Level {levelData['level_id']}, {levelData['name']}. " | ||||
|         if self.isLocked: | ||||
|             levelIntro += "This is a boss level. You must defeat all enemies before you can advance. " | ||||
|         levelIntro += levelData['description'] | ||||
|         messagebox(levelIntro) | ||||
|  | ||||
|         # Handle level music | ||||
|   | ||||
| @@ -31,7 +31,7 @@ class Weapon: | ||||
|         return cls( | ||||
|             name="witch_broom", | ||||
|             damage=3, | ||||
|             range=2.5, | ||||
|             range=3, | ||||
|             attackSound="player_broom_attack", | ||||
|             hitSound="player_broom_hit", | ||||
|             cooldown=500, | ||||
|   | ||||
| @@ -60,6 +60,30 @@ class WickedQuest: | ||||
|         except FileNotFoundError: | ||||
|             return False | ||||
|  | ||||
|     def validate_levels(self): | ||||
|         """Check if level files have valid JSON.""" | ||||
|         errors = [] | ||||
|      | ||||
|         # Check levels from 1 until no more files are found | ||||
|         levelNumber = 1 | ||||
|         while True: | ||||
|             levelPath = get_level_path(self.currentGame, levelNumber) | ||||
|             if not os.path.exists(levelPath): | ||||
|                 break | ||||
|              | ||||
|             try: | ||||
|                 with open(levelPath, 'r') as f: | ||||
|                     # This will raise an exception if JSON is invalid | ||||
|                     json.load(f) | ||||
|             except json.JSONDecodeError as e: | ||||
|                 errors.append(f"Level {levelNumber}: Invalid JSON format - {str(e)}") | ||||
|             except Exception as e: | ||||
|                 errors.append(f"Level {levelNumber}: Error reading file - {str(e)}") | ||||
|              | ||||
|             levelNumber += 1 | ||||
|      | ||||
|         return errors | ||||
|  | ||||
|     def handle_input(self): | ||||
|         """Process keyboard input for player actions.""" | ||||
|         keys = pygame.key.get_pressed() | ||||
| @@ -305,6 +329,14 @@ class WickedQuest: | ||||
|                 exit_game() | ||||
|             elif choice == "play": | ||||
|                 self.currentGame = select_game(self.sounds) | ||||
|                 # Validate level files before starting | ||||
|                 errors = self.validate_levels() | ||||
|                 if errors: | ||||
|                     errorLines = ["Level files contain errors:"] | ||||
|                     errorLines.extend(errors) | ||||
|                     errorLines.append("\nPlease fix these errors before playing.") | ||||
|                     display_text(errorLines) | ||||
|                     continue | ||||
|                 if self.currentGame: | ||||
|                     self.player = None  # Reset player for new game | ||||
|                     self.gameStartTime = pygame.time.get_ticks() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user