1+ from color import Color
2+ from player import BasePlayer , Enemy
3+ import random
4+ import pygame
5+
6+ class Screen :
7+ def __init__ (self , width = 800 , height = 600 , background_color = Color .BLACK , font_type = "monospace" , font_size = 35 , clock_tick = 30 ):
8+ self .width = width
9+ self .height = height
10+ self .background_color = background_color
11+ self .screen = pygame .display .set_mode ((width , height ))
12+ self .font = pygame .font .SysFont (font_type , font_size )
13+ self .clock = pygame .time .Clock ()
14+ self .clock_tick = clock_tick
15+
16+ def refresh_background (self ):
17+ self .screen .fill (self .background_color )
18+
19+ def draw_score_label (self , score , color = Color .YELLOW ):
20+ text = f"Score: { score } "
21+ label = self .font .render (text , 1 , color )
22+ self .screen .blit (label , (self .width - 200 , self .height - 40 ))
23+
24+ def draw_enemies (self , enemy_list ):
25+ for enemy in enemy_list :
26+ enemy .draw (self .screen )
27+
28+ def draw_player (self , player ):
29+ player .draw (self .screen )
30+
31+ def update_screen (self , enemy_list , player , score ):
32+ self .refresh_background ()
33+ self .draw_enemies (enemy_list )
34+ self .draw_player (player )
35+ self .draw_score_label (score )
36+
37+ self .clock .tick (self .clock_tick )
38+ pygame .display .update ()
39+
40+ class Game :
41+ def __init__ (self , speed = 10 , score = 0 , max_enemies = 10 , delay = 0.1 ):
42+ self .speed = speed
43+ self .score = score
44+ self .max_enemies = max_enemies
45+ self .delay = delay
46+
47+ self .enemy_list = []
48+
49+ def set_level (self ):
50+ if self .score < 20 :
51+ self .speed = 5
52+ elif self .score < 40 :
53+ self .speed = 8
54+ elif self .score < 60 :
55+ self .speed = 12
56+ else :
57+ self .speed = 15
58+
59+ def drop_enemies (self , screen_width ):
60+ delay = random .random ()
61+ if len (self .enemy_list ) < self .max_enemies and delay < self .delay :
62+ random_x = random .randint (0 , screen_width - Enemy .size )
63+ new_enemy = Enemy (random_x , 0 )
64+ self .enemy_list .append (new_enemy )
65+
66+ def update_enemy_positions (self , screen_height ):
67+ updated_enemy_list = []
68+ for enemy in self .enemy_list :
69+ if enemy .y >= 0 and enemy .y < screen_height :
70+ enemy .y += self .speed
71+ updated_enemy_list .append (enemy )
72+ else : # Enemy is no longer on screen, increase score
73+ self .score += 1
74+ self .enemy_list = updated_enemy_list
75+
76+ def collision_check (self , player ):
77+ for enemy in self .enemy_list :
78+ if enemy .detect_collision (player ):
79+ return True
80+ return False
0 commit comments