教你利用pygame模塊制作跳躍小球小游戲
pygame是用來開發(fā)游戲的一套基于SDL的模板,它可以是python創(chuàng)建完全界面化的游戲和多媒體程序,而且它基本上可以在任何系統(tǒng)上運(yùn)行。本文將詳細(xì)介紹你利用pygame模塊制作跳躍小球小游戲的相關(guān)內(nèi)容,下面來一起看看吧
實(shí)現(xiàn)方法
首先創(chuàng)建一個(gè)游戲窗口,然后再窗口內(nèi)創(chuàng)建一個(gè)小球。以一定的速度移動(dòng)小球,當(dāng)小球碰到游戲窗口的邊緣時(shí),小球彈回,繼續(xù)移動(dòng)。可以按照如下步驟實(shí)現(xiàn)該功能。
(1)首先來創(chuàng)建一個(gè)游戲窗口,寬和高設(shè)置為640×480.代碼如下:
import sys#導(dǎo)入sys模塊 import pygame#導(dǎo)入pygame模塊 pygame.init()#初始化pygame size=with,height=640,480 #設(shè)置窗口大小 screen=pygame.display.set_model(size) #顯示窗口
上述代碼中,首先導(dǎo)入pygame模塊,該模塊在上一篇文章中介紹過,直接用pip命令安裝即可。然后調(diào)用init()方法初始化pygame模塊。接下來,設(shè)置窗口的寬和高,最后使用display模塊顯示窗體。display模塊的常用方法如下:
方法名 | 功能 |
pygame.display.init | 初始化init模塊 |
pygame.display.quit | 結(jié)束display模塊 |
pygame.display.get_init | 如果display模塊已經(jīng)被初始化,則返回true |
pygame.display.set_mode | 初始化一個(gè)準(zhǔn)備顯示的界面 |
pygame.display.get_surface | 獲取當(dāng)前的surface對(duì)象 |
pygame.display.flip | 更新整個(gè)待顯示的surface對(duì)象到屏幕上 |
pygame.display.update | 更新部分內(nèi)容顯示到屏幕上,如果沒有參數(shù)則與flip功能相同 |
(2)當(dāng)我們運(yùn)行上述代碼時(shí),會(huì)出現(xiàn)一個(gè)一閃而過的窗口,這是因?yàn)槌绦驁?zhí)行完畢后會(huì)自動(dòng)關(guān)閉。如果讓窗口一直顯示,需要使用while true循環(huán)讓程序一直執(zhí)行,此外,還需要設(shè)置關(guān)閉按鈕。如果不設(shè)置關(guān)閉按鈕,雖然在界面會(huì)顯示紅叉關(guān)閉按鈕,但點(diǎn)擊后就會(huì)出現(xiàn)程序無響應(yīng)的錯(cuò)誤,然后強(qiáng)制關(guān)閉了程序。
在pycharm演示如下
代碼:
運(yùn)行:
點(diǎn)擊紅叉就會(huì)關(guān)閉窗口。
上述代碼中,添加了輪詢時(shí)間監(jiān)測。pygame.event.get()能夠獲取事件隊(duì)列,使用for in遍歷事件,然后根據(jù)type屬性判斷事件類型。這里的事件處理方式與GUI類似,如event.type等于pygame.QUIT表示檢測到關(guān)閉pygame窗口事件,pygame.KEYDOWN表示鍵盤按下事件,pygame.MOUSEBUTTONDOWN表示鼠標(biāo)按下事件等。
(3)在窗口中添加小球。我們先準(zhǔn)備一張ball.png圖片,然后加載圖片,最后將圖片顯示在窗口中,在pycharm中演示如下。
代碼:
運(yùn)行:
上述代碼中,使用image模塊的load方法加載圖片,返回值ball是一個(gè)surface對(duì)象。surface是用來代表圖片的pygame對(duì)象,可以對(duì)一個(gè)surface對(duì)象進(jìn)行涂畫、變形、復(fù)制等各種操作。事實(shí)上,屏幕也只是一個(gè)surface,pygame.display.set_mode就返回了一個(gè)屏幕surface對(duì)象。如果將ball這個(gè)surface對(duì)象畫到screen surface對(duì)象,需要使用blit()方法,最后使用display方法更新整個(gè)待顯示的surface對(duì)象到屏幕上。surface對(duì)象常用方法如下:
方法名 | 功能 |
pygame.Surface.blit | 將一個(gè)圖像畫到另一個(gè)圖像上 |
pygame.Surface.convert | 轉(zhuǎn)換圖像的像素格式 |
pygame.Surface.convert_alpha | 轉(zhuǎn)換圖像的像素格式,包含alpha通道的轉(zhuǎn)換 |
pygame.Surface.fill | 使用顏色填充surface |
pygame.Surface.get_rect | 獲取surface的矩形區(qū)域 |
(4)上面的小球是靜止的,下面我們?cè)撟屝∏騽?dòng)起來了。ball.get_rect()方法返回值ballrect是一個(gè)rec對(duì)象,該對(duì)象有一個(gè)move()方法可以用于移動(dòng)矩形。move(x,y)函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是x軸移動(dòng)的距離,第二個(gè)參數(shù)是y軸移動(dòng)的距離。窗體左上角坐標(biāo)為(0,0)。
為了實(shí)現(xiàn)小球不停地移動(dòng),將move()函數(shù)添加到while循環(huán)內(nèi),具體代碼如下:
我們?cè)谠a的基礎(chǔ)上加上了這兩行代碼。運(yùn)行后卻發(fā)現(xiàn)小球一閃而過,但小球并沒有真正的笑死,而是移動(dòng)到窗體之外,此時(shí)需要添加碰撞監(jiān)測的功能。當(dāng)小球與窗體的任意邊緣發(fā)生碰撞,則更改小球的移動(dòng)方向。
代碼如下:
在原有代碼中添加上面的碰撞判斷代碼,運(yùn)行如下
小球在界面飛速運(yùn)動(dòng)。然后我們需要控制小球移動(dòng)的速度。首先介紹一下上面的代碼,上面代碼中,添加了碰撞監(jiān)測功能。如果碰到左右邊緣,這則更改x軸數(shù)據(jù)為負(fù)數(shù);如果碰到上下邊緣,則更改y軸數(shù)據(jù)為負(fù)數(shù)。
那么我們?cè)鯓涌刂菩∏蛞苿?dòng)的速度呢?這時(shí)我們需要添加一個(gè)“時(shí)鐘”來控制程序運(yùn)行的時(shí)間。這時(shí)就需要使用pygame的time模塊。使用pygame時(shí)鐘之前,必須先創(chuàng)建clock對(duì)象的一個(gè)實(shí)例,然后再while循環(huán)中設(shè)置多長時(shí)間運(yùn)行一次。代碼如下【也就是最終代碼,由于運(yùn)動(dòng)效果無法展示,各位還是自行運(yùn)行查看效果^_^】:
# -*- coding:utf-8 -*- import sys # 導(dǎo)入sys模塊 import pygame # 導(dǎo)入pygame模塊 pygame.init() # 初始化pygame size = width, height = 640, 480 # 設(shè)置窗口 screen = pygame.display.set_mode(size) # 顯示窗口 color = (0, 0, 0) # 設(shè)置顏色 ball = pygame.image.load("ball.png") # 加載圖片 ballrect = ball.get_rect() # 獲取矩形區(qū)域 speed = [5, 5] # 設(shè)置移動(dòng)的X軸、Y軸距離 clock = pygame.time.Clock() # 設(shè)置時(shí)鐘 # 執(zhí)行死循環(huán),確保窗口一直顯示 while True: clock.tick(60) # 每秒執(zhí)行60次 # 檢查事件 for event in pygame.event.get(): if event.type == pygame.QUIT: # 如果點(diǎn)擊關(guān)閉窗口,則退出 sys.exit() ballrect = ballrect.move(speed) # 移動(dòng)小球 # 碰到左右邊緣 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() # 更新全部顯示 pygame.quit() # 退出pygame
上述代碼中在上面代碼中添加了:
clock=pygame.time.Clock()#設(shè)置時(shí)鐘
以及循環(huán)中的
clock.tick(60) #每秒執(zhí)行60次
這樣我們?cè)俅芜\(yùn)行就會(huì)出現(xiàn)小球緩慢移動(dòng)并碰撞邊緣改變方向的效果了。
總結(jié)
到此這篇關(guān)于pygame模塊制作跳躍小球小游戲的文章就介紹到這了,更多相關(guān)pygame跳躍小球小游戲內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。