Some minor cleanup.
This commit is contained in:
@@ -22,14 +22,14 @@ class WickedQuest:
|
||||
self.player = None
|
||||
self.currentGame = None
|
||||
self.runLock = False # Toggle behavior of the run keys
|
||||
|
||||
|
||||
def load_level(self, levelNumber):
|
||||
"""Load a level from its JSON file."""
|
||||
levelFile = get_level_path(self.currentGame, levelNumber)
|
||||
try:
|
||||
with open(levelFile, 'r') as f:
|
||||
levelData = json.load(f)
|
||||
|
||||
|
||||
# Create player if this is the first level
|
||||
if self.player is None:
|
||||
self.player = Player(levelData["player_start"]["x"],
|
||||
@@ -51,11 +51,11 @@ class WickedQuest:
|
||||
self.player.moveSpeed *= 2 # Restore normal speed
|
||||
if self.player.currentWeapon:
|
||||
self.player.currentWeapon.attackDuration *= 0.5 # Restore normal attack speed
|
||||
|
||||
|
||||
# Pass existing player to new level
|
||||
pygame.event.clear()
|
||||
self.currentLevel = Level(levelData, self.sounds, self.player)
|
||||
|
||||
|
||||
return True
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
@@ -63,14 +63,14 @@ class WickedQuest:
|
||||
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
|
||||
@@ -79,9 +79,9 @@ class WickedQuest:
|
||||
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):
|
||||
@@ -89,7 +89,7 @@ class WickedQuest:
|
||||
keys = pygame.key.get_pressed()
|
||||
player = self.currentLevel.player
|
||||
currentTime = pygame.time.get_ticks()
|
||||
|
||||
|
||||
# Update running and ducking states
|
||||
if (keys[pygame.K_s] or keys[pygame.K_DOWN]) and not player.isDucking:
|
||||
player.duck()
|
||||
@@ -106,7 +106,7 @@ class WickedQuest:
|
||||
|
||||
# Track movement distance for this frame
|
||||
movementDistance = 0
|
||||
|
||||
|
||||
# Horizontal movement
|
||||
if keys[pygame.K_a] or keys[pygame.K_LEFT]: # Left
|
||||
movementDistance = currentSpeed
|
||||
@@ -116,7 +116,7 @@ class WickedQuest:
|
||||
movementDistance = currentSpeed
|
||||
player.xPos += currentSpeed
|
||||
player.facingRight = True
|
||||
|
||||
|
||||
# Handle footsteps
|
||||
if movementDistance > 0 and not player.isJumping:
|
||||
player.distanceSinceLastStep += movementDistance
|
||||
@@ -147,13 +147,13 @@ class WickedQuest:
|
||||
# Handle attack with either CTRL key
|
||||
if (keys[pygame.K_LCTRL] or keys[pygame.K_RCTRL]) and player.start_attack(currentTime):
|
||||
play_sound(self.sounds[player.currentWeapon.attackSound])
|
||||
|
||||
|
||||
# Handle jumping
|
||||
if (keys[pygame.K_w] or keys[pygame.K_UP]) and not player.isJumping:
|
||||
player.isJumping = True
|
||||
player.jumpStartTime = currentTime
|
||||
play_sound(self.sounds['jump'])
|
||||
|
||||
|
||||
# Check if jump should end
|
||||
if player.isJumping and currentTime - player.jumpStartTime >= player.jumpDuration:
|
||||
player.isJumping = False
|
||||
@@ -167,12 +167,12 @@ class WickedQuest:
|
||||
# Convert time from milliseconds to minutes:seconds
|
||||
minutes = timeTaken // 60000
|
||||
seconds = (timeTaken % 60000) // 1000
|
||||
|
||||
|
||||
# Update time in stats
|
||||
self.currentLevel.player.stats.update_stat('Total time', timeTaken, levelOnly=True)
|
||||
|
||||
report = [f"Time taken: {minutes} minutes and {seconds} seconds"]
|
||||
|
||||
|
||||
# Add all level stats
|
||||
for key in self.currentLevel.player.stats.level:
|
||||
if key != 'Total time': # Skip time since we already displayed it
|
||||
@@ -195,10 +195,10 @@ class WickedQuest:
|
||||
"""Display game over screen with statistics."""
|
||||
minutes = timeTaken // 60000
|
||||
seconds = (timeTaken % 60000) // 1000
|
||||
|
||||
|
||||
report = ["Game Over!"]
|
||||
report.append(f"Time taken: {minutes} minutes and {seconds} seconds")
|
||||
|
||||
|
||||
# Add all total stats
|
||||
for key in self.currentLevel.player.stats.total:
|
||||
if key not in ['Total time', 'levelsCompleted']: # Skip these
|
||||
@@ -222,14 +222,14 @@ class WickedQuest:
|
||||
while True:
|
||||
currentTime = pygame.time.get_ticks()
|
||||
pygame.event.pump()
|
||||
|
||||
|
||||
# Game volume controls
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.KEYDOWN:
|
||||
# Check for Alt modifier
|
||||
mods = pygame.key.get_mods()
|
||||
altPressed = mods & pygame.KMOD_ALT
|
||||
|
||||
|
||||
if event.key == pygame.K_ESCAPE:
|
||||
try:
|
||||
pygame.mixer.music.stop()
|
||||
@@ -260,11 +260,11 @@ class WickedQuest:
|
||||
self.currentLevel.player.update(currentTime)
|
||||
self.handle_input()
|
||||
self.currentLevel.update_audio()
|
||||
|
||||
|
||||
# Handle combat and projectiles
|
||||
self.currentLevel.handle_combat(currentTime)
|
||||
self.currentLevel.handle_projectiles(currentTime)
|
||||
|
||||
|
||||
# Check for death first
|
||||
if self.currentLevel.player.get_health() <= 0:
|
||||
if self.currentLevel.player.get_lives() <= 0:
|
||||
@@ -307,7 +307,7 @@ class WickedQuest:
|
||||
|
||||
self.display_game_over(totalTime)
|
||||
return
|
||||
|
||||
|
||||
clock.tick(60) # 60 FPS
|
||||
|
||||
def run(self):
|
||||
@@ -345,7 +345,7 @@ class WickedQuest:
|
||||
for i, entry in enumerate(scores, 1):
|
||||
scoreStr = f"{i}. {entry['name']}: {entry['score']}"
|
||||
lines.append(scoreStr)
|
||||
|
||||
|
||||
pygame.event.clear()
|
||||
display_text(lines)
|
||||
elif choice == "learn_sounds":
|
||||
|
Reference in New Issue
Block a user