-
Notifications
You must be signed in to change notification settings - Fork 0
/
one_player_pong.py
101 lines (89 loc) · 3.56 KB
/
one_player_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
import picodisplay as display
from time import sleep
import random
from pens import green, deep_blue
height = display.get_height()
width = display.get_width()
background_colour = deep_blue
player_colour = green
player_length = 30
player_speed = 5
ball_radius = 7
def draw_background():
display.set_pen(deep_blue)
display.clear()
def draw_ball(position):
(x,y)=position
if x < 0 or x > width or y < 0 or y > height:
raise Exception('ball out of range')
display.set_pen(player_colour)
display.circle(x,y,ball_radius)
def draw_player(position):
display.set_pen(player_colour)
display.rectangle(210,position,7,player_length)
def end_game(score):
display.set_pen(green)
display.text('SCORE:{}'.format(score),50,20,100,4)
display.update()
scores = open('1_scores.txt','a')
scores.write('{},'.format(score))
scores.close()
display.set_led(255,0,0)
sleep(5)
display.set_led(0,0,255)
def play():
player_position = 40
ball_position_x = ball_position_y = 15
ball_x_direction = ball_y_direction = 2
kx = ky = 1
x_upper_limit = 6
y_upper_limit = 4
playing_game = True
score = 0
while playing_game:
draw_background()
draw_player(player_position)
draw_ball((ball_position_x, ball_position_y))
display.update()
wall_collision = ball_position_y > 125 or ball_position_y < 7
top_collision = ball_position_x < 15
player_collision = ball_position_x > 195 and (ball_position_y + ball_radius > player_position) and (ball_position_y - ball_radius) < (player_position + player_length)
ball_y_direction = ky*y_upper_limit if ball_y_direction > y_upper_limit else ball_y_direction
ball_x_direction = kx*x_upper_limit if ball_x_direction > x_upper_limit else ball_x_direction
lose_condition = ball_position_x > 215 and not player_collision
if lose_condition:
end_game(score)
playing_game = False
if wall_collision or top_collision or player_collision:
x_low_limit = 2
y_low_limit = 2
rebound_chance = random.randint(0,6)
kx = kx*-1 if wall_collision and rebound_chance == 2 else kx
ky = ky*-1 if (top_collision or player_collision) and rebound_chance == 2 else ky
if top_collision:
x_low_limit = 15 - ball_position_x
kx = 1
if player_collision:
score += 1
x_low_limit = ball_position_x - 195
kx = -1
display.set_led(150,0,100)
sleep(0.05)
display.set_led(0,0,255)
if wall_collision:
if ball_position_y < 7:
y_low_limit = ball_position_y if ball_position_y > y_low_limit else y_low_limit
ky = 1
else:
y_low_limit = ball_position_y - 125
ky = -1
ball_x_direction = kx*(x_low_limit if x_low_limit >= x_upper_limit else random.randint(x_low_limit,x_upper_limit))
ball_y_direction = ky*(y_low_limit if y_low_limit >= y_upper_limit else random.randint(y_low_limit,y_upper_limit))
if display.is_pressed(display.BUTTON_Y):
if player_position < 105:
player_position += player_speed
if display.is_pressed(display.BUTTON_X):
if player_position > 0:
player_position -= player_speed
ball_position_x += ball_x_direction
ball_position_y += ball_y_direction