forked from geekcomputers/Python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPONG_GAME.py
146 lines (116 loc) · 3.92 KB
/
PONG_GAME.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
# Pong Game in Codeskulptor
import random
import simplegui
WIDTH = 600
HEIGHT = 400
BALL_RADIUS = 20
PAD_WIDTH = 8
PAD_HEIGHT = 80
HALF_PAD_WIDTH = PAD_WIDTH / 2
HALF_PAD_HEIGHT = PAD_HEIGHT / 2
LEFT = False
RIGHT = True
score1 = 0
score2 = 0
paddle1_pos = 0
paddle2_pos = 0
paddle1_vel = 0
paddle2_vel = 0
def spawn_ball(direction):
global ball_pos, ball_vel # these are vectors stored as lists
ball_pos = [WIDTH / 2, HEIGHT / 2]
if direction == RIGHT:
ball_vel = [random.randrange(120, 240) / 60, random.randrange(60, 180) / 60]
elif direction == LEFT:
ball_vel = [-random.randrange(120, 240) / 60, random.randrange(60, 180) / 60]
def reset():
global ball_pos, score1, score2
ball_pos = [WIDTH / 2, HEIGHT / 2]
score1 = 0
score2 = 0
def new_game():
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel
global score1, score2
reset()
spawn_ball(RIGHT)
def draw(canvas):
global paddle1_pos, paddle2_pos, ball_pos, ball_vel, paddle1_vel, paddle2_vel, BALL_RADIUS
global score1, score2
canvas.draw_line([WIDTH / 2, 0], [WIDTH / 2, HEIGHT], 1, "White")
canvas.draw_line([PAD_WIDTH, 0], [PAD_WIDTH, HEIGHT], 1, "White")
canvas.draw_line([WIDTH - PAD_WIDTH, 0], [WIDTH - PAD_WIDTH, HEIGHT], 1, "White")
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
if (
ball_pos[0] <= BALL_RADIUS + PAD_WIDTH
or ball_pos[0] >= WIDTH - BALL_RADIUS - PAD_WIDTH
):
ball_vel[0] = -ball_vel[0]
elif (
ball_pos[1] <= BALL_RADIUS + PAD_WIDTH
or ball_pos[1] >= HEIGHT - BALL_RADIUS - PAD_WIDTH
):
ball_vel[1] = -ball_vel[1]
canvas.draw_circle(ball_pos, BALL_RADIUS, 1, "White", "White")
paddle1_pos += paddle1_vel
paddle2_pos += paddle2_vel
if paddle1_pos <= -HEIGHT / 2 + PAD_HEIGHT / 2:
paddle1_pos = -HEIGHT / 2 + PAD_HEIGHT / 2
elif paddle1_pos >= HEIGHT / 2 - PAD_HEIGHT / 2:
paddle1_pos = HEIGHT / 2 - PAD_HEIGHT / 2
if paddle2_pos <= -HEIGHT / 2 + PAD_HEIGHT / 2:
paddle2_pos = -HEIGHT / 2 + PAD_HEIGHT / 2
elif paddle2_pos >= HEIGHT / 2 - PAD_HEIGHT / 2:
paddle2_pos = HEIGHT / 2 - PAD_HEIGHT / 2
canvas.draw_line(
[PAD_WIDTH / 2, paddle1_pos + HEIGHT / 2 - PAD_HEIGHT / 2],
[PAD_WIDTH / 2, paddle1_pos + PAD_HEIGHT / 2 + HEIGHT / 2],
10,
"White",
)
canvas.draw_line(
[WIDTH - PAD_WIDTH / 2, paddle2_pos + HEIGHT / 2 - PAD_HEIGHT / 2],
[WIDTH - PAD_WIDTH / 2, PAD_HEIGHT / 2 + paddle2_pos + HEIGHT / 2],
10,
"White",
)
if (
ball_pos[1] <= (paddle1_pos + HEIGHT / 2 - PAD_HEIGHT / 2)
or ball_pos[1] >= (paddle1_pos + PAD_HEIGHT / 2 + HEIGHT / 2)
) and ball_pos[0] == (PAD_WIDTH + BALL_RADIUS):
score2 += 1
else:
pass
if (
ball_pos[1] <= (paddle2_pos + HEIGHT / 2 - PAD_HEIGHT / 2)
or ball_pos[1] >= (paddle2_pos + PAD_HEIGHT / 2 + HEIGHT / 2)
) and ball_pos[0] == (WIDTH - PAD_WIDTH - BALL_RADIUS):
score1 += 1
else:
pass
canvas.draw_text(str(score1), (250, 30), 40, "White")
canvas.draw_text(str(score2), (330, 30), 40, "White")
def keydown(key):
global paddle1_vel, paddle2_vel
if key == simplegui.KEY_MAP["down"]:
paddle1_vel = 2
elif key == simplegui.KEY_MAP["up"]:
paddle1_vel = -2
if key == simplegui.KEY_MAP["w"]:
paddle2_vel = -2
elif key == simplegui.KEY_MAP["s"]:
paddle2_vel = 2
def keyup(key):
global paddle1_vel, paddle2_vel
if key == simplegui.KEY_MAP["down"] or key == simplegui.KEY_MAP["up"]:
paddle1_vel = 0
if key == simplegui.KEY_MAP["w"] or key == simplegui.KEY_MAP["s"]:
paddle2_vel = 0
frame = simplegui.create_frame("Pong", WIDTH, HEIGHT)
frame.set_draw_handler(draw)
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
frame.add_button("Restart", reset)
new_game()
print()
frame.start()