3131font = pygame .font .SysFont ("Small Fonts" , 30 )
3232largeFont = pygame .font .SysFont ("Small Fonts" , 60 )
3333
34+
3435# Draw the Boundary of Board
3536def boundary ():
3637 global top , bottom , left , right
3738 pygame .draw .rect (display , left , (0 , 0 , margin , height ))
3839 pygame .draw .rect (display , top , (0 , 0 , width , margin ))
39- pygame .draw .rect (display , right , (width - margin , 0 , margin , height ))
40+ pygame .draw .rect (display , right , (width - margin , 0 , margin , height ))
4041 pygame .draw .rect (display , bottom , (0 , height - margin , width , margin ))
4142
4243 l = 25
43-
44- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 10 , margin , l ))
45- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 60 , margin , l ))
46- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 110 , margin , l ))
47- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 160 , margin , l ))
48- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 210 , margin , l ))
49- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 260 , margin , l ))
50- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 310 , margin , l ))
51- pygame .draw .rect (display , white , (width / 2 - margin / 2 , 360 , margin , l ))
52-
53- # Paddle Class
44+
45+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 10 , margin , l ))
46+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 60 , margin , l ))
47+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 110 , margin , l ))
48+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 160 , margin , l ))
49+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 210 , margin , l ))
50+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 260 , margin , l ))
51+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 310 , margin , l ))
52+ pygame .draw .rect (display , white , (width / 2 - margin / 2 , 360 , margin , l ))
53+
54+
55+ # Paddle Class
5456class Paddle :
55- def __init__ (self , position ):
57+ def __init__ (self , position , color ):
5658 self .w = 10
57- self .h = self .w * 8
59+ self .h = self .w * 8
5860 self .paddleSpeed = 6
59-
61+
6062 if position == - 1 :
61- self .x = 1.5 * margin
63+ self .x = 1.5 * margin
6264 else :
63- self .x = width - 1.5 * margin - self .w
64-
65- self .y = height / 2 - self .h / 2
65+ self .x = width - 1.5 * margin - self .w
66+
67+ self .y = height / 2 - self .h / 2
6668
6769 # Show the Paddle
68- def show (self ):
69- pygame .draw .rect (display , white , (self .x , self .y , self .w , self .h ))
70+ def show (self , color ):
71+ pygame .draw .rect (display , color , (self .x , self .y , self .w , self .h ))
7072
7173 # Move the Paddle
7274 def move (self , ydir ):
73- self .y += self .paddleSpeed * ydir
75+ self .y += self .paddleSpeed * ydir
7476 if self .y < 0 :
75- self .y -= self .paddleSpeed * ydir
76- elif self .y + self .h > height :
77- self .y -= self .paddleSpeed * ydir
77+ self .y -= self .paddleSpeed * ydir
78+ elif self .y + self .h > height :
79+ self .y -= self .paddleSpeed * ydir
80+
7881
82+ leftPaddle = Paddle (- 1 , red )
83+ rightPaddle = Paddle (1 , blue )
7984
80- leftPaddle = Paddle (- 1 )
81- rightPaddle = Paddle (1 )
8285
8386# Ball Class
8487class Ball :
8588 def __init__ (self , color ):
8689 self .r = 20
87- self .x = width / 2 - self .r / 2
88- self .y = height / 2 - self .r / 2
90+ self .x = width / 2 - self .r / 2
91+ self .y = height / 2 - self .r / 2
8992 self .color = color
9093 self .angle = random .randint (- 75 , 75 )
9194 if random .randint (0 , 1 ):
9295 self .angle += 180
93-
96+
9497 self .speed = 8
9598
9699 # Show the Ball
@@ -100,8 +103,8 @@ def show(self):
100103 # Move the Ball
101104 def move (self ):
102105 global scoreLeft , scoreRight
103- self .x += self .speed * cos (radians (self .angle ))
104- self .y += self .speed * sin (radians (self .angle ))
106+ self .x += self .speed * cos (radians (self .angle ))
107+ self .y += self .speed * sin (radians (self .angle ))
105108 if self .x + self .r > width - margin :
106109 scoreLeft += 1
107110 self .angle = 180 - self .angle
@@ -110,60 +113,63 @@ def move(self):
110113 self .angle = 180 - self .angle
111114 if self .y < margin :
112115 self .angle = - self .angle
113- if self .y + self .r >= height - margin :
116+ if self .y + self .r >= height - margin :
114117 self .angle = - self .angle
115118
116119 # Check and Reflect the Ball when it hits the padddle
117120 def checkForPaddle (self ):
118- if self .x < width / 2 :
121+ if self .x < width / 2 :
119122 if leftPaddle .x < self .x < leftPaddle .x + leftPaddle .w :
120- if leftPaddle .y < self .y < leftPaddle .y + 10 or leftPaddle .y < self .y + self .r < leftPaddle .y + 10 :
123+ if leftPaddle .y < self .y < leftPaddle .y + 10 or leftPaddle .y < self .y + self .r < leftPaddle .y + 10 :
121124 self .angle = - 45
122- if leftPaddle .y + 10 < self .y < leftPaddle .y + 20 or leftPaddle .y + 10 < self .y + self .r < leftPaddle .y + 20 :
125+ if leftPaddle .y + 10 < self .y < leftPaddle .y + 20 or leftPaddle .y + 10 < self .y + self .r < leftPaddle .y + 20 :
123126 self .angle = - 30
124- if leftPaddle .y + 20 < self .y < leftPaddle .y + 30 or leftPaddle .y + 20 < self .y + self .r < leftPaddle .y + 30 :
127+ if leftPaddle .y + 20 < self .y < leftPaddle .y + 30 or leftPaddle .y + 20 < self .y + self .r < leftPaddle .y + 30 :
125128 self .angle = - 15
126- if leftPaddle .y + 30 < self .y < leftPaddle .y + 40 or leftPaddle .y + 30 < self .y + self .r < leftPaddle .y + 40 :
129+ if leftPaddle .y + 30 < self .y < leftPaddle .y + 40 or leftPaddle .y + 30 < self .y + self .r < leftPaddle .y + 40 :
127130 self .angle = - 10
128- if leftPaddle .y + 40 < self .y < leftPaddle .y + 50 or leftPaddle .y + 40 < self .y + self .r < leftPaddle .y + 50 :
131+ if leftPaddle .y + 40 < self .y < leftPaddle .y + 50 or leftPaddle .y + 40 < self .y + self .r < leftPaddle .y + 50 :
129132 self .angle = 10
130- if leftPaddle .y + 50 < self .y < leftPaddle .y + 60 or leftPaddle .y + 50 < self .y + self .r < leftPaddle .y + 60 :
133+ if leftPaddle .y + 50 < self .y < leftPaddle .y + 60 or leftPaddle .y + 50 < self .y + self .r < leftPaddle .y + 60 :
131134 self .angle = 15
132- if leftPaddle .y + 60 < self .y < leftPaddle .y + 70 or leftPaddle .y + 60 < self .y + self .r < leftPaddle .y + 70 :
135+ if leftPaddle .y + 60 < self .y < leftPaddle .y + 70 or leftPaddle .y + 60 < self .y + self .r < leftPaddle .y + 70 :
133136 self .angle = 30
134- if leftPaddle .y + 70 < self .y < leftPaddle .y + 80 or leftPaddle .y + 70 < self .y + self .r < leftPaddle .y + 80 :
137+ if leftPaddle .y + 70 < self .y < leftPaddle .y + 80 or leftPaddle .y + 70 < self .y + self .r < leftPaddle .y + 80 :
135138 self .angle = 45
136139 else :
137- if rightPaddle .x + rightPaddle .w > self .x + self .r > rightPaddle .x :
138- if rightPaddle .y < self .y < leftPaddle .y + 10 or leftPaddle .y < self .y + self .r < leftPaddle .y + 10 :
140+ if rightPaddle .x + rightPaddle .w > self .x + self .r > rightPaddle .x :
141+ if rightPaddle .y < self .y < leftPaddle .y + 10 or leftPaddle .y < self .y + self .r < leftPaddle .y + 10 :
139142 self .angle = - 135
140- if rightPaddle .y + 10 < self .y < rightPaddle .y + 20 or rightPaddle .y + 10 < self .y + self .r < rightPaddle .y + 20 :
143+ if rightPaddle .y + 10 < self .y < rightPaddle .y + 20 or rightPaddle .y + 10 < self .y + self .r < rightPaddle .y + 20 :
141144 self .angle = - 150
142- if rightPaddle .y + 20 < self .y < rightPaddle .y + 30 or rightPaddle .y + 20 < self .y + self .r < rightPaddle .y + 30 :
145+ if rightPaddle .y + 20 < self .y < rightPaddle .y + 30 or rightPaddle .y + 20 < self .y + self .r < rightPaddle .y + 30 :
143146 self .angle = - 165
144- if rightPaddle .y + 30 < self .y < rightPaddle .y + 40 or rightPaddle .y + 30 < self .y + self .r < rightPaddle .y + 40 :
147+ if rightPaddle .y + 30 < self .y < rightPaddle .y + 40 or rightPaddle .y + 30 < self .y + self .r < rightPaddle .y + 40 :
145148 self .angle = 170
146- if rightPaddle .y + 40 < self .y < rightPaddle .y + 50 or rightPaddle .y + 40 < self .y + self .r < rightPaddle .y + 50 :
149+ if rightPaddle .y + 40 < self .y < rightPaddle .y + 50 or rightPaddle .y + 40 < self .y + self .r < rightPaddle .y + 50 :
147150 self .angle = 190
148- if rightPaddle .y + 50 < self .y < rightPaddle .y + 60 or rightPaddle .y + 50 < self .y + self .r < rightPaddle .y + 60 :
151+ if rightPaddle .y + 50 < self .y < rightPaddle .y + 60 or rightPaddle .y + 50 < self .y + self .r < rightPaddle .y + 60 :
149152 self .angle = 165
150- if rightPaddle .y + 60 < self .y < rightPaddle .y + 70 or rightPaddle .y + 60 < self .y + self .r < rightPaddle .y + 70 :
153+ if rightPaddle .y + 60 < self .y < rightPaddle .y + 70 or rightPaddle .y + 60 < self .y + self .r < rightPaddle .y + 70 :
151154 self .angle = 150
152- if rightPaddle .y + 70 < self .y < rightPaddle .y + 80 or rightPaddle .y + 70 < self .y + self .r < rightPaddle .y + 80 :
153- self .angle = 135
155+ if rightPaddle .y + 70 < self .y < rightPaddle .y + 80 or rightPaddle .y + 70 < self .y + self .r < rightPaddle .y + 80 :
156+ self .angle = 135
157+
154158
155159# Show the Score
156160def showScore ():
157161 leftScoreText = font .render ("Score : " + str (scoreLeft ), True , red )
158162 rightScoreText = font .render ("Score : " + str (scoreRight ), True , blue )
159163
160- display .blit (leftScoreText , (3 * margin , 3 * margin ))
161- display .blit (rightScoreText , (width / 2 + 3 * margin , 3 * margin ))
164+ display .blit (leftScoreText , (3 * margin , 3 * margin ))
165+ display .blit (rightScoreText , (width / 2 + 3 * margin , 3 * margin ))
166+
162167
163168# Game Over
164169def gameOver ():
165170 if scoreLeft == maxScore or scoreRight == maxScore :
166- while True :
171+ gameon = True
172+ while gameon :
167173 for event in pygame .event .get ():
168174 if event .type == pygame .QUIT :
169175 close ()
@@ -173,13 +179,15 @@ def gameOver():
173179 if event .key == pygame .K_r :
174180 reset ()
175181 if scoreLeft == maxScore :
176- playerWins = largeFont .render ("Left Player Wins!" , True , red )
182+ playerWins = largeFont .render ("Red wins!Press R to reset!" , True , red )
183+ display .blit (playerWins , (40 , height / 2 ))
177184 elif scoreRight == maxScore :
178- playerWins = largeFont .render ("Right Player Wins!" , True , blue )
179-
180- display .blit (playerWins , (width / 2 - 100 , height / 2 ))
185+ playerWins = largeFont .render ("Blue wins! Press R to reset!" , True , blue )
186+ display .blit (playerWins , (30 , height / 2 ))
181187 pygame .display .update ()
182188
189+
190+
183191def reset ():
184192 global scoreLeft , scoreRight
185193 scoreLeft = 0
@@ -191,12 +199,13 @@ def close():
191199 pygame .quit ()
192200 sys .exit ()
193201
202+
194203def board ():
195204 loop = True
196205 leftChange = 0
197206 rightChange = 0
198207 ball = Ball (yellow )
199-
208+
200209 while loop :
201210 for event in pygame .event .get ():
202211 if event .type == pygame .QUIT :
@@ -205,7 +214,7 @@ def board():
205214 if event .key == pygame .K_q :
206215 close ()
207216 if event .key == pygame .K_SPACE or event .key == pygame .K_p :
208- Pause ()
217+ pause ()
209218 if event .key == pygame .K_r :
210219 reset ()
211220 if event .key == pygame .K_w :
@@ -223,21 +232,22 @@ def board():
223232 leftPaddle .move (leftChange )
224233 rightPaddle .move (rightChange )
225234 ball .move ()
226- ball .checkForPaddle ()
227-
235+ ball .checkForPaddle ()
236+
228237 display .fill (background )
229238 showScore ()
230239
231240 ball .show ()
232- leftPaddle .show ()
233- rightPaddle .show ()
241+ leftPaddle .show (red )
242+ rightPaddle .show (blue )
234243
235244 boundary ()
236245
237246 gameOver ()
238-
247+
239248 pygame .display .update ()
240249 clock .tick (60 )
241250
251+
242252if __name__ == "__main__" :
243- board ()
253+ board ()
0 commit comments