您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:pygame实现方块动画实例讲解

51自学网 2022-02-21 10:46:34
  python
这篇教程pygame实现方块动画实例讲解写得很实用,希望能帮到您。

导入组件

首先导入需要的组件,pygame游戏组件,time是时间组件

import pygame, time, sysfrom pygame.locals import *

绘制窗口

这里定义了一个480*600的屏幕,设置了窗口标题,并设置了屏幕的填充颜色为白色

# 屏幕的宽高WIDTH = 480HEIGHT = 600# 颜色的常量WHITE = (255, 255, 255)surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30)pygame.display.set_caption("矩形动画")while True:    for event in pygame.event.get():        if event.type == QUIT:            pygame.quit()            sys.exit()    surface.fill(WHITE)    pygame.display.update()

在这里插入图片描述

绘制矩形

RED = (255, 0, 0)# 定义矩形字典变量rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED}---    surface.fill(WHITE)    pygame.draw.rect(surface,  rect['color'], rect['rect'])---

让矩形动起来

从运动来看只有中心向四方移动的四种可能。定义四个方向的常量。
在这里插入图片描述

# 方向常量UPLEFT = 'upleft'UPRIGHT = 'upright'DOWNLEFT = 'downleft'DOWNRIGHT = 'downright'

然后定义矩形的移动速度

# 矩形移动的速度MOVESPEED = 2 

给矩形设置一个初始的移动方向

# 定义矩形字典变量rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT}

根据矩形的移动方向改变对应的起始位置。根据矩形不同的位置改变矩形的起始位置。

    # 如果是上左,则x y 都减少    if rect['direction'] == UPLEFT:        rect['rect'].left -= MOVESPEED        rect['rect'].top -= MOVESPEED    # 如果是上右,则x 增加 y 减少    if rect['direction'] == UPRIGHT:        rect['rect'].left += MOVESPEED        rect['rect'].top -= MOVESPEED    # 如果是下左,则x 减少 y 增加    if rect['direction'] == DOWNLEFT:        rect['rect'].left -= MOVESPEED        rect['rect'].top += MOVESPEED    # 如果是下右,则x y 都增加    if rect['direction'] == DOWNRIGHT:        rect['rect'].left += MOVESPEED        rect['rect'].top += MOVESPEED

不断的改变矩形的位置,要注意防止移出窗口,当触及到边缘,沿来的方向将矩形改变方向即可。

    # 如果上溢出窗口    if rect['rect'].top <= 0:        if rect['direction'] == UPLEFT:            rect['direction'] = DOWNLEFT        if rect['direction'] == UPRIGHT:            rect['direction'] = DOWNRIGHT    # 如果下溢出窗口    if rect['rect'].bottom >= HEIGHT:        if rect['direction'] == DOWNRIGHT:            rect['direction'] = UPRIGHT        if rect['direction'] == DOWNLEFT:            rect['direction'] = UPLEFT    # 如果右溢出窗口    if rect['rect'].right >= WIDTH:        if rect['direction'] == DOWNRIGHT:            rect['direction'] = DOWNLEFT        if rect['direction'] == UPRIGHT:            rect['direction'] = UPLEFT    # 如果右溢出窗口    if rect['rect'].left <= 0:        if rect['direction'] == DOWNLEFT:            rect['direction'] = DOWNRIGHT        if rect['direction'] == UPLEFT:            rect['direction'] = UPRIGHT

这样就实现了功能。每次循环让时间暂停一会即可。

请添加图片描述

这里附上所有代码

import pygame, time, sysfrom pygame.locals import *# 屏幕的宽高WIDTH = 480HEIGHT = 600# 颜色的常量WHITE = (255, 255, 255)RED = (255, 0, 0)# 方向常量UPLEFT = 'upleft'UPRIGHT = 'upright'DOWNLEFT = 'downleft'DOWNRIGHT = 'downright'# 矩形移动的速度MOVESPEED = 2# 定义矩形字典变量rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT}surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30)pygame.display.set_caption("矩形动画")while True:    print(rect)    for event in pygame.event.get():        if event.type == QUIT:            pygame.quit()            sys.exit()    surface.fill(WHITE)    # 如果是上左,则x y 都减少    if rect['direction'] == UPLEFT:        rect['rect'].left -= MOVESPEED        rect['rect'].top -= MOVESPEED    # 如果是上右,则x 增加 y 减少    if rect['direction'] == UPRIGHT:        rect['rect'].left += MOVESPEED        rect['rect'].top -= MOVESPEED    # 如果是下左,则x 减少 y 增加    if rect['direction'] == DOWNLEFT:        rect['rect'].left -= MOVESPEED        rect['rect'].top += MOVESPEED    # 如果是下右,则x y 都增加    if rect['direction'] == DOWNRIGHT:        rect['rect'].left += MOVESPEED        rect['rect'].top += MOVESPEED    # 如果上溢出窗口    if rect['rect'].top <= 0:        if rect['direction'] == UPLEFT:            rect['direction'] = DOWNLEFT        if rect['direction'] == UPRIGHT:            rect['direction'] = DOWNRIGHT    # 如果下溢出窗口    if rect['rect'].bottom >= HEIGHT:        if rect['direction'] == DOWNRIGHT:            rect['direction'] = UPRIGHT        if rect['direction'] == DOWNLEFT:            rect['direction'] = UPLEFT    # 如果右溢出窗口    if rect['rect'].right >= WIDTH:        if rect['direction'] == DOWNRIGHT:            rect['direction'] = DOWNLEFT        if rect['direction'] == UPRIGHT:            rect['direction'] = UPLEFT    # 如果右溢出窗口    if rect['rect'].left <= 0:        if rect['direction'] == DOWNLEFT:            rect['direction'] = DOWNRIGHT        if rect['direction'] == UPLEFT:            rect['direction'] = UPRIGHT    pygame.draw.rect(surface,  rect['color'], rect['rect'])    pygame.display.update()    time.sleep(0.02)

到此这篇关于pygame实现方块动画的文章就介绍到这了,更多相关pygame 方块动画内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


用Python实现一个模仿UP主弹幕控制的直播间功能
Python字典遍历的陷阱
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。