日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用pygame制作一个简单的游戏

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用pygame制作一个简单的游戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
翻譯自Will McGugan的《Beginning Game?Development with?Python and Pygame –From Novice to Professional》,有興趣的朋友可以搜一下,有英文版的PDF可以下載。其實(shí)也不是翻譯,把精華摘出來,共同學(xué)習(xí)。

看這個(gè)系列需要有Python的基礎(chǔ)知識(shí),雖然一開始想寫一篇Python概要的,實(shí)在是很龐雜,而且有那么多好的Python基礎(chǔ)教程,自己就不多插一腳了吧。入門的話,有Python入門,詳盡的話,可以看看Python核心編程或者Python編程金典,然后IBM上的“可愛的Python”系列也很不錯(cuò),可以擴(kuò)展一下思維。

OK,讓我們開始吧~

Pygame的歷史



Pygame是一個(gè)利用SDL庫的寫就的游戲庫,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛寫的,據(jù)說他為了讓Loki(致力于向Linux上移植Windows的游戲的一家大好人公司,可惜已經(jīng)倒閉,唉好人不長命啊……)更有效的工作,創(chuàng)造了這個(gè)東東。

SDL是用C寫的,不過它也可以使用C++進(jìn)行開發(fā),當(dāng)然還有很多其它的語言,Pygame就是Python中使用它的一個(gè)庫。Pygame已經(jīng)存在很多時(shí)間了,許多優(yōu)秀的程序員加入其中,把Pygame做得越來越好。

安裝Pygame

你可以從www.pygame.org下載Pygame,選擇合適你的操作系統(tǒng)和合適的版本,然后安裝就可以了(什么,你連Python都沒有?您可能是不適合看這個(gè)系列了,不過如果執(zhí)意要學(xué),很好!快去www.python.org下載吧!)。 一旦你安裝好,你可以用下面的方法確認(rèn)下有沒有安裝成功:

Python >>> import pygame >>> print pygame.ver 1.9.1release
1 2 3 >>> import pygame >>> print pygame.ver 1.9.1release

你的版本可能和我不同,這沒關(guān)系。我所翻譯的這本書上的版本還是1.7.1的……所以如果有些過時(shí)的不合時(shí)宜的東西,千萬不要客氣請指出來!

若說為什么要介紹這么一個(gè)“過時(shí)”的東西,真正的知識(shí)是不會(huì)過時(shí)的,只有技術(shù)才會(huì)。這里主要是依靠Pygame來介紹的游戲開發(fā)的方方面面,并不是說咱就可以靠這個(gè)做出什么偉大的游戲了(當(dāng)然也不是說不可以)!

另外說一下,就產(chǎn)品而言,Pygame更致力于2D游戲的開發(fā),也就是說,你可以用Pygame寫一個(gè)植物大戰(zhàn)僵尸,但是寫一個(gè)魔獸世界則相當(dāng)困難……請不要做出鄙夷的目光,底層的東西永遠(yuǎn)是相通的,而且對于新手而言,從簡單的2D入手才是正途。

使用Pygame

Pygame有很多的模塊,下面是一張一覽表:

模塊名功能
pygame.cdrom訪問光驅(qū)
pygame.cursors加載光標(biāo)
pygame.display訪問顯示設(shè)備
pygame.draw繪制形狀、線和點(diǎn)
pygame.event管理事件
pygame.font使用字體
pygame.image加載和存儲(chǔ)圖片
pygame.joystick使用游戲手柄或者 類似的東西
pygame.key讀取鍵盤按鍵
pygame.mixer聲音
pygame.mouse鼠標(biāo)
pygame.movie播放視頻
pygame.music播放音頻
pygame.overlay訪問高級(jí)視頻疊加
pygame就是我們在學(xué)的這個(gè)東西了……
pygame.rect管理矩形區(qū)域
pygame.sndarray操作聲音數(shù)據(jù)
pygame.sprite操作移動(dòng)圖像
pygame.surface管理圖像和屏幕
pygame.surfarray管理點(diǎn)陣圖像數(shù)據(jù)
pygame.time管理時(shí)間和幀信息
pygame.transform縮放和移動(dòng)圖像

有些模塊可能在某些平臺(tái)上不存在,你可以用None來測試一下。

Python if pygame.font is None: print "The font module is not available!" exit()
1 2 3 if pygame.font is None: ????print "The font module is not available!" ????exit()

新的Hello World

學(xué)程序一開始我們總會(huì)寫一個(gè)Hello world程序,但那只是在屏幕上寫了兩個(gè)字,現(xiàn)在我們來點(diǎn)更帥的!寫好以后會(huì)是這樣的效果:

Python #!/usr/bin/env python background_image_filename = 'sushiplate.jpg' mouse_image_filename = 'fugu.png' #指定圖像文件名稱 import pygame #導(dǎo)入pygame庫 from pygame.locals import * #導(dǎo)入一些常用的函數(shù)和常量 from sys import exit #向sys模塊借一個(gè)exit函數(shù)用來退出程序 pygame.init() #初始化pygame,為使用硬件做準(zhǔn)備 screen = pygame.display.set_mode((640, 480), 0, 32) #創(chuàng)建了一個(gè)窗口 pygame.display.set_caption("Hello, World!") #設(shè)置窗口標(biāo)題 background = pygame.image.load(background_image_filename).convert() mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha() #加載并轉(zhuǎn)換圖像 while True: #游戲主循環(huán) for event in pygame.event.get(): if event.type == QUIT: #接收到退出事件后退出程序 exit() screen.blit(background, (0,0)) #將背景圖畫上去 x, y = pygame.mouse.get_pos() #獲得鼠標(biāo)位置 x-= mouse_cursor.get_width() / 2 y-= mouse_cursor.get_height() / 2 #計(jì)算光標(biāo)的左上角位置 screen.blit(mouse_cursor, (x, y)) #把光標(biāo)畫上去 pygame.display.update() #刷新一下畫面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #!/usr/bin/env python background_image_filename = 'sushiplate.jpg' mouse_image_filename = 'fugu.png' #指定圖像文件名稱 import pygame #導(dǎo)入pygame庫 from pygame.locals import * #導(dǎo)入一些常用的函數(shù)和常量 from sys import exit #向sys模塊借一個(gè)exit函數(shù)用來退出程序 pygame.init() #初始化pygame,為使用硬件做準(zhǔn)備 screen = pygame.display.set_mode((640, 480), 0, 32) #創(chuàng)建了一個(gè)窗口 pygame.display.set_caption("Hello, World!") #設(shè)置窗口標(biāo)題 background = pygame.image.load(background_image_filename).convert() mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha() #加載并轉(zhuǎn)換圖像 while True: #游戲主循環(huán) ????for event in pygame.event.get(): ????????if event.type == QUIT: ????????????#接收到退出事件后退出程序 ????????????exit() ????screen.blit(background, (0,0)) ????#將背景圖畫上去 ????x, y = pygame.mouse.get_pos() ????#獲得鼠標(biāo)位置 ????x-= mouse_cursor.get_width() / 2 ????y-= mouse_cursor.get_height() / 2 ????#計(jì)算光標(biāo)的左上角位置 ????screen.blit(mouse_cursor, (x, y)) ????#把光標(biāo)畫上去 ????pygame.display.update() ????#刷新一下畫面

這個(gè)程序需要兩張圖片,你可以在這篇文章最后的地方找到下載地址,雖然你也可以隨便找兩張。為了達(dá)到最佳效果,背景的 sushiplate.jpg應(yīng)要有640×480的分辨率,而光標(biāo)的fugu.png大約應(yīng)為80×80,而且要有Alpha通道(如果你不知道這是 什么,還是下載吧……)。
注意:代碼中的注釋我使用的是中文,如果執(zhí)行報(bào)錯(cuò),可以直接刪除。

游戲中我已經(jīng)為每一行寫了注釋,另外如果打算學(xué)習(xí),強(qiáng)烈建議自己動(dòng)手輸入一遍而不是復(fù)制粘貼!

稍微講解一下比較重要的幾個(gè)部分:

set_mode會(huì)返回一個(gè)Surface對象,代表了在桌面上出現(xiàn)的那個(gè)窗口,三個(gè)參數(shù)第一個(gè)為元祖,代表分 辨率(必須);第二個(gè)是一個(gè)標(biāo)志位,具體意思見下表,如果不用什么特性,就指定0;第三個(gè)為色深。

標(biāo)志位功能
FULLSCREEN創(chuàng)建一個(gè)全屏窗口
DOUBLEBUF創(chuàng)建一個(gè)“雙緩沖”窗口,建議在HWSURFACE或者OPENGL時(shí)使用
HWSURFACE創(chuàng)建一個(gè)硬件加速的窗口,必須和FULLSCREEN同時(shí)使用
OPENGL創(chuàng)建一個(gè)OPENGL渲染的窗口
RESIZABLE創(chuàng)建一個(gè)可以改變大小的窗口
NOFRAME創(chuàng)建一個(gè)沒有邊框的窗口

convert函數(shù)是將圖像數(shù)據(jù)都轉(zhuǎn)化為Surface對象,每次加載完圖像以后就應(yīng)該做這件事件(事實(shí)上因?yàn)?它太常用了,如果你不寫pygame也會(huì)幫你做);convert_alpha相比convert,保留了Alpha 通道信息(可以簡單理解為透明的部分),這樣我們的光標(biāo)才可以是不規(guī)則的形狀。

游戲的主循環(huán)是一個(gè)無限循環(huán),直到用戶跳出。在這個(gè)主循環(huán)里做的事情就是不停地畫背景和更新光標(biāo)位置,雖然背景是不動(dòng)的,我們還是需要每次都畫它, 否則鼠標(biāo)覆蓋過的位置就不能恢復(fù)正常了。

blit是個(gè)重要函數(shù),第一個(gè)參數(shù)為一個(gè)Surface對象,第二個(gè)為左上角位置。畫完以后一定記得用update更新一下,否則畫面一片漆黑。

這是一個(gè)最最大概的Pygame程序的印象,接下來我們會(huì)學(xué)習(xí)更多深層次的東西,并且把各條語句都真正讀懂。


轉(zhuǎn)載于:https://www.cnblogs.com/chenjianhong/p/4144434.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的使用pygame制作一个简单的游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。