用Python和Pygame寫一個屬於自己的小遊戲(1)

2021-03-02 python
Pygame的歷史

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

SDL是用C寫的,不過它也可以使用C++進行開發,當然還有很多其它的語言,Pygame就是Python中使用它的一個庫。Pygame已經存在很多時間了,許多優秀的程式設計師加入其中,把Pygame做得越來越好。

安裝Pygame

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

Python

1

2

3

>>> import pygame

>>> print pygame.ver

1.9.1release

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

若說為什麼要介紹這麼一個「過時」的東西,真正的知識是不會過時的,只有技術才會。這裡主要是依靠Pygame來介紹的遊戲開發的方方面面,並不是說咱就可以靠這個做出什麼偉大的遊戲了(當然也不是說不可以)!

另外說一下,就產品而言,Pygame更致力於2D遊戲的開發,也就是說,你可以用Pygame寫一個植物大戰殭屍,但是寫一個魔獸世界則相當困難……請不要做出鄙夷的目光,底層的東西永遠是相通的,而且對於新手而言,從簡單的2D入手才是正途。

使用Pygame

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

模塊名功能pygame.cdrom訪問光碟機pygame.cursors加載光標pygame.display訪問顯示設備pygame.draw繪製形狀、線和點pygame.event管理事件pygame.font使用字體pygame.image加載和存儲圖片pygame.joystick使用遊戲手柄或者 類似的東西pygame.key讀取鍵盤按鍵pygame.mixer聲音pygame.mouse滑鼠pygame.movie播放視頻pygame.music播放音頻pygame.overlay訪問高級視頻疊加pygame就是我們在學的這個東西了……pygame.rect管理矩形區域pygame.sndarray操作聲音數據pygame.sprite操作移動圖像pygame.surface管理圖像和屏幕pygame.surfarray管理點陣圖像數據pygame.time管理時間和幀信息pygame.transform縮放和移動圖像

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

Python

1

2

3

if pygame.font is None:

    print "The font module is not available!"

    exit()

新的Hello World

學程序一開始我們總會寫一個Hello world程序,但那只是在屏幕上寫了兩個字,現在我們來點更帥的!寫好以後會是這樣的效果:


Python

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

#導入pygame庫

from pygame.locals import *

#導入一些常用的函數和常量

from sys import exit

#向sys模塊借一個exit函數用來退出程序

 

pygame.init()

#初始化pygame,為使用硬體做準備

 

screen = pygame.display.set_mode((640, 480), 0, 32)

#創建了一個窗口

pygame.display.set_caption("Hello, World!")

#設置窗口標題

 

background = pygame.image.load(background_image_filename).convert()

mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()

#加載並轉換圖像

 

while True:

#遊戲主循環

 

    for event in pygame.event.get():

        if event.type == QUIT:

            #接收到退出事件後退出程序

            exit()

 

    screen.blit(background, (0,0))

    #將背景圖畫上去

 

    x, y = pygame.mouse.get_pos()

    #獲得滑鼠位置

    x-= mouse_cursor.get_width() / 2

    y-= mouse_cursor.get_height() / 2

    #計算光標的左上角位置

    screen.blit(mouse_cursor, (x, y))

    #把光標畫上去

 

    pygame.display.update()

    #刷新一下畫面

這個程序需要兩張圖片,你可以在這篇文章最後的地方找到下載地址,雖然你也可以隨便找兩張。為了達到最佳效果,背景的 sushiplate.jpg應要有640×480的解析度,而光標的fugu.png大約應為80×80,而且要有Alpha通道(如果你不知道這是 什麼,還是下載吧……)。
注意:代碼中的注釋我使用的是中文,如果執行報錯,可以直接刪除。

遊戲中我已經為每一行寫了注釋,另外如果打算學習,強烈建議自己動手輸入一遍而不是複製粘貼!

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

set_mode會返回一個Surface對象,代表了在桌面上出現的那個窗口,三個參數第一個為元祖,代表分 辨率(必須);第二個是一個標誌位,具體意思見下表,如果不用什麼特性,就指定0;第三個為色深。

標誌位功能FULLSCREEN創建一個全屏窗口DOUBLEBUF創建一個「雙緩衝」窗口,建議在HWSURFACE或者OPENGL時使用HWSURFACE創建一個硬體加速的窗口,必須和FULLSCREEN同時使用OPENGL創建一個OPENGL渲染的窗口RESIZABLE創建一個可以改變大小的窗口NOFRAME創建一個沒有邊框的窗口

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

遊戲的主循環是一個無限循環,直到用戶跳出。在這個主循環裡做的事情就是不停地畫背景和更新光標位置,雖然背景是不動的,我們還是需要每次都畫它, 否則滑鼠覆蓋過的位置就不能恢復正常了。

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

這是一個最最大概的Pygame程序的印象,接下來我們會學習更多深層次的東西,並且把各條語句都真正讀懂。

python學習資料交流群:516107834  每天會更新視頻資料,可以隨便下載。想繼續更新嗎?想的話就留言

相關焦點

  • Python寫遊戲: PyGame入門
    SDL是一個能訪問計算機多媒體硬體組件(包括音效卡,視頻卡,輸入組件等)的跨平臺庫。SDL是一個非常強大的工具,擅長創建基於多媒體硬體的程序,但它是用C語言寫的,可C語言很難,所以我們選擇PyGame。創建一個自定義事件非常容易,就像它名字一樣:ADDENEMY = paygame.USEREVENT + 1就像這樣!現在我們有了一個新事件,叫做ADDENEMY。我們在遊戲主循環中監聽它。需要注意的是必須使自定義事件有一個獨一無二的值,並且這個值還要大於USEREVENT的值。這就是為什麼我們設事件值等於USEREVENT + 1。
  • 用Pygame和Python做遊戲-從入門到精通(1)
    安裝Pygame你可以從www.pygame.org下載Pygame,選擇合適你的作業系統和合適的版本,然後安裝就可以了(什麼,你連Python都沒有?您可能是不適合看這個系列了,不過如果執意要學,很好!快去www.python.org下載吧!)。 一旦你安裝好,你可以用下面的方法確認下有沒有安裝成功。你的版本可能和我不同,這沒關係。
  • 鬥笠-python/pygame 小遊戲
    打磚塊遊戲:是什麼:打磚塊遊戲為什麼:娛樂中學習怎麼做:1.分析需求 2.用代碼實現需求(編程)一.分析需求:1.What:實現打磚塊的遊戲,應該要哪些元素2.Why:了解清楚了需求,才能夠對症下藥重點:1.理解整體邏輯2.理解類 是什麼 為什麼 怎麼做(2)需要:1.Python的pygame工具包2.python程式語言;我熟悉,語言簡潔;除了遊戲之外可以做:web開發,自動化測試,自動化運維,爬蟲,數據分析3.pygame
  • Python菜鳥快樂遊戲編程_pygame
    擅長python 機器學習,應用於醫療,英語,金融風控領域。課程介紹曾經我也沉迷遊戲,連續玩十幾個小時競技遊戲可以不吃飯。遊戲只是別人寫好程序,與其沉迷於他人設計好程序,為何不自己設計遊戲,至少學會編程後,我們的月收入上萬不是問題。於是便有了錄製這部pygame菜鳥遊戲編程教程動力。
  • 【Pygame 第1課】 hello pygame
  • Pygame:用python做有意思的玩意
    在python中,也有一個專門繪製圖像,處理鍵盤、滑鼠事件,播放聲音的庫:Pygame。一般我們在python中想要在屏幕上顯示文字或者通過鍵盤輸入數據會通過print()和input()函數。不過在現實中僅僅只是簡單的輸入和輸出一些文本是遠遠不夠的。豐富多彩的文本,酷炫的動畫,刺激的遊戲操作更可以感受到編碼的魅力。
  • 用python和pygame遊戲編程入門-畫圖實例
    /usr/bin/env pythonimport pygamefrom pygame.locals import *from sys import exitfrom random import *from math import pipygame.init()screen = pygame.display.set_mode((640,
  • 使用 Python 和 Pygame 模塊構建一個遊戲框架 | Linux 中國
    在我的這系列的第一篇文章 中, 我已經講解如何使用 Python 創建一個簡單的、基於文本的骰子遊戲。這次,我將展示如何使用 Python 模塊 Pygame 來創建一個圖形化遊戲。它將需要幾篇文章才能來得到一個確實做成一些東西的遊戲,但是到這系列的結尾,你將更好地理解如何查找和學習新的 Python 模塊和如何從其基礎上構建一個應用程式。
  • 用python寫一個2048遊戲
    於是找了個網頁版的2048小遊戲先體驗了一下:感覺玩法還是挺簡單的,無非就是:"使用方向鍵移動方塊,兩個數字相同的方塊撞在一起後,將會合併為一個數字是原來兩倍的新方塊。遊戲的時候儘可能多地合併這些數字方塊就行了。"
  • python pygame系列1 編寫第一個小遊戲
    所有函數說明在 https://www.pygame.org/docs/ 1#!
  • 基於PyGame的桌球和滑雪小遊戲
    滑雪小遊戲圖形界面滑雪小遊戲規則滑雪小遊戲部分代碼技術分析後記前言首先阿廣確實有點皮了,近期公眾號上商業互吹和廣告比例偏高,以後會注意廣告篇幅和文章質量,請多多諒解。在此非常感謝給我拉票和點讚的朋友們,非常感謝你們的持續支持和關注!下面是桌球小遊戲和滑雪小遊戲,很好玩,希望大家通過此代碼理解pygame庫的使用,為開發其他遊戲打好基礎。桌球遊戲規則桌球遊戲圖形界面
  • pygame遊戲常用方法
    python做2d遊戲,用的最多的就是pygame庫,雖然比較老了,但是非常經典。
  • 從零開發一個小遊戲:PyGame 入門
    為了創建一個屏幕,我們需要調用pygame.display 中的 set_mode 方法,然後向 set_mode() 傳遞包含屏幕窗口寬度和高度的元組(本教程中使用 800x600 尺寸)。下一節,我們將介紹遊戲的主循環,它將確保只有在我們給它正確的輸入時程序才會退出。遊戲主循環遊戲主循環/事件循環(https://link.jianshu.com/?t=https://www.pygame.org/docs/ref/event.html)是所有操作發生的地方。
  • python遊戲編程之旅 | 第一篇——初識pygame
    本系列博客介紹以python+pygame庫進行小遊戲的開發。有寫的不對之處還望各位海涵。
  • python彈球小遊戲
    今天給大家出一個小遊戲推送就是非常簡單的彈球相信很多朋友都玩過接下來我們來看一看吧1:關注「python趣味愛好者」公眾號,回復「彈球」獲取原始碼。爬取「沙雕表情包」可視化系列(一):Plotly簡介及示例python3.6.4tkinter,random用python開發小遊戲,很多人第一個想到的模塊就是pygame模塊。因為pygame有很多函數,方便處理圖片聲音等遊戲所需的各種元素。
  • 用 Python 寫一個俄羅斯方塊遊戲
    使用 Python 的 PyGame 庫寫一個俄羅斯方塊遊戲的逐步指南在這篇教程中,我們會用 Python 的 PyGame 庫寫一個簡單的俄羅斯方塊遊戲。裡面的算法很簡單,但對新手可能有一點挑戰性。我們不會太關注 PyGame 的內部原理,而更關注遊戲的邏輯。
  • 用python如何做一個簡單的貪吃蛇遊戲
    我想大部分同學是因為自身喜歡玩遊戲,突發奇想的如果自己可以設計遊戲那得有多麼的厲害啊,才走上了學習編程的道路呢!編程雖然不是「為了遊戲而生」的程序,但是每個編程軟體都有著自己的遊戲引擎。比如Python、C++、scratch等等。今天,我們就來看看Python的遊戲引擎有哪些呢?最常用的就是 pygame。
  • python | pygame模塊入門
    Pygame模塊是利用SDL庫的寫就的遊戲庫,在python中專用於電子遊戲設計,主要通過繪製圖像、實現動畫、繪製文字、播放音頻等方法開發遊戲。
  • 用Python寫了一個迷宮小遊戲
    來源:https://blog.csdn.net/Gaois前言迷宮遊戲是非常經典的遊戲,在該項目要求隨機生成一個迷宮,並求解迷宮
  • 自己寫一個 Python 消消樂小遊戲吧!
    再接著在窗口中畫一個 8 x 8 的網格,代碼如下:screen.fill((255, 255, 220))# 遊戲界面的網格繪製def drawGrids(self): for x in range(NUMGRID):