Skip to content

Commit a26822c

Browse files
authored
Update main.py
1 parent 5e30d33 commit a26822c

File tree

1 file changed

+134
-41
lines changed

1 file changed

+134
-41
lines changed

Shadow-Labyrinth/main.py

Lines changed: 134 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,142 @@
11
import pygame
2-
import menu
3-
import game_modes
4-
from utils import load_game, save_game
5-
import os
2+
import sys
3+
from player import Player
4+
from enemy import SoundEnemy, LightEnemy, PatrolEnemy
5+
from maze import generate_maze
6+
from lighting import draw_lighting
7+
from items import Item
8+
from hud import draw_hud
9+
from utils import draw_text, LEVELS
610

11+
# Initialization
712
pygame.init()
8-
pygame.mixer.init()
913

14+
# Constants
15+
SCREEN_WIDTH = 800
16+
SCREEN_HEIGHT = 600
17+
TILE_SIZE = 40
18+
FPS = 60
19+
MAX_LEVEL = 5
20+
21+
# Colors
22+
BLACK = (0, 0, 0)
23+
WHITE = (255, 255, 255)
24+
25+
# Screen
26+
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
27+
pygame.display.set_caption("Shadow Labyrinth")
28+
29+
# Main game function
1030
def main():
11-
high_score, championship_standings, settings = load_game()
12-
flags = pygame.FULLSCREEN if settings["fullscreen"] else 0
13-
screen = pygame.display.set_mode(settings["resolution"], flags)
14-
pygame.display.set_caption("F1 Manager & Racer")
15-
font = pygame.font.SysFont("arial", 36)
16-
if os.path.exists("music.mp3"):
17-
pygame.mixer.music.load("music.mp3")
18-
pygame.mixer.music.set_volume(settings["music_volume"])
19-
pygame.mixer.music.play(-1)
20-
21-
while True:
22-
choice, settings = menu.main_menu(screen, font, settings, high_score)
23-
flags = pygame.FULLSCREEN if settings["fullscreen"] else 0
24-
screen = pygame.display.set_mode(settings["resolution"], flags)
25-
if choice == "race_setup":
26-
track_name, num_opponents, max_laps, car_type, tire_type, settings = menu.race_setup_menu(screen, font, settings)
27-
if track_name:
28-
high_score = game_modes.race_mode(screen, track_name, num_opponents, max_laps, car_type, tire_type, settings, high_score)
29-
save_game(high_score, championship_standings, settings)
30-
elif choice == "championship":
31-
result = game_modes.championship_mode(screen, font, settings, championship_standings)
32-
if result:
33-
high_score, championship_standings = result
34-
save_game(high_score, championship_standings, settings)
35-
elif choice == "practice":
36-
track_name, duration, car_type, tire_type, settings = menu.practice_setup_menu(screen, font, settings)
37-
if track_name:
38-
game_modes.practice_mode(screen, track_name, duration, car_type, tire_type, settings)
39-
elif choice == "time_attack":
40-
track_name, car_type, tire_type, settings = menu.time_attack_setup_menu(screen, font, settings)
41-
if track_name:
42-
high_score = game_modes.race_mode(screen, track_name, 0, None, car_type, tire_type, settings, high_score)
43-
save_game(high_score, championship_standings, settings)
44-
elif choice == "settings":
45-
settings = menu.settings_menu(screen, font, settings)
46-
save_game(high_score, championship_standings, settings)
31+
clock = pygame.time.Clock()
32+
current_level = 1
33+
score = 0
34+
paused = False
35+
36+
while current_level <= MAX_LEVEL:
37+
maze_width, maze_height = LEVELS[current_level - 1]
38+
walls = generate_maze(maze_width, maze_height)
39+
player = Player(TILE_SIZE * 2, TILE_SIZE * 2)
40+
enemies = pygame.sprite.Group()
41+
num_sound = current_level * 2
42+
num_light = current_level
43+
num_patrol = current_level
44+
for _ in range(num_sound):
45+
enemies.add(SoundEnemy(walls))
46+
for _ in range(num_light):
47+
enemies.add(LightEnemy(walls))
48+
for _ in range(num_patrol):
49+
enemies.add(PatrolEnemy(walls))
50+
51+
items = pygame.sprite.Group()
52+
for _ in range(10 + current_level * 2):
53+
items.add(Item('battery', walls))
54+
for _ in range(5 + current_level):
55+
items.add(Item('torch', walls))
56+
for _ in range(3 + current_level):
57+
items.add(Item('health', walls))
58+
for _ in range(2 + current_level):
59+
items.add(Item('speed', walls))
60+
61+
# Exit position
62+
exit_rect = pygame.Rect((maze_width - 2) * TILE_SIZE, (maze_height - 2) * TILE_SIZE, TILE_SIZE, TILE_SIZE)
63+
64+
running = True
65+
while running:
66+
for event in pygame.event.get():
67+
if event.type == pygame.QUIT:
68+
running = False
69+
sys.exit()
70+
if event.type == pygame.KEYDOWN:
71+
if event.key == pygame.K_p:
72+
paused = not paused
73+
74+
if paused:
75+
draw_text(screen, "Paused", (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2), WHITE, 50)
76+
pygame.display.flip()
77+
clock.tick(10)
78+
continue
79+
80+
# Player update
81+
player.update(walls, items)
82+
83+
# Collect items
84+
collected = pygame.sprite.spritecollide(player, items, True)
85+
for item in collected:
86+
score += player.collect_item(item)
87+
88+
# Enemies update
89+
sound_pos = player.get_sound_position() if player.moving else None
90+
light_positions = player.get_light_positions()
91+
for enemy in enemies:
92+
enemy.update(player, walls, sound_pos, light_positions)
93+
94+
# Enemy collisions
95+
collided_enemies = pygame.sprite.spritecollide(player, enemies, False)
96+
for enemy in collided_enemies:
97+
player.take_damage(enemy.damage)
98+
if player.health <= 0:
99+
draw_text(screen, "Game Over! Score: " + str(score), (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2), WHITE, 40)
100+
pygame.display.flip()
101+
pygame.time.wait(3000)
102+
running = False
103+
sys.exit()
104+
105+
# Check exit
106+
if player.rect.colliderect(exit_rect):
107+
score += 100 * current_level
108+
current_level += 1
109+
if current_level > MAX_LEVEL:
110+
draw_text(screen, "Victory! Total Score: " + str(score), (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2), WHITE, 40)
111+
pygame.display.flip()
112+
pygame.time.wait(3000)
113+
running = False
114+
sys.exit()
115+
else:
116+
draw_text(screen, "Level Complete! Score: " + str(score), (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2), WHITE, 40)
117+
pygame.display.flip()
118+
pygame.time.wait(2000)
119+
break
120+
121+
# Drawing
122+
screen.fill(BLACK)
123+
walls.draw(screen)
124+
items.draw(screen)
125+
enemies.draw(screen)
126+
screen.blit(player.image, player.rect)
127+
pygame.draw.rect(screen, (0, 255, 0), exit_rect)
128+
129+
# Lighting
130+
draw_lighting(screen, player, walls, enemies, items, light_positions)
131+
132+
# HUD
133+
draw_hud(screen, player, score, current_level)
134+
135+
pygame.display.flip()
136+
clock.tick(FPS)
137+
138+
pygame.quit()
139+
sys.exit()
47140

48141
if __name__ == "__main__":
49142
main()

0 commit comments

Comments
 (0)