Skip to content
This repository was archived by the owner on Dec 22, 2023. It is now read-only.

Commit af080c9

Browse files
authored
Added Reset and UI changes
- Added functionality for reset game after Game over - Some Paddle UI changes to look cool
1 parent 44d7cc8 commit af080c9

File tree

1 file changed

+77
-67
lines changed
  • Scripts/Miscellaneous/Pong Game

1 file changed

+77
-67
lines changed

Scripts/Miscellaneous/Pong Game/game.py

Lines changed: 77 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -31,66 +31,69 @@
3131
font = pygame.font.SysFont("Small Fonts", 30)
3232
largeFont = pygame.font.SysFont("Small Fonts", 60)
3333

34+
3435
# Draw the Boundary of Board
3536
def 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
5456
class 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
8487
class 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
156160
def 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
164169
def 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+
183191
def reset():
184192
global scoreLeft, scoreRight
185193
scoreLeft = 0
@@ -191,12 +199,13 @@ def close():
191199
pygame.quit()
192200
sys.exit()
193201

202+
194203
def 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+
242252
if __name__ == "__main__":
243-
board()
253+
board()

0 commit comments

Comments
 (0)