'Python學者福音!你女兒看了都會的自學Python遊戲入門指南'

"

1、什麼是Pygame

Pygame是一個遊戲開發庫(包、框架),是一個 Python外接模塊,專為電子遊戲設計。這個工具箱包含了:

  • 圖形與動畫
  • 聲音與音效
  • 遊戲控制(鍵盤、鼠標、遊戲柄等)


2、遊戲循環

每個遊戲的核心思想是一個循環(Loop),我們稱它為“遊戲循環”。這個循環在遊戲中一直處於運行狀態(),處理所有遊戲中的事務。每次循環中的語句跑一遍叫做幀(Frame)

每刷新一幀,會處理很多事情,基本上可以概括成3個部分:

2-1 處理輸入(事件)

需要遊戲處理的事情,你在編寫代碼時要關注這些外部的事件:如鍵盤上鍵的按下,鼠標的點擊等;

2-2 更新遊戲

每幀上物體的變化,如角色有空中,重力會使得他下落,如果兩個物體碰撞,會發生爆炸;

2-3 渲染(繪製)

這個階段是把對象繪製在屏幕上,如背景、角色、菜單(任何玩家可以看到的東西)都會在正確的位置上顯示出來。

3、定時器

遊戲循環還有一個很重要的事情是整個循環運行的快慢。你應該聽說過FPS(代表了幀頻,每分鐘幀切換的數量),也就是說每個循環需要花費的時間。這個對遊戲來說很重要,它決定了遊戲速度的快慢。

4、建一個遊戲模板

現在我們講解一下游戲製作的細節,通過代碼的講解,深入理解遊戲編程的底層邏輯。

Pygame模板,對於所有的Python遊戲編制都能夠有用。程序開頭,我們先導入兩個庫(pygame遊戲庫和random隨機數),設置一些遊戲中的變量參數選項

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360 # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second


WIDTH是窗口的寬度

HEIGHT是窗口的高度

FPS 是刷新的幀數量

初始化Pygame及新建窗口,mixer是聲音的初始化

# initialize pygame and create window
pygame.init()
pygame.mixer.init() # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()


pygame.init()命令啟動並初始化pygame,screen是遊戲的窗口,通過兩個常量來控制窗口大小,後面設置了clock變量來控制PFS這個參數。

下面我們來編寫遊戲循環

遊戲循環,分成三個部分:

(1)處理輸入事件

(2)更新事件

(3)窗口上繪製圖形

# Game Loop
running = True
while running:
# Process input (events)
# Update
# Render (draw)


while循環受變量running控制,如果要結果遊戲循環,只要將running設置成False即可,遊戲終止。後面我們會陸續添加代碼。

5、渲染與繪製部分

在繪製部分,不繪製角色,只是簡單填充背景顏色。

下面我們得說說計算機中的顏色表示及處理。

電腦的屏幕是由像素(Pixels)組成的,這些像素由三個部分混合而成:紅色、綠色和藍色。三個分量的多少決定的這個像素的最終顏色,如下圖


"

1、什麼是Pygame

Pygame是一個遊戲開發庫(包、框架),是一個 Python外接模塊,專為電子遊戲設計。這個工具箱包含了:

  • 圖形與動畫
  • 聲音與音效
  • 遊戲控制(鍵盤、鼠標、遊戲柄等)


2、遊戲循環

每個遊戲的核心思想是一個循環(Loop),我們稱它為“遊戲循環”。這個循環在遊戲中一直處於運行狀態(),處理所有遊戲中的事務。每次循環中的語句跑一遍叫做幀(Frame)

每刷新一幀,會處理很多事情,基本上可以概括成3個部分:

2-1 處理輸入(事件)

需要遊戲處理的事情,你在編寫代碼時要關注這些外部的事件:如鍵盤上鍵的按下,鼠標的點擊等;

2-2 更新遊戲

每幀上物體的變化,如角色有空中,重力會使得他下落,如果兩個物體碰撞,會發生爆炸;

2-3 渲染(繪製)

這個階段是把對象繪製在屏幕上,如背景、角色、菜單(任何玩家可以看到的東西)都會在正確的位置上顯示出來。

3、定時器

遊戲循環還有一個很重要的事情是整個循環運行的快慢。你應該聽說過FPS(代表了幀頻,每分鐘幀切換的數量),也就是說每個循環需要花費的時間。這個對遊戲來說很重要,它決定了遊戲速度的快慢。

4、建一個遊戲模板

現在我們講解一下游戲製作的細節,通過代碼的講解,深入理解遊戲編程的底層邏輯。

Pygame模板,對於所有的Python遊戲編制都能夠有用。程序開頭,我們先導入兩個庫(pygame遊戲庫和random隨機數),設置一些遊戲中的變量參數選項

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360 # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second


WIDTH是窗口的寬度

HEIGHT是窗口的高度

FPS 是刷新的幀數量

初始化Pygame及新建窗口,mixer是聲音的初始化

# initialize pygame and create window
pygame.init()
pygame.mixer.init() # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()


pygame.init()命令啟動並初始化pygame,screen是遊戲的窗口,通過兩個常量來控制窗口大小,後面設置了clock變量來控制PFS這個參數。

下面我們來編寫遊戲循環

遊戲循環,分成三個部分:

(1)處理輸入事件

(2)更新事件

(3)窗口上繪製圖形

# Game Loop
running = True
while running:
# Process input (events)
# Update
# Render (draw)


while循環受變量running控制,如果要結果遊戲循環,只要將running設置成False即可,遊戲終止。後面我們會陸續添加代碼。

5、渲染與繪製部分

在繪製部分,不繪製角色,只是簡單填充背景顏色。

下面我們得說說計算機中的顏色表示及處理。

電腦的屏幕是由像素(Pixels)組成的,這些像素由三個部分混合而成:紅色、綠色和藍色。三個分量的多少決定的這個像素的最終顏色,如下圖


Python學者福音!你女兒看了都會的自學Python遊戲入門指南


三個分量我們也稱為三元色,其取值範圍是0(相當於關)-255(相當於全開100%),所以每個元色有256種情況,下圖中給出了常用的顏色的三元色的例子。


"

1、什麼是Pygame

Pygame是一個遊戲開發庫(包、框架),是一個 Python外接模塊,專為電子遊戲設計。這個工具箱包含了:

  • 圖形與動畫
  • 聲音與音效
  • 遊戲控制(鍵盤、鼠標、遊戲柄等)


2、遊戲循環

每個遊戲的核心思想是一個循環(Loop),我們稱它為“遊戲循環”。這個循環在遊戲中一直處於運行狀態(),處理所有遊戲中的事務。每次循環中的語句跑一遍叫做幀(Frame)

每刷新一幀,會處理很多事情,基本上可以概括成3個部分:

2-1 處理輸入(事件)

需要遊戲處理的事情,你在編寫代碼時要關注這些外部的事件:如鍵盤上鍵的按下,鼠標的點擊等;

2-2 更新遊戲

每幀上物體的變化,如角色有空中,重力會使得他下落,如果兩個物體碰撞,會發生爆炸;

2-3 渲染(繪製)

這個階段是把對象繪製在屏幕上,如背景、角色、菜單(任何玩家可以看到的東西)都會在正確的位置上顯示出來。

3、定時器

遊戲循環還有一個很重要的事情是整個循環運行的快慢。你應該聽說過FPS(代表了幀頻,每分鐘幀切換的數量),也就是說每個循環需要花費的時間。這個對遊戲來說很重要,它決定了遊戲速度的快慢。

4、建一個遊戲模板

現在我們講解一下游戲製作的細節,通過代碼的講解,深入理解遊戲編程的底層邏輯。

Pygame模板,對於所有的Python遊戲編制都能夠有用。程序開頭,我們先導入兩個庫(pygame遊戲庫和random隨機數),設置一些遊戲中的變量參數選項

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360 # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second


WIDTH是窗口的寬度

HEIGHT是窗口的高度

FPS 是刷新的幀數量

初始化Pygame及新建窗口,mixer是聲音的初始化

# initialize pygame and create window
pygame.init()
pygame.mixer.init() # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()


pygame.init()命令啟動並初始化pygame,screen是遊戲的窗口,通過兩個常量來控制窗口大小,後面設置了clock變量來控制PFS這個參數。

下面我們來編寫遊戲循環

遊戲循環,分成三個部分:

(1)處理輸入事件

(2)更新事件

(3)窗口上繪製圖形

# Game Loop
running = True
while running:
# Process input (events)
# Update
# Render (draw)


while循環受變量running控制,如果要結果遊戲循環,只要將running設置成False即可,遊戲終止。後面我們會陸續添加代碼。

5、渲染與繪製部分

在繪製部分,不繪製角色,只是簡單填充背景顏色。

下面我們得說說計算機中的顏色表示及處理。

電腦的屏幕是由像素(Pixels)組成的,這些像素由三個部分混合而成:紅色、綠色和藍色。三個分量的多少決定的這個像素的最終顏色,如下圖


Python學者福音!你女兒看了都會的自學Python遊戲入門指南


三個分量我們也稱為三元色,其取值範圍是0(相當於關)-255(相當於全開100%),所以每個元色有256種情況,下圖中給出了常用的顏色的三元色的例子。


Python學者福音!你女兒看了都會的自學Python遊戲入門指南


通過乘法我們可以計算出總共不同的顏色的數量

>>> 256 * 256 * 256 = 16,777,216


我們理解了顏色,就可以在程序開頭定義常用顏色了

# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


添加背景顏色的繪製代碼

 # Draw / render
screen.fill(BLACK)


事情遠遠還不止這些,這裡還涉及到計算機的顯示內容原理。改變屏幕上的像素就是告訴顯示卡修改實際像素。對於計算機來說,這是一個非常耗時的工作。我們可以使用一種雙緩衝區的辦法來解決。相象一下,我們有一塊雙面的白板,一面顯示結束可以快速翻轉顯示反面的內容。正面顯示給玩家,反面只有計算機才看到。我們把繪製工作放在反面:角色,子彈,燈光等,後面的完成工作,馬上反轉白板,顯示新的幀給用戶。所以我們用到flip這個命令,如下:

 # Draw / render
screen.fill(BLACK)
# *after* drawing everything, flip the display
pygame.display.flip()


注意:我們得把flip()這個命令放在最後。如果你把顯示的內容放在其後,屏幕上不會顯示它。

6、輸入/事件

遊戲設計到止,還遠沒有這麼簡單。我們還得偵聽鍵盤與鼠標,及其它控件的輸入事件。故我們還有很多事情要做,如果你現在運行程序,你會發現邊窗口的關閉功能還未能實現。我們得告訴程序,有一個關閉事件要處理,就是終止程序的運行。

事件是時時刻刻會發生的,如果玩家點擊“彈跳”按鈕,遊戲循環中的更新與繪製應該怎麼做呢?你總不希望忽略這些輸入事件吧,玩家會非常不爽的。Pygame得通過一個列表,再通過一個For 循環逐一的處理這些事件。

具體代碼如下:

 for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
running = False

Pygame有很多的事件要處理。其中pygame.QUIT是玩家點擊關閉按鈕時觸發,程序中使用running=False來停止遊戲循環。

7、控制FPS

在更新模塊裡,代碼如下:

while running:
# keep loop running at the right speed
clock.tick(FPS)

tick命令告訴pygame遊戲循環的時長及暫停時長。如果fps設為30,那麼1幀持續時間為1/30或者說0.03秒。如果循環耗時0.01秒,則pygame會有0.02等待時間。

8、總結一下

下面是整個程序的源代碼:

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360
HEIGHT = 480
FPS = 30
# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
# keep loop running at the right speed
clock.tick(FPS)
# Process input (events)
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
running = False
# Update
# Draw / render
screen.fill(BLACK)
# *after* drawing everything, flip the display
pygame.display.flip()
pygame.quit()


我們的Python遊戲開發的模板如上,你可以保存一下文件,命名成“pygame_template.py”,後面我們可以反覆重用。

最後我自己是一名python開發工程師,這裡有整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注並在後臺私信:“01”即可領取

"

相關推薦

推薦中...