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

Commit 293ee7b

Browse files
authored
Add files via upload
1 parent 86ba426 commit 293ee7b

File tree

4 files changed

+266
-0
lines changed

4 files changed

+266
-0
lines changed
8.71 KB
Loading
Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
import pygame
2+
import sys
3+
import random
4+
from math import *
5+
6+
pygame.init()
7+
8+
width = 600
9+
height = 400
10+
display = pygame.display.set_mode((width, height))
11+
pygame.display.set_caption("Pong!")
12+
clock = pygame.time.Clock()
13+
14+
background = (27, 38, 49)
15+
white = (236, 240, 241)
16+
red = (203, 67, 53)
17+
blue = (52, 152, 219)
18+
yellow = (244, 208, 63)
19+
20+
top = white
21+
bottom = white
22+
left = white
23+
right = white
24+
25+
margin = 4
26+
27+
scoreLeft = 0
28+
scoreRight = 0
29+
maxScore = 20
30+
31+
font = pygame.font.SysFont("Small Fonts", 30)
32+
largeFont = pygame.font.SysFont("Small Fonts", 60)
33+
34+
# Draw the Boundary of Board
35+
def boundary():
36+
global top, bottom, left, right
37+
pygame.draw.rect(display, left, (0, 0, margin, height))
38+
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, bottom, (0, height - margin, width, margin))
41+
42+
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
54+
class Paddle:
55+
def __init__(self, position):
56+
self.w = 10
57+
self.h = self.w*8
58+
self.paddleSpeed = 6
59+
60+
if position == -1:
61+
self.x = 1.5*margin
62+
else:
63+
self.x = width - 1.5*margin - self.w
64+
65+
self.y = height/2 - self.h/2
66+
67+
# Show the Paddle
68+
def show(self):
69+
pygame.draw.rect(display, white, (self.x, self.y, self.w, self.h))
70+
71+
# Move the Paddle
72+
def move(self, ydir):
73+
self.y += self.paddleSpeed*ydir
74+
if self.y < 0:
75+
self.y -= self.paddleSpeed*ydir
76+
elif self.y + self.h> height:
77+
self.y -= self.paddleSpeed*ydir
78+
79+
80+
leftPaddle = Paddle(-1)
81+
rightPaddle = Paddle(1)
82+
83+
# Ball Class
84+
class Ball:
85+
def __init__(self, color):
86+
self.r = 20
87+
self.x = width/2 - self.r/2
88+
self.y = height/2 -self.r/2
89+
self.color = color
90+
self.angle = random.randint(-75, 75)
91+
if random.randint(0, 1):
92+
self.angle += 180
93+
94+
self.speed = 8
95+
96+
# Show the Ball
97+
def show(self):
98+
pygame.draw.ellipse(display, self.color, (self.x, self.y, self.r, self.r))
99+
100+
# Move the Ball
101+
def move(self):
102+
global scoreLeft, scoreRight
103+
self.x += self.speed*cos(radians(self.angle))
104+
self.y += self.speed*sin(radians(self.angle))
105+
if self.x + self.r > width - margin:
106+
scoreLeft += 1
107+
self.angle = 180 - self.angle
108+
if self.x < margin:
109+
scoreRight += 1
110+
self.angle = 180 - self.angle
111+
if self.y < margin:
112+
self.angle = - self.angle
113+
if self.y + self.r >=height - margin:
114+
self.angle = - self.angle
115+
116+
# Check and Reflect the Ball when it hits the padddle
117+
def checkForPaddle(self):
118+
if self.x < width/2:
119+
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:
121+
self.angle = -45
122+
if leftPaddle.y + 10 < self.y < leftPaddle.y + 20 or leftPaddle.y + 10 < self.y + self.r< leftPaddle.y + 20:
123+
self.angle = -30
124+
if leftPaddle.y + 20 < self.y < leftPaddle.y + 30 or leftPaddle.y + 20 < self.y + self.r< leftPaddle.y + 30:
125+
self.angle = -15
126+
if leftPaddle.y + 30 < self.y < leftPaddle.y + 40 or leftPaddle.y + 30 < self.y + self.r< leftPaddle.y + 40:
127+
self.angle = -10
128+
if leftPaddle.y + 40 < self.y < leftPaddle.y + 50 or leftPaddle.y + 40 < self.y + self.r< leftPaddle.y + 50:
129+
self.angle = 10
130+
if leftPaddle.y + 50 < self.y < leftPaddle.y + 60 or leftPaddle.y + 50 < self.y + self.r< leftPaddle.y + 60:
131+
self.angle = 15
132+
if leftPaddle.y + 60 < self.y < leftPaddle.y + 70 or leftPaddle.y + 60 < self.y + self.r< leftPaddle.y + 70:
133+
self.angle = 30
134+
if leftPaddle.y + 70 < self.y < leftPaddle.y + 80 or leftPaddle.y + 70 < self.y + self.r< leftPaddle.y + 80:
135+
self.angle = 45
136+
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:
139+
self.angle = -135
140+
if rightPaddle.y + 10 < self.y < rightPaddle.y + 20 or rightPaddle.y + 10 < self.y + self.r< rightPaddle.y + 20:
141+
self.angle = -150
142+
if rightPaddle.y + 20 < self.y < rightPaddle.y + 30 or rightPaddle.y + 20 < self.y + self.r< rightPaddle.y + 30:
143+
self.angle = -165
144+
if rightPaddle.y + 30 < self.y < rightPaddle.y + 40 or rightPaddle.y + 30 < self.y + self.r< rightPaddle.y + 40:
145+
self.angle = 170
146+
if rightPaddle.y + 40 < self.y < rightPaddle.y + 50 or rightPaddle.y + 40 < self.y + self.r< rightPaddle.y + 50:
147+
self.angle = 190
148+
if rightPaddle.y + 50 < self.y < rightPaddle.y + 60 or rightPaddle.y + 50 < self.y + self.r< rightPaddle.y + 60:
149+
self.angle = 165
150+
if rightPaddle.y + 60 < self.y < rightPaddle.y + 70 or rightPaddle.y + 60 < self.y + self.r< rightPaddle.y + 70:
151+
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
154+
155+
# Show the Score
156+
def showScore():
157+
leftScoreText = font.render("Score : " + str(scoreLeft), True, red)
158+
rightScoreText = font.render("Score : " + str(scoreRight), True, blue)
159+
160+
display.blit(leftScoreText, (3*margin, 3*margin))
161+
display.blit(rightScoreText, (width/2 + 3*margin, 3*margin))
162+
163+
# Game Over
164+
def gameOver():
165+
if scoreLeft == maxScore or scoreRight == maxScore:
166+
while True:
167+
for event in pygame.event.get():
168+
if event.type == pygame.QUIT:
169+
close()
170+
if event.type == pygame.KEYDOWN:
171+
if event.key == pygame.K_q:
172+
close()
173+
if event.key == pygame.K_r:
174+
reset()
175+
if scoreLeft == maxScore:
176+
playerWins = largeFont.render("Left Player Wins!", True, red)
177+
elif scoreRight == maxScore:
178+
playerWins = largeFont.render("Right Player Wins!", True, blue)
179+
180+
display.blit(playerWins, (width/2 - 100, height/2))
181+
pygame.display.update()
182+
183+
def reset():
184+
global scoreLeft, scoreRight
185+
scoreLeft = 0
186+
scoreRight = 0
187+
board()
188+
189+
190+
def close():
191+
pygame.quit()
192+
sys.exit()
193+
194+
def board():
195+
loop = True
196+
leftChange = 0
197+
rightChange = 0
198+
ball = Ball(yellow)
199+
200+
while loop:
201+
for event in pygame.event.get():
202+
if event.type == pygame.QUIT:
203+
close()
204+
if event.type == pygame.KEYDOWN:
205+
if event.key == pygame.K_q:
206+
close()
207+
if event.key == pygame.K_SPACE or event.key == pygame.K_p:
208+
Pause()
209+
if event.key == pygame.K_r:
210+
reset()
211+
if event.key == pygame.K_w:
212+
leftChange = -1
213+
if event.key == pygame.K_s:
214+
leftChange = 1
215+
if event.key == pygame.K_UP:
216+
rightChange = -1
217+
if event.key == pygame.K_DOWN:
218+
rightChange = 1
219+
if event.type == pygame.KEYUP:
220+
leftChange = 0
221+
rightChange = 0
222+
223+
leftPaddle.move(leftChange)
224+
rightPaddle.move(rightChange)
225+
ball.move()
226+
ball.checkForPaddle()
227+
228+
display.fill(background)
229+
showScore()
230+
231+
ball.show()
232+
leftPaddle.show()
233+
rightPaddle.show()
234+
235+
boundary()
236+
237+
gameOver()
238+
239+
pygame.display.update()
240+
clock.tick(60)
241+
242+
board()
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Pong Game
2+
3+
Pong Game built using Pygame!
4+
5+
## Prerequisites
6+
7+
Install the required packages
8+
9+
`pip install -r requirements.txt`
10+
11+
## How to play?
12+
13+
1. Install [Python 3](https://www.python.org/)
14+
2. Run the script.
15+
3. Player 1 will use W, A, S, D to play, Player 2 will use the arrow keys.
16+
17+
18+
19+
## Screenshot
20+
![screenshot](capture.png)
21+
## Author
22+
23+
[Vyprath](https://github.com/Vyprath)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pygame

0 commit comments

Comments
 (0)