pygame4 练习课
admin
2024-03-15 08:15:58
0

1 显示一个pygame窗口

1)初始化

2)  设置窗口(缓存)大小

3)将窗口(缓存)中的内容显示出来

代码如下:

import pygamepygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
pygame.display.flip()while True:pass

2 pygame的窗口消息

前面可以显示一个最简单的白色屏幕内容,但整个窗口无法操作了,是因为我们没有设置窗口的响应事件,一般每个pygame程序都有一个无限循环用来处理各种窗口事件:

while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(0)

以上代码只是处理了当窗口收到退出事件时,整个程序退出

3 pygame画图

1)画圆:pygame.draw.circle(surface, color, center, radius,width=0)

surface通常是screen

color表示的是颜色,即rgb的值,红色为[255, 0, 0]

center:表示圆心坐标,平面上的坐标通常是两个值,比如窗口中心[320, 240]

radius:表示直径,我们可以指定为100

width:默认为0,表示画的为实心圆,不是0时表示画的是空心圆

2)画矩形:pygame.draw.rect(surface, color, rect, width=0)

surface通常是screen

color表示颜色

rect表示矩形大小,一般为4个值,前两个值表示矩形左上角坐标,第3个值表示矩形宽度,第4个值表示矩形高度, 如[100, 100, 120, 60], 表示坐标为[100, 100]的位置画一个宽度为120,高度为60的长方形

width:与前面的用法一致

3) 画一条线段:pygame.draw.line(surface, color, start_pos, end_pos)

start_pos表示起点坐标

end_pos表示终点坐标

示例用4根线段画一个矩形的代码:

lines = [[200, 200], [400, 200], [400, 400], [200, 400], [200, 200]]
for i in range(len(lines)-1):pygame.draw.line(screen, [255, 0, 0], lines[i], lines[i+1])

4)画一组线段:pygame.draw.lines(surface, color, closed, points)

解决一组坐标画直线的难题

closed:为True表示假如组成的图形有缺口,则封口,False表示不主动封口

points即为连续的点坐标

还是上面的点,画这个图只需一行代码:

pygame.draw.lines(screen, [0, 255, 0], False, lines)

5)画点有几种方法:

1 利用矩形画点:矩形宽度和高度均为1,width也设为1

比如我们利用点画一条直线

代码:

for i in range(50):x = iy = 10 * x + 5pygame.draw.rect(screen, [255, 0, 0], [x, y, 1, 1], width=1)

2 利用set_at直接改变像素的颜色

代码:

for i in range(50):x = iy = 10 * x + 5screen.set_at([x, y], [255, 0, 0])

4 pygame动画

1、加载图片

my_ball = pygame.image.load("beach_ball.png")

2、显示图片

screen.blit(my_ball, [x, y])

3、动画显示的几个关键点:

1)、擦除之前的图片(覆盖)

pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90], 0)

2)、在新位置上显示图片

screen.blit(my_ball, [x, y])

3)、延迟恰当的时间

pygame.time.delay

4、显示动画

1)显示一个简单的动画

import sysimport pygamepygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")x = 0
y = 100
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(0)pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])x += 10screen.blit(ball, [x, y])pygame.time.delay(100)pygame.display.flip()

2)显示左右弹的动画:

"""
显示一个左右弹的球
"""
import sysimport pygamepygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")x = 0
y = 100
xspeed = 10
yspeed = 10
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(0)pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])x += xspeedy += yspeedif x + 90 > 640:xspeed = -xspeedif x < 0:xspeed = -xspeedif y + 90 > 480:yspeed = -yspeedif y < 0:yspeed = -yspeedscreen.blit(ball, [x, y])pygame.time.delay(100)pygame.display.flip()

3)显示上下左右弹的动画

"""
显示一个上下左右弹的球
"""
import sysimport pygamepygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
ball = pygame.image.load("beach_ball.png")x = 0
y = 100
xspeed = 10
yspeed = 10
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit(0)pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])x += xspeedy += yspeedif x + 90 > 640:xspeed = -xspeedif x < 0:xspeed = -xspeedif y + 90 > 480:yspeed = -yspeedif y < 0:yspeed = -yspeedscreen.blit(ball, [x, y])pygame.time.delay(100)pygame.display.flip()

4)显示一个翻滚的球的动画

前面球的移动过程一直像是平移的过程,不够真实,实际球在运动过程中应该是翻滚的动作,这时一幅图显示起来就不行了,需要连续的图片依次显示,关键代码如下:

# 加载图片一次加载一组
balls = []
for i in range(4):ball = pygame.image.load(f"beach_ball{i}.png")balls.append(ball)
# 显示图片,每次显示组中的一张,显示完后再显示下一张,依次显示
screen.blit(balls[index], [x, y])
index += 1
if index > 3:index = 0

完整代码:

import pygame, syspygame.init()
screen = pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
# 加载图片一次加载一组
balls = []
for i in range(4):ball = pygame.image.load(f"beach_ball{i}.png")balls.append(ball)
x = 50
y = 50
x_speed = 10
index = 0
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()pygame.time.delay(100)pygame.draw.rect(screen, [255, 255, 255], [x, y, 90, 90])x = x + x_speedif x > screen.get_width():x = 0 - 90# 显示图片,每次显示组中的一张,显示完后再显示下一张,依次显示screen.blit(balls[index], [x, y])index += 1if index > 3:index = 0pygame.display.flip()

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...