/
rnekrasov
/
Python
Обзор
Документация
Войти
/
rnekrasov
/
Python
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PONG_GAME.py
146 строк
4 KB
slowy07
refactor: clean code
30 янв 2022, 04:33
30 янв 2022, 04:33
f0af0c4
Код
Авторство
О чём код?
# 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()