12
12
class Rectangles ():
13
13
def __init__ (self , topleft , wh , speed , screensize ):
14
14
self .rect = pygame .Rect (topleft , wh )
15
+ self .backuprect = pygame .Rect (topleft , wh )
15
16
self .speed = speed
16
17
self .screen = pygame .Rect ((0 , 0 ), screensize )
17
18
@@ -35,20 +36,80 @@ def update(self):
35
36
if self .rect .right > self .screen .right :
36
37
self .rect .x = self .screen .right - self .rect .width
37
38
39
+ def draw (self , screen ):
40
+ pygame .draw .rect (screen , (0 , 255 , 0 ), self .rect )
41
+
42
+ def goto (self , pos , walls ):
43
+ rectcenterbackup = self .rect .center
44
+ self .rect .center = pos
45
+ for wall in walls :
46
+ if self .rect .colliderect (wall .rect ):
47
+ self .rect .center = rectcenterbackup
48
+
49
+ def reset (self ):
50
+ self .rect = self .backuprect .move (0 , 0 )
51
+
52
+ class Wall (pygame .sprite .Sprite ):
53
+ def __init__ (self , x , y , w , h ):
54
+ super ().__init__ ()
55
+ self .rect = pygame .Rect ((x , y ), (w , h ))
56
+
38
57
def draw (self , screen ):
39
58
pygame .draw .rect (screen , (255 , 0 , 0 ), self .rect )
40
59
41
- rect = Rectangles ((200 , 150 ), (200 , 300 ), 10 , (WIDTH , HEIGHT ))
60
+ class LoseScreen ():
61
+ def __init__ (self , screensize ):
62
+ self .screensize = screensize
63
+ self .screenrect = pygame .Rect ((0 , 0 ), screensize )
64
+ self .font = pygame .font .Font (None , 100 )
65
+ self .text = self .font .render ("You lost!" , True , (255 , 255 , 255 ))
66
+ self .textrect = self .text .get_rect (center = (screensize [0 ]/ 2 , screensize [1 ]/ 2 ))
67
+ self .count = 0
68
+
69
+ def draw (self , screen ):
70
+ if self .count > 0 :
71
+ pygame .draw .rect (screen , (255 , 0 , 0 ), self .screenrect )
72
+ screen .blit (self .text , self .textrect )
73
+
74
+ def update (self , reset = False ):
75
+ if reset :
76
+ self .count = 40
77
+ return 0
78
+ self .count -= 1
79
+ return 0 if self .count > 0 else 1
80
+
81
+ rect = Rectangles ((200 , 150 ), (100 , 100 ), 10 , (WIDTH , HEIGHT ))
82
+ losescreen = LoseScreen ((WIDTH , HEIGHT ))
83
+ level = 1
42
84
43
85
clock = pygame .time .Clock ()
44
86
87
+ walls = pygame .sprite .Group ()
88
+ walls .add (Wall (0 , 0 , 100 , 100 ))
89
+ walls .add (Wall (400 , 0 , 100 , 100 ))
90
+
45
91
while True :
46
92
clock .tick (FRAMERATE )
47
93
for event in pygame .event .get ():
48
94
if event .type == QUIT :
49
95
raise SystemExit
96
+ elif event .type == MOUSEBUTTONDOWN :
97
+ if event .button == 1 :
98
+ rect .goto (event .pos , walls )
99
+ elif event .type == USEREVENT and event .code == "LOSE" :
100
+ level = losescreen .update (reset = True )
101
+ rect .reset ()
50
102
screen .fill ((255 ,255 ,255 ))
51
- rect .update ()
52
- rect .draw (screen )
103
+ if level == 0 :
104
+ level = losescreen .update ()
105
+ losescreen .draw (screen )
106
+ else :
107
+ rect .update ()
108
+ rect .draw (screen )
109
+ for wall in walls :
110
+ wall .draw (screen )
111
+ if rect .rect .colliderect (wall .rect ):
112
+ pygame .event .post (pygame .event .Event (USEREVENT , code = "LOSE" ))
113
+
53
114
54
- pygame .display .update ()
115
+ pygame .display .update ()
0 commit comments