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
|
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] ball_vel = [random.randrange(1, 2)*2, random.randrange(-2, 2)+0.5] if(direction == "LEFT"): ball_vel[0] = -ball_vel[0]
def new_game(): global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel paddle1_pos = [HALF_PAD_WIDTH, HEIGHT / 2] paddle2_pos = [WIDTH - HALF_PAD_WIDTH, HEIGHT / 2] global score1, score2 score1 = 0 score2 = 0 paddle2_vel = 0 paddle1_vel = 0 spawn_ball(random.choice(["LEFT", "RIGHT"]))
def draw(canvas): global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel global paddle2_vel, paddle1_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") ball_pos[0] += ball_vel[0] ball_pos[1] += ball_vel[1] canvas.draw_circle(ball_pos, BALL_RADIUS, 2, "Red", "White") if(ball_pos[1] + BALL_RADIUS >= HEIGHT or ball_pos[1] - BALL_RADIUS <= 0): ball_vel[1] = -ball_vel[1] canvas.draw_polyline([[HALF_PAD_WIDTH, paddle1_pos[1]-HALF_PAD_HEIGHT], [HALF_PAD_WIDTH, paddle1_pos[1]+HALF_PAD_HEIGHT]], PAD_WIDTH, 'Red') paddle1_pos[1] += paddle1_vel canvas.draw_polyline([[WIDTH - HALF_PAD_WIDTH, paddle2_pos[1]-HALF_PAD_HEIGHT], [WIDTH - HALF_PAD_WIDTH, paddle2_pos[1]+HALF_PAD_HEIGHT]], PAD_WIDTH, 'Red') paddle2_pos[1] += paddle2_vel if paddle1_pos[1] + HALF_PAD_HEIGHT >= HEIGHT: paddle1_pos[1] = HEIGHT - HALF_PAD_HEIGHT paddle1_vel = 0 if paddle1_pos[1] - HALF_PAD_HEIGHT <= 0: paddle1_pos[1] = HALF_PAD_HEIGHT paddle1_vel = 0 if paddle2_pos[1] + HALF_PAD_HEIGHT >= HEIGHT: paddle2_pos[1] = HEIGHT - HALF_PAD_HEIGHT paddle2_vel = 0 if paddle2_pos[1] - HALF_PAD_HEIGHT <= 0: paddle2_pos[1] = HALF_PAD_HEIGHT paddle2_vel = 0 if(ball_pos[1] < paddle1_pos[1] + HALF_PAD_HEIGHT and ball_pos[1] > paddle1_pos[1] - HALF_PAD_HEIGHT and ball_pos[0] <= BALL_RADIUS + PAD_WIDTH): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.2 ball_vel[1] *= 1.2 elif(ball_pos[0] < -1*BALL_RADIUS): score2 += 1 spawn_ball(random.choice(["LEFT", "RIGHT"])) if(ball_pos[1] < paddle2_pos[1] + HALF_PAD_HEIGHT and ball_pos[1] > paddle2_pos[1] - HALF_PAD_HEIGHT and ball_pos[0] >= WIDTH - BALL_RADIUS - PAD_WIDTH): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.2 ball_vel[1] *= 1.2 elif(ball_pos[0] >= WIDTH + BALL_RADIUS): score1 += 1 spawn_ball(random.choice(["LEFT", "RIGHT"])) canvas.draw_text(str(score1), [50, 50], 50, 'Blue', 'serif') canvas.draw_text(str(score2), [500, 50], 50, 'Blue', 'serif') def keydown(key): global paddle1_vel, paddle2_vel acc = 1 if key==simplegui.KEY_MAP["s"]: paddle1_vel += acc elif key==simplegui.KEY_MAP["w"]: paddle1_vel -= acc elif key==simplegui.KEY_MAP["down"]: paddle2_vel += acc elif key==simplegui.KEY_MAP["up"]: paddle2_vel -= acc def keyup(key): global paddle1_vel, paddle2_vel
def button_handler(): new_game()
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('Reset', button_handler, 60)
new_game() frame.start()
|