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.pswp.cn/news/533623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533623.shtml
英文地址,請注明出處:http://en.pswp.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;托福成績是申請時提交語言成績的優先考慮事項。那么&#…