# 编写一个Python程序,实现一个眨眼的动画效果。该动画效果应该在屏幕上显示一个人脸,并在一定的时间间隔内使眼睛闭合和睁开。
import pygame
import time

pygame.init()
# 设置窗口大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 设置人脸参数
face_width = 200
face_height = 200
face_x = screen_width // 2 - face_width // 2
face_y = screen_height // 2 - face_height // 2
# 设置眼睛参数
eye_width = 20
eye_height = 10
eye_offset = 30
# 设置嘴巴参数
mouth_width = 60
mouth_height = 20
mouth_offset = 70
# 设置动画参数
blink_duration = 0.5  # 眨眼动画持续时间(秒)
blink_interval = 3  # 眨眼间隔时间(秒)
mouth_open_duration = 0.5  # 嘴巴张开动画持续时间(秒)
mouth_interval = 2  # 嘴巴动画间隔时间(秒)
# 初始化时钟
clock = pygame.time.Clock()
running = True
blink_time = 0
mouth_time = 0
blink = False
mouth_open = False
while running:
    screen.fill(WHITE)
    # 绘制人脸
    pygame.draw.ellipse(screen, BLACK, (face_x, face_y, face_width, face_height))
    # 绘制眼睛
    if blink:
        # 眨眼
        pygame.draw.ellipse(screen, WHITE, (face_x + eye_offset, face_y + eye_offset, eye_width, eye_height))
        pygame.draw.ellipse(screen, WHITE,
                            (face_x + face_width - eye_offset - eye_width, face_y + eye_offset, eye_width, eye_height))
    else:
        # 正常眼睛
        pygame.draw.ellipse(screen, BLACK, (face_x + eye_offset, face_y + eye_offset, eye_width, eye_height))
        pygame.draw.ellipse(screen, BLACK,
                            (face_x + face_width - eye_offset - eye_width, face_y + eye_offset, eye_width, eye_height))
    # 绘制嘴巴
    if mouth_open:
        # 张开嘴巴
        pygame.draw.ellipse(screen, WHITE,
                            (face_x + mouth_offset, face_y + mouth_offset * 2, mouth_width, mouth_height))

    else:
        # 闭嘴
        pygame.draw.ellipse(screen, BLACK,
                            (face_x + mouth_offset, face_y + mouth_offset * 2, mouth_width, mouth_height))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # 更新眨眼动画
    current_time = time.time()
    if current_time - blink_time > blink_interval:
        blink = not blink
        blink_time = current_time
    if blink and current_time - blink_time > blink_duration:
        blink = False
    # 更新嘴巴动画
    if current_time - mouth_time > mouth_interval:
        mouth_open = True
        mouth_time = current_time
    if mouth_open and current_time - mouth_time > mouth_open_duration:
        mouth_open = False
    pygame.display.flip()
    clock.tick(60)
pygame.quit()

这段代码使用Python的pygame库来创建一个简单的动画,展示一个人的脸部,其中眼睛会定时眨眼。下面是代码的解析:

  1. 初始化pygame和设置窗口
    import pygame
    import time
    pygame.init()
    screen_width = 800
    screen_height = 600
    screen = pygame.display.set_mode((screen_width, screen_height))
    
    这部分代码导入必要的库,初始化pygame,并设置了一个宽800像素、高600像素的窗口。
  2. 颜色和参数设置
    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    # 人脸、眼睛和嘴巴的尺寸和位置参数
    
    这里定义了两种颜色(白色和黑色)以及人脸、眼睛和嘴巴的尺寸和位置参数。
  3. 动画参数设置
    blink_duration = 0.5  # 眨眼动画持续时间(秒)
    blink_interval = 3    # 眨眼间隔时间(秒)
    mouth_open_duration = 0.5  # 嘴巴张开动画持续时间(秒)
    mouth_interval = 2    # 嘴巴动画间隔时间(秒)
    
    这些参数控制眨眼和嘴巴动画的持续时间和间隔。
  4. 主循环
    running = True
    blink_time = 0
    mouth_time = 0
    blink = False
    mouth_open = False
    while running:
        # ...动画绘制和事件处理...
    
    主循环负责绘制动画和处理事件。running变量控制循环是否继续,blinkmouth_open变量控制眼睛和嘴巴的状态。
  5. 绘制人脸、眼睛和嘴巴
    screen.fill(WHITE)  # 清屏为白色
    pygame.draw.ellipse(screen, BLACK, (face_x, face_y, face_width, face_height))  # 绘制人脸
    # 根据blink变量绘制眨眼或正常眼睛
    # 根据mouth_open变量绘制张开或闭合的嘴巴
    
    这部分代码根据当前的状态绘制人脸、眼睛和嘴巴。
  6. 动画更新
    current_time = time.time()
    # 根据时间间隔更新眨眼和嘴巴状态
    
    每次循环时,代码会检查是否到了眨眼或嘴巴状态改变的时间,并相应地更新状态。
  7. 事件处理和屏幕更新
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.display.flip()
    clock.tick(60)
    
    这部分代码处理退出事件,并更新屏幕。pygame.display.flip()会更新整个屏幕的显示内容,而clock.tick(60)会确保游戏以最大60帧每秒的速度运行。
  8. 退出pygame
    pygame.quit()
    
    当主循环结束后,调用pygame.quit()来关闭pygame窗口并退出程序。
    整体来说,这段代码创建了一个简单的图形界面,其中包含一个会眨眼的人脸。通过pygame的事件循环和图形绘制功能,它能够展示动态的眨眼效果。
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐