-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpong.py
156 lines (126 loc) · 3.51 KB
/
pong.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
"""
Dilyana Koleva, August 2022
Pong Game with Turtle
"""
# Turtle module is great with graphics and especially for starting with game development
import os
import turtle
import winsound
window = turtle.Screen()
window.title("Pong")
window.bgcolor("black")
window.setup(width=800, height=600)
# Stops the window from updating / Speeds up the game
window.tracer(0)
# Winning score
winning_score = 10
# Score
score_a = 0
score_b = 0
# Left Paddle
left = turtle.Turtle()
left.speed(0)
left.shape("square")
left.color("white")
left.shapesize(stretch_wid=5, stretch_len=1)
left.penup()
left.goto(-350, 0)
# Right Paddle
right = turtle.Turtle()
right.speed(0)
right.shape("square")
right.color("white")
right.shapesize(stretch_wid=5, stretch_len=1)
right.penup()
right.goto(350, 0)
# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.2
ball.dy = -0.2
# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Player A: 0 Player B: 0", align="center", font=("ComicSans", 24, "bold"))
# Function to move left paddle
def left_paddle_up():
y = left.ycor()
y += 20
left.sety(y)
def left_paddle_down():
y = left.ycor()
y -= 20
left.sety(y)
# Functions to move right paddle
def right_paddle_up():
y = right.ycor()
y += 20
right.sety(y)
def right_paddle_down():
y = right.ycor()
y -= 20
right.sety(y)
# Keyboard bindings
window.listen()
window.onkeypress(left_paddle_up, "w")
window.onkeypress(left_paddle_down, "s")
window.onkeypress(right_paddle_up, "Up")
window.onkeypress(right_paddle_down, "Down")
# Main Game Loop
while True:
window.update()
# Move ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# Top and Bottom Border
if ball.ycor() > 290:
ball.sety(290)
ball.dy *= -1
winsound.PlaySound("bounce.wav", winsound.SND_ASYNC)
elif ball.ycor() < -290:
ball.sety(-290)
ball.dy *= -1
winsound.PlaySound("bounce.wav", winsound.SND_ASYNC)
# Left and Right Border
if ball.xcor() > 390:
ball.dx *= -1
score_a += 1
pen.clear()
pen.write("Player A: {} Player B: {}".format(score_a, score_b), align="center",
font=("ComicSans", 24, "bold"))
elif ball.xcor() < -390:
ball.dx *= -1
score_b += 1
pen.clear()
pen.write("Player A: {} Player B: {}".format(score_a, score_b), align="center",
font=("ComicSans", 24, "bold"))
if (340 < ball.xcor() < 350) and right.ycor() + 50 > ball.ycor() > right.ycor() - 50:
ball.setx(340)
ball.dx *= -1
# Left Paddle and ball collisions
if (-350 < ball.xcor() < -340) and left.ycor() + 50 > ball.ycor() > left.ycor() - 50:
ball.setx(-340)
ball.dx *= -1
# Right Paddle and ball collisions
elif (340 < ball.xcor() < 350) and right.ycor() + 50 > ball.ycor() > right.ycor() - 50:
ball.setx(340)
ball.dx *= -1
won = False
if score_a >= winning_score:
won = True
win_text = "Player A Won!"
elif score_b >= winning_score:
won = True
win_text = "Player B Won!"
if won:
pen.clear()
pen.write(win_text, align="center", font=("ComicSans", 24, "bold"))
ball.goto(0, 0)