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
|
import simplegui
import random
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
def spawn_ball(direction):
global ball_pos, ball_vel
ball_pos = [WIDTH/2, HEIGHT/2]
if direction :
ball_vel = [random.randrange(2,4), random.randrange(1,3)]
else:
ball_vel = [random.randrange(-4,-2), random.randrange(1,3)]
def new_game():
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel
global score1, score2
score1, score2 = [0, 0]
paddle1_pos = [HALF_PAD_WIDTH, HEIGHT/2]
paddle2_pos = [WIDTH - HALF_PAD_WIDTH, HEIGHT/2]
paddle1_vel = [0, 0]
paddle2_vel = [0, 0]
spawn_ball(random.choice([LEFT,RIGHT]))
def draw(canvas):
global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel
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")
if ball_pos[0] < PAD_WIDTH + BALL_RADIUS:
if ball_pos[1] in range(paddle1_pos[1] - PAD_HEIGHT, paddle1_pos[1] + PAD_HEIGHT):
ball_vel[0] = ball_vel[0] * -1.1
else:
score2 +=1
spawn_ball(RIGHT)
if ball_pos[0] > WIDTH - PAD_WIDTH - BALL_RADIUS:
if ball_pos[1] in range(paddle2_pos[1] - PAD_HEIGHT, paddle2_pos[1] + PAD_HEIGHT):
ball_vel[0] = ball_vel[0] * -1.1
else:
score1 +=1
spawn_ball(LEFT)
if ball_pos[1] < BALL_RADIUS or ball_pos[1] > HEIGHT - BALL_RADIUS:
ball_vel[1] = ball_vel[1] * -1
ball_pos[0] = ball_pos[0] + ball_vel[0]
ball_pos[1] = ball_pos[1] + ball_vel[1]
canvas.draw_circle(ball_pos, BALL_RADIUS, 5, "white", "white")
if paddle1_pos[1] < HALF_PAD_HEIGHT:
paddle1_vel[1] = 0
paddle1_pos[1] = HALF_PAD_HEIGHT
elif paddle1_pos[1] > HEIGHT - HALF_PAD_HEIGHT:
paddle1_vel[1] = 0
paddle1_pos[1] = HEIGHT - HALF_PAD_HEIGHT
if paddle2_pos[1] < HALF_PAD_HEIGHT:
paddle2_vel[1] = 0
paddle2_pos[1] = HALF_PAD_HEIGHT
elif paddle2_pos[1] > HEIGHT - HALF_PAD_HEIGHT:
paddle2_vel[1] = 0
paddle2_pos[1] = HEIGHT - HALF_PAD_HEIGHT
paddle1_pos[1] -= paddle1_vel[1]
paddle2_pos[1] -= paddle2_vel[1]
canvas.draw_polygon([(0,paddle1_pos[1]+HALF_PAD_HEIGHT),(PAD_WIDTH, paddle1_pos[1]+HALF_PAD_HEIGHT),(PAD_WIDTH, paddle1_pos[1]-HALF_PAD_HEIGHT),(0, paddle1_pos[1]-HALF_PAD_HEIGHT)], 1, "white", "white")
canvas.draw_polygon([(WIDTH - PAD_WIDTH, paddle2_pos[1]+HALF_PAD_HEIGHT),(WIDTH, paddle2_pos[1]+HALF_PAD_HEIGHT),(WIDTH, paddle2_pos[1]-HALF_PAD_HEIGHT),(WIDTH - PAD_WIDTH, paddle2_pos[1]-HALF_PAD_HEIGHT)], 1, "white", "white")
canvas.draw_text("Player1: " + str(score1), (WIDTH * 0.4, HEIGHT * 0.15), 40, 'white')
canvas.draw_text("Player2: " + str(score2), (WIDTH * 0.57, HEIGHT * 0.15), 40, 'white')
def keydown(key):
global paddle1_vel, paddle2_vel
if key == simplegui.KEY_MAP['w']:
paddle1_vel[1] = 10
elif key == simplegui.KEY_MAP['s']:
paddle1_vel[1] = -10
elif key == simplegui.KEY_MAP['up']:
paddle2_vel[1] = 10
elif key == simplegui.KEY_MAP['down']:
paddle2_vel[1] = -10
def keyup(key):
global paddle1_vel, paddle2_vel
if key == simplegui.KEY_MAP['w']:
paddle1_vel[1] = 0
elif key == simplegui.KEY_MAP['s']:
paddle1_vel[1] = 0
elif key == simplegui.KEY_MAP['up']:
paddle2_vel[1] = 0
elif key == simplegui.KEY_MAP['down']:
paddle2_vel[1] = 0
def start_handler():
new_game()
def reset_handler():
global score1, score2, ball_pos, ball_vel
score1, score2 = [0, 0]
ball_pos = [WIDTH/2, HEIGHT/2]
ball_vel = [0, 0]
frame = simplegui.create_frame("Pong", WIDTH, HEIGHT)
frame.set_draw_handler(draw)
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
start_button = frame.add_button("start", start_handler)
reset_button = frame.add_button("reset", reset_handler)
new_game()
frame.start()
|