python跳跃小球


初识:python pygame 是一款免费的适用于2D电子游戏开发的软件包,有良好的跨平台特性

安装:pip install pygame

初始化加载模块:开始

import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化

创建窗口

pygame.display模块
  • 作用:创建游戏主窗口

  • 常见的内置方法:

方法

作用

pygame.display.init()

初始化display模块

pygame.display.quit()

结束display模块

pygame.display.get_init()

判断是否被初始化

pygame.display.set_mode()

初始化一个准备显示的界面

pygame.display.get.surface()

获取当前surface对象

pygame.display.flip()

显示刷新

pygame.display.update()

更新部分内容显示到屏幕

  • 程序更新:

import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
  • 上例运行,会出现一个黑色的窗口且一闪而过,这是因为执行完毕后自动关闭,若想让窗口一直显示,需要使用循环反复执行,手动关闭

  • 程序更新:

import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
while True:  # 循环显示窗口
    screen = pygame.display.set_mode(size)  # 显示窗口
  • 上例程序运行,对于窗口增加了死循环可以达到窗口的一直显示,但无法实现手动关闭,由于pygame采用事件驱动,可以使用事件检测方法实现窗口的手动关闭

import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
while True:  # 循环显示窗口
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()
  • 上例程序执行,添加了轮训事件的检测,pygame.event.get()可以获取事件队列,通过for循环读取每一个事件,在根据type属性判断事件的类型是否属于关闭窗口事件

添加小球

image模块
  • 作用:用于pygame中图像的传输及处理

  • 常见方法:

方法

作用

pygame.image.load()

从文件加载图片

pygame.image.save()

将图片保存到磁盘

pygame.image.get_extended()

检测是否支持载入扩展图像格式

pygame.image.tostring()

将图像转为字符串

pygame.image.fromstring()

将字符串转为图像

  • 支持图像格式:jpg、png、gif、bmp、pcx等

  • 注意:当一个图像成功加载后,或被转为surface对象,允许在加载后的图像上进行后期处理,如:描边、设置像素大小、捕获图形区域等

  • 程序更新:

import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
ball = pygame.image.load('ball.jpg')  # 加载小球图片,不会显示
​
while True:  # 循环显示窗口
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()

10.6 处理surface对象

10.6.1 image.load()方法加载图片后会返回一个surface对象,表示图片,可以进行后期处理,如:变形、复制、涂画等操作
10.6.2 常用方法

方法

作用

pygame.Surface.blit()

将图形绘制到另一个图像上

pygame.Surface.convert()

转换图像的格式

pygame.Surface.fill()

使用颜色填充Surface区域

pygame.Surface.get_rect()

获取Surface矩形区域

10.6.3 程序更新:
import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
ball = pygame.image.load('ball.jpg')  # 加载小球图片,不会显示
ballrect = ball.get_rect()  # 获取矩形区域,本质为小球图片所占的区域,只不过没有内容
​
while True:  # 循环显示窗口
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()
​
    screen.fill(color)  # 填充颜色
    screen.blit(ball, ballrect)  # 将小球图片加载到窗口矩形区域
    pygame.display.flip()  # 刷新

移动小球

小球ballrect拥有move()方法,可以用于移动,move(x,y)表示x轴与y轴的移动距离,左上角坐标为(0,0),可以设置move(5,5)
程序更新
import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
ball = pygame.image.load('ball.jpg')  # 加载小球图片,不会显示
ballrect = ball.get_rect()  # 获取矩形区域,本质为小球图片所占的区域,只不过没有内容
​
while True:  # 循环显示窗口
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()
    ballrect = ballrect.move(5, 5)  # 斜向移动小球区域
    screen.fill(color)  # 填充颜色
    screen.blit(ball, ballrect)  # 将小球图片加载到窗口矩形区域
    pygame.display.flip()  # 刷新
上例运行,小球移动太快了,代码运行时间太短了,导致肉眼出现视觉错乱,因此需要添加一个时钟来控制程序的运行

pygame.time模块

作用:pygame 中控制时间的模块
常见的方法

方法

作用

pygame.time.get_ticks()

获取以毫秒为单位的时间

pygame.time.wait()

暂停一段时间

pygame.time.set_timer()

在事件队列上重复创建一个事件

pygame.time.Clock()

创建一个对象跟踪时间

  • pygame中时间以毫秒(1/1000秒)表示

程序更新
import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
ball = pygame.image.load('ball.jpg')  # 加载小球图片,不会显示
ballrect = ball.get_rect()  # 获取矩形区域,本质为小球图片所占的区域,只不过没有内容
clock = pygame.time.Clock()  # 创建时钟
​
while True:  # 循环显示窗口
    clock.tick(60)  # 更新时钟,程序不会超过60帧
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()
    ballrect = ballrect.move(5, 5)  # 斜向移动小球区域
    screen.fill(color)  # 填充颜色
    screen.blit(ball, ballrect)  # 将小球图片加载到窗口矩形区域
    pygame.display.flip()  # 刷新

碰撞检测

上例中吗,小球实现慢速移动吗,但会移动窗体之外,所以增加碰撞检测,即小球区域与窗体任意一个边缘发生碰撞则更改小球的移动方法
程序更新:结束
import sys
import pygame
​
pygame.init()  # 调用init()方法进行初始化
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色
ball = pygame.image.load('ball.jpg')  # 加载小球图片,不会显示
ballrect = ball.get_rect()  # 获取矩形区域,本质为小球图片所占的区域,只不过没有内容
clock = pygame.time.Clock()  # 创建时钟
speed = [5, 5]  # 设置x,y轴的移动距离
​
while True:  # 循环显示窗口
    clock.tick(60)  # 更新时钟,程序不会超过60帧
    # 检查事件:显示窗口、点击退出都以一种事件,通过循环读取事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击了关闭叉叉则执行关闭窗口退出系统
            pygame.quit()
            sys.exit()
​
    ballrect = ballrect.move(speed)  # 斜向移动小球区域
    if ballrect.left<0 or ballrect.right>width:  # 左右边缘碰撞检测
        speed[0] = -speed[0]
​
    if ballrect.top<0 or ballrect.bottom>height:  # 上下边缘碰撞检测
        speed[1] = -speed[1]
​
    screen.fill(color)  # 填充颜色
    screen.blit(ball, ballrect)  # 将小球图片加载到窗口矩形区域
    pygame.display.flip()  # 刷新

效果图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fish_1112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值