pygame最简单的弹球类动画演示

""" pygame最简单的弹球类动画演示.py
"""
 
import pygame
import random
 
# 定义颜色常量
BLACK = (0, 0, 0)
CYAN = (0, 255, 255)

# 定义屏幕常量
SCREEN_WIDTH = 700
SCREEN_HEIGHT = 500
BALL_SIZE = 25 
 
class Ball:
    """    非常简单的球类,只是用来记录坐标和速度    """
    def __init__(self):
        self.x = 0
        self.y = 0
        self.dx = 0
        self.dy = 0 
 
def make_ball():
    """    生成一个弹球    """
    ball = Ball()
    # 生成一个弹球,注意它的x和y坐标范围,这样就不会在边缘上生成了.    
    ball.x = random.randrange(BALL_SIZE, SCREEN_WIDTH - BALL_SIZE)
    ball.y = random.randrange(BALL_SIZE, SCREEN_HEIGHT - BALL_SIZE)
 
    # 弹球的速度,也决定了它的方向
    ball.dx = random.randrange(-2, 3) # 每帧移动的水平距离
    ball.dy = random.randrange(-2, 3) # 每帧移动的垂直距离
 
    return ball 
 
def main():
 
    pygame.init()
 
    # 设置屏幕的宽度和高度
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)
 
    pygame.display.set_caption("pygame最简单的弹球类动画演示")
 
    #  此变量用来结束while循环的
    done = False
 
    # 此变量用来设置帧率的
    clock = pygame.time.Clock()
 
    ball_list = []    # 弹球列表用来装弹球的
 
    ball = make_ball()# 生成一个弹球
    ball_list.append(ball) # 把它添加到列表
 
    # -------- 动画主循环 -----------
    while not done:
        # --- 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            elif event.type == pygame.KEYDOWN:
                # 按空格键生成一个弹球
                if event.key == pygame.K_SPACE:
                    ball = make_ball()
                    ball_list.append(ball)
 
        # --- 每个弹球都更新坐标
        for ball in ball_list:
            # Move the ball's center
            ball.x += ball.dx
            ball.y += ball.dy
 
            # 碰到边缘就反弹
            if ball.y > SCREEN_HEIGHT - BALL_SIZE or ball.y < BALL_SIZE:
                ball.dy *= -1
            if ball.x > SCREEN_WIDTH - BALL_SIZE or ball.x < BALL_SIZE:
                ball.dx *= -1
 
        # --- 重画背景为黑
        screen.fill(BLACK)
 
        # 画所有的球球
        for ball in ball_list:
            pygame.draw.circle(screen, CYAN, [ball.x, ball.y], BALL_SIZE)
 
        # --- 设置每秒显示60幅画
        clock.tick(60)
 
        # 更新屏幕显示
        pygame.display.flip()
 
    # 安全退出pygame
    pygame.quit()
 
if __name__ == "__main__":
    main()