python中的pygame模块使用方法_Pygame的基本使用

Pygame有很多模块,每个模块又有很多方法,在此不能够逐一讲解,所以,我们通过一个实例来学习Pygame,然后再分解代码,讲解代码中的模块。

例:制作一个跳跃的小球游戏。

创建一个游戏窗口,然后在窗口内创建一个小球。以一定的速度移动小球,当小球wordpress碰到游戏窗口的边缘时,小球弹回,继续移动。可以按照如下步骤实现该功能。

(1)创建一个游戏窗口,宽和高设置为640*480。代码如下:

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

上述代码中,首先导入pygame模块,然后调用init()方法初始化pygame模块。接下来,设置h3cne窗口的宽和高,最后使用display模块显示窗体。display模块的常用方法如下表selenium所示。

方法名

功能

pygame.dispaly.init

初始化display模块

pygame.dispaly.quit

结束display模块

pygame.dispaly.get_init

如果display模块已经被初始化,则返回True

pygame.dispaly.set_mode

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

pygame.dispaly.get_surface

获取当前的Surface对象

pygame.dispaly.flip

更新整的待显示的Surface对象到屏幕上

pygame.dispaly.update

更新部分内容显示到屏幕上,如果没有参数则与flip功能相同

(2)运行上述代码,会出现一个一闪而过的黑色窗口,这是因为程序执行完成后会自动关闭。如果让窗口一直显示,需要使用while True让程序一直执行,此外,还需要设置webdriver关闭按钮。具体代码如下:

#-*-coding:utf-8-*-

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

#执行死循环,确保窗口一直显示

while True:

#检查事件

for event in pygame.event.get():

if event.type == pygame.QUIT: #如果单击关闭窗口,则退出

sys.exit()

pygame.quit() #退出pygame

上述代码中,添加了轮询事件检测。pygame.event.get()能够获取事件队列,使用for...in遍历事件,然后根据type属性判断事件类型。这里的事件处理方式与GUI类似,如event.tpye等于pygame.QUIT表示检测到关闭pygame窗口事件,pygame.KEYDOWN表示键盘按下事件,pygame.MOUSEBUTTONDOWN表示鼠标按下事件等。

(3)在窗口中添加小球。我们准备好一张ball.png图片,然后加载该图片。最后将图片显示DedeCMS在窗口中,具体代码如下:

#-*-coding:utf-8-*-

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

color = (0,0,0) #设置颜色

ball = pygame.image.load("ball.png") #加载图片

ballrect = ball.get_rect() #获取矩形区域

#执行死循环,确保窗口一直显示

while True:

#检查事件

for event in pygame.event.get():

if event.type == pygame.QUIT: #如果单击关闭窗口,则退出

sys.exit()

screen.fill(color) #填充颜色

screen.blit(ball,ballrect) #将图片画到窗口上

pygame.display.flip() #更新全部显示

pygame.quit() #退出pygame

上述代码中,使用image模块的loda()方法加载图片,返回值ball是一个Surface对象。Surface是用来代表图片的Pygame对象,可以对一个Surface对象进行涂画、变形、复制等各种操作,事实上,屏幕也只是一个Surface,pygame,display.set_mode就返回了一个屏幕Surface对象。如果将ball这个Surface对象画到screenSurface对象,需要使用bilt()方法,最后使用display模块的filp方法更新整个待显示的Surface对象到屏幕上。Surface对象的常用方法如下表所示。

方法名

功能

pygame.Surface.blit

将一个图像画到另一个图像上

pygame.Surface.convert

转换图像的像素格式

pygame.Surface.convert_Alpha

转换图像的像素格式,包含Alpha通道的转换

pygame.Surface.fill

使用颜色填充Surface

pygame.Surface.get_rect

获取Surface的矩形区域

运行上述代码,结果如下图。

(4)下面该让小球动起来了。ball.get_rect()方法返回值ballrect是一个Rect对象,该ECShop对象有一个move()方法可以用于移动矩形。move(x,y)函数有两个参数,第一个参数是X轴移动的距离,第二个参数是Y轴移动的距离。窗体左上角坐标为(0,0),例如move(100,50),如下图示。

为实现小球不停地移动,将move()函数添加到whlie循环内,具体h3c代码如下:

#-*-coding:utf-8-*-

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

color = (0,0,0) #设置颜色

ball = pygame.image.load("ball.png") #加载图片

ballrect = ball.get_rect() #获取矩形区域

speed = [5,5] #设置移动的X轴、Y轴距离

#执行死循环,确保窗口一直显示

while True:

#检查事件

for event in pygame.event.get():

if event.type == pygame.QUIT: #如果单击关闭窗口,则退出

sys.exit()

ballrect = ballrect.move(speed) #移动小球

screen.fill(color) #填充颜色

screen.blit(ball,ballrect) #将图片画到窗口上

pygame.display.flip() #更新全部显示

pygame.quit() #退出pygame

(5)运行上述代码,发现小球在屏幕中一闪而过,此时,linux小球并没有真正消失,而是移动到窗体之外,此时需要添加碰撞检测的功能。当小球与窗体任一边缘发生碰撞,则更改小球的移动方向。具体代码如下:

#-*-coding:utf-8-*-

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

color = (0,0,0) #设置颜色

ball = pygame.image.load("ball.png") #加载图片

ballrect = ball.get_rect() #获取矩形区域

speed = [5,5] #设置移动的X轴、Y轴距离

#执行死循环,确保窗口一直显示

while True:

#检查事件

for event in pygame.event.get():

if event.type == 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.right > height:

speed[1] = -speed[1]

screen.fill(color) #填充颜色

screen.blit(ball,ballrect) #将图片画到窗口上

pygame.display.flip() #更新全部显示

pygame.quit() #退出pygame

上述代码中,添加了碰撞检测功能。如果碰到左右边缘,则更改X轴数据为负数:如果碰到上下边缘,则更改Y轴数据为负数。运行结果如下图。

(6)运行上述代码发现好像有多个小球在飞快移动,这是因为自动化测试运行上述代码的时间非常短,导致肉眼观察出错觉,因此需要添加一个“时钟”来控制程序运行的时间。这是就需要使用软件测试pygame的time模块。使用pygame时钟之前,必须先创建Clock对象的一个实例,然后在while循环中设置多长时间运行一次。具体代码如下:

#-*-coding:utf-8-*-

import sys #导入sys模块

import pygame #导入pygame模块

pygame.init() #初始化pygame

size = width,height = 640,480 #设置窗口

screen = pygame.display.set_mode(size) #显示窗口

color = (0,0,0) #设置颜色

ball = pygame.image.load("ball.png") #加载图片

ballrect = ball.get_rect() #获取矩形区域

speed = [5,5] #设置移动的X轴、Y轴距离

clock = pygame.time.Clock() #设置时钟

#执行死循环,确保窗口一直显示

while True:

clock.tick(60) #每秒执行60次

#检查事件

for event in pygame.event.get():

if event.type == 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.right > height:

speed[1] = -speed[1]

screen.fill(color) #填充颜色

screen.blit(ball,ballrect) #将图片画到窗口上

pygame.display.flip() #更新全部显示

pygame.quit() #退出pygame

至此,就完成了测试跳跃的小球游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java mongodb 插入数据_mongoDB 插入数据 用java实现

import java.net.UnknownHostException;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBObject;import com.mongodb.Mongo;/** *用java 往mongoDB插入数据 * author wwd* */public class InsertData {publi…

python的特征提取实验一_Spark 2.1.0 入门:特征抽取 — TF-IDF(Python版)

这一部分我们主要介绍和特征处理相关的算法&#xff0c;大体分为以下三类&#xff1a;特征抽取&#xff1a;从原始数据中抽取特征特征转换&#xff1a;特征的维度、特征的转化、特征的修改特征选取&#xff1a;从大规模特征集中选取一个子集特征提取TF-IDF (HashingTF and IDF)…

java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站

Java中的java.util.LinkedList.addLast()方法用于在LinkedList的末尾插入特定元素。句法&#xff1a;void addLast(Object element)参数&#xff1a;此函数接受单个参数元素&#xff0c;如上面的语法所示。此参数指定的元素将附加在列表的末尾。返回值&#xff1a;此方法不返回…

macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法

4月0日凌晨&#xff0c;苹果发布了iOS12.3 beta2&#xff0c;作为iOS12.3第二个测试版&#xff0c;相比前一个版本&#xff0c;发布时间间隔近2周&#xff0c;这次依然是小版本更新&#xff0c;不过相对良心一些&#xff0c;主要是多了一些与国内用户相关的东西。iOS12.3 beta …

java技术教程视频_Spring开发视频教程高级篇+源码(400M)33讲

Spring开发视频教程高级篇源码(400M)33讲01_全面阐释Spring及其各项功能.rar 02_搭建与测试Spring的开发环境.rar 03_编码剖析Spring管理Bean的原理.rar 04_Spring的三种实例化Bean的方式.rar 05_配置Spring管理的bean的作用域.rar 06_Spring管理的Bean的生命周期.rar 07_编码剖…

python的常见矩阵除法_Numpy矩阵除法返回所有零

我对下面的矩阵有个除法错误。我想用行和的101向量除以1010matrix。在[[5731, 3, 20, 8, 12, 54, 46, 8, 39, 2],[ 2, 6472, 47, 24, 7, 44, 7, 11, 116, 12],[ 55, 36, 5296, 104, 84, 27, 106, 53, 183, 14],[ 50, 49, 132, 5312, 2, 253, 36, 58, 142, 97],[ 16, 28, 36, 9,…

java rc2加密_急求java RC2加密算法

下面是一段C RC2加密 要求要用java 重写 能互相加密解密QSBEncryptRc2::QSBEncryptRc2(){EncryKey "DingXin Communication Key 20080613";}//解密失败时返回失败描述AnsiString QSBEncryptRc2::GetDecryptErrMsg(){int ErrorCode;AnsiString ErrMsg;ErrorCode …

linux配置usb主从_杂集:浅谈关于Mongodb数据库主从复制

Linux下Mongodb数据库主从复制配置Mongodb的三种集群搭建的方式&#xff1a;Master-Slaver&#xff1a;主从[目前被副本集取代]。Replica Set&#xff1a;副本集。Sharding&#xff1a;切片。Mongodb单实例缺点&#xff1a;适合简易开发时使用&#xff0c;生产使用不行&#xf…

java读取邮箱附件_使用javamail获取附件内容

我正在使用javamail来自动化一些电子邮件处理。使用javamail获取附件内容我设法连接到pop3服务器并获取消息。其中一些包含附件。根据邮件标题&#xff0c;我可以“预测”我需要获取的附件的文件名。但我无法得到它的内容:(我有一个函数public byte[] searchForContent(Part pa…

高斯拟合 vc++代码_NMA2020W1 极大似然法模型拟合与bootstrap

常见的线性模型&#xff1a; 求解方式有两种&#xff0c;一种是计算均方误差&#xff08;MSE&#xff09;&#xff0c;使得均方误差最小。图1找到梯度为零的点即可。而之前一直比较模糊的最大似然法也比较清楚了。一般线性模型&#xff0c;我们假定误差项是符合高斯分布的&…

java文件快速扫描仪_Java扫描仪具有示例的NextNextShort()方法

扫描仪类hasNextShort()方法语法&#xff1a;public boolean hasNextShort();public boolean hasNextShort(int rad);hasNextShort()方法在java.util包中可用。hasNextShort()方法用于检查此扫描程序在其输入中是否具有下一个标记&#xff0c;是否可以将其作为隐式基数中的shor…

python sqlite并发处理_python sqlite大数据 处理

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

java sax xml文件解析_java解析xml文件-DOM/SAX

java解析xml文件的两种方式1&#xff1a;DOM原理&#xff1a;把整个文档加载到内存&#xff0c;转化成dom树&#xff0c;之后应用程序可以随机的访问dom树的任何数据&#xff0c;灵活 快&#xff0c;但消耗内存一个简单的xml使用java解析//builder工厂DocumentBuilderFactory f…

python现有两个磁盘文件a和b_有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件中的信息合并,输出到一个新文件C中。...

首先&#xff0c;在.cpp所在的文件夹下建立A.txt与B.txt。向其中输入字母。#include#include#includeint main(){FILE *a,*b,*c;char ch[100],outfile[10];int i0,n;void paixu(char a[100],int n);if((afopen("A.txt","r"))NULL){printf("Cant open …

python 远程控制_用 Python 远程控制你的电脑

用 Python 远程控制你的电脑一、前言很多时候我们有这种需求&#xff0c;因为程序运行比较耗时&#xff0c;但是我们没有足够的时间等待。这个时候我们就可以用 Python 做一个远程控制电脑的小工具&#xff0c;实现远程控制电脑。当然&#xff0c;我们能做的操作十分有限&#…

摄像头图像分析目标物体大小位置_一文读懂图像定位及跟踪技术

文 | 传感器技术在科学技术日新月异的今天&#xff0c;人们对机器设备的智能性、自主性要求也越来越高&#xff0c;希望其完全替代人的角色&#xff0c;把人们从繁重、危险的工作任务中解脱出来&#xff0c;而能否像人一样具有感知周围环境的能力已成为设备实现智能化自主化的关…

java 相对路径获取_在java项目中通过相对路径获取资源的方式

1.可以通过 类名.class.getResource方法获取或者getSystemResource2.可以通过当前线程 Thread.currentThread().getContextClassLoader().getResource获取public class TestDemo {public static void main(String[] args) throws FileNotFoundException, IOException {Properti…

python循环嵌套的外循环必须完全包含内循环_Python:循环与嵌套循环实现规律数列...

很多人觉得编程很难&#xff0c;其实换个想法&#xff0c;这就是个用来解决问题的工具&#xff0c;我们为了解决实际问题而来学习和使用编程&#xff0c;这样编程学习有了目的性&#xff0c;动力会更强。就像现在十分热门的Python技术&#xff0c;就是人工智能领域所需求的&…

python爬取正确但不出文件_使用BeautifulSoup进行Python抓取时不显示所有行

我是美容小组的新手。我试图从ESPN Fantasy Basketball Standings中获取“Season Stats”表&#xff0c;但并不是返回所有行。经过一番研究&#xff0c;我认为这可能是一个问题html.parser&#xff0c;所以我用了lxml。我得到了同样的结果。如果有人能告诉我如何得到所有球队的…

pat乙级相当于什么水平_雅思6.5是什么水平?相当于托福多少分?

雅思和托福是当前社会中非母语人士的主流英语水平测试。准备出国留学的学生对这两项考试并不陌生。对于一些学生来说&#xff0c;仅靠雅思成绩并不足以申请他们最喜欢的学校。特别是对于申请北美院校的学生&#xff0c;托福成绩是申请时提交语言成绩的优先考虑事项。那么&#…