您的位置:首页 > 编程语言 > Python开发

Mini-project #4 - Pong

2016-06-27 11:40 393 查看
 # Implementation of classic arcade game Pong

import simplegui

import random

# initialize globals - pos and vel encode vertical info for paddles

WIDTH = 600

half_width = WIDTH /2

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

ball_pos = [WIDTH/2,HEIGHT/2]

ball_vel = [1,1]

paddle_vel = 5

paddle1_vel = 0

paddle2_vel = 0

paddle1_pos = HEIGHT/2

paddle2_pos = HEIGHT/2

score1 = 0

score2 = 0

# initialize ball_pos and ball_vel for new bal in middle of table

# if direction is RIGHT, the ball's velocity reverse, if ball's direction is left, keep it

def new_ball(direction):

    global ball_pos, ball_vel, random_number1,random_number2 # these are vectors stored as lists

    

    ball_pos = [WIDTH/2,HEIGHT/2]

    ball_vel[0] = -random.randrange(180,240)/100

    if direction == True:

            ball_vel[0] *= -1

    random_number1 = random.randrange(-120,-100)/100 

    random_number2 = random.randrange(100,120)/100

    ball_vel[1] = random.choice([random_number1,random_number2])

     

# define event handlers, e.g. draw, new_game, keydown, keyup

def draw(canvas):

    global ball_pos,ball_vel,paddle1_pos,paddle2_pos,paddle1_vel,paddle2_vel,paddle_vel,score1,score2

    # draw mid line and gutters

    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")

    

    # update ball pos and velocity

    ball_pos[0] += ball_vel[0]

    ball_pos[1] += ball_vel[1]

    

    if ( ball_pos[0] < half_width and ball_pos[1]>=BALL_RADIUS and ball_pos[1]<=HEIGHT-BALL_RADIUS ):

        ## ball at the left hand side, and ball between y screen

        

        if (ball_pos[0]<=BALL_RADIUS+PAD_WIDTH):

        ## x of ball run out of screen,

                if (ball_pos[1]>paddle1_pos and ball_pos[1]<paddle1_pos+PAD_HEIGHT):

                ## ball hit the paddle

                    ball_vel[0] *= -1                

                else:  ### run our screen, without hit the paddle

                    score2 += 1

                    new_ball(True)

   

    elif ( ball_pos[0] > half_width and  ball_pos[0] < WIDTH and ball_pos[1]>=BALL_RADIUS and ball_pos[1]<=HEIGHT-BALL_RADIUS ):

        ## ball at the right hand side, and ball between y screen

        

        if (ball_pos[0] > WIDTH - BALL_RADIUS - PAD_WIDTH ):

        ## x of ball run out of screen 

                if (ball_pos[1]>paddle2_pos and ball_pos[1]<paddle2_pos+PAD_HEIGHT):

                ## ball hit the paddle

                    ball_vel[0] *= -1                

                else:

                    score1 += 1

                    new_ball(False)   

                    

               

    elif (ball_pos[1]<=BALL_RADIUS or ball_pos[1]>=HEIGHT-BALL_RADIUS):

         ## ball run out of y direction

            ball_vel[1] *= -1

             

    # update paddle pos and velocity

  

            

    if   paddle1_pos <  0:

            paddle1_pos += 1

    elif paddle1_pos > HEIGHT -  PAD_HEIGHT:

            paddle1_pos -= 1

    else:

            paddle1_pos += paddle1_vel

        

    

    if paddle2_pos <  0:

            paddle2_pos += 1

    elif  paddle2_pos > HEIGHT - PAD_HEIGHT:

            paddle2_pos -= 1

    else:

        paddle2_pos += paddle2_vel

            

    

   

    

    

    # draw scores

    canvas.draw_text(str(score1),[WIDTH-365,100],50,"Pink")

    canvas.draw_text(str(score2),[WIDTH-265,100],50,"Pink")

    

    # draw ball

    

    canvas.draw_circle(ball_pos,BALL_RADIUS,1,"White","White")

   

    # draw paddles

   

    canvas.draw_polygon([[0,paddle1_pos],[0,paddle1_pos+PAD_HEIGHT],[PAD_WIDTH,paddle1_pos+PAD_HEIGHT],[PAD_WIDTH,paddle1_pos]],1,"White","White")

    canvas.draw_polygon([[WIDTH,paddle2_pos],[WIDTH,paddle2_pos+PAD_HEIGHT],[WIDTH-PAD_WIDTH,paddle2_pos+PAD_HEIGHT],[WIDTH-PAD_WIDTH,paddle2_pos]],1,"White","White")

        

def new_game():

    global paddle1_pos, paddle2_pos, paddle_vel  # these are numbers

    global score1, score2  # these are ints

    score1 = 0

    score2 = 0

    new_ball(0)

    paddle1_pos = HEIGHT/2

    paddle2_pos = HEIGHT/2

    paddle_vel = 5

    

def keydown(key):  

    

    global paddle1_vel, paddle2_vel, paddle_vel 

    paddle_vel = 5

    

    if key == simplegui.KEY_MAP["w"]:

            paddle1_vel = -paddle_vel

    elif key == simplegui.KEY_MAP["s"]:

            paddle1_vel = paddle_vel  

     

    elif key == simplegui.KEY_MAP["up"]:

            paddle2_vel = -paddle_vel

    elif key == simplegui.KEY_MAP["down"]:

            paddle2_vel = paddle_vel

        

def keyup(key):

    

    

    global paddle1_vel, paddle2_vel, paddle_vel 

    

    

    if key == simplegui.KEY_MAP["w"]:

            paddle1_vel = 0

    elif key == simplegui.KEY_MAP["s"]:

            paddle1_vel = 0

     

    elif key == simplegui.KEY_MAP["up"]:

            paddle2_vel = 0

    elif key == simplegui.KEY_MAP["down"]:

            paddle2_vel = 0

            

            

# create frame

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",new_game,200)

# start frame

new_game()

frame.start()

    

    

    

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 游戏