---
tags: 開源社
title: Pygame — 入門介紹
---
# Pygame 教學
## 安裝 Pygame 套件
> 我們可以直接通過 pip 來安裝
>pip install setuptools requests -U
python -m buildconfig
python setup.py install
### 什麼是 pip?
> pip 就是 python 內建的 "套件安裝跟管理的工具"
> 想要使用這個工具 我們只要在 "小黑"(命令提示字元) 打上 pip 就可以了
> 因為我們今天是要 安裝套件
> 所以我們可以打
```t
pip install pygame
```
以此類推 假如我們今天 要裝其他 python 的套件
打上 `pip install XXX`就可以了
## 做遊戲之前必須具備的觀念
- 遊戲的畫面是由 "渲染" 來的
>所謂的 渲染 就是將圖片經由電腦計算 再呈現給我們看的這個過程 至於他要計算能計算什麼 有很多~ 例如光影/透明度和再移動時的呈現 亦或是我們常接觸到的 文字轉圖片 都是需要計算的喔!
- 遊戲的畫面是由 一張一張圖片 快速串連起來的
> 你可以把她想成是動畫這樣 動畫也可以想成很多張照片快速撥放形成
> 在這邊我們介紹一個常用專有名詞
> **< 幀數 FPS(Frame per second) >**
> 表示每秒有幾張圖片串起來 舉個例子 假如是10幀 就代表說每秒
> 有10張照片 以此可知 越高的幀數會讓畫面看起來越流暢 但相對的需要付出更多的時間計算
> 也回到我們跟剛剛所說的 需要花更多時間 "渲染"
- 遊戲的畫面是由 一層一層疊上去的
> 遊戲的渲染跟畫畫不一樣 通常我們在畫畫 會把我們要的主角先畫出來 在把旁邊的地方填上背景 這代表什麼!? 主角後面是沒有背景ㄉ 但是不管事在影片還是遊戲的畫面設計上 我們都是把東西 一層一層疊上去的 先有背景 在把人物疊上去 可以把他想成 Photoshop 的圖層 遊戲中每個元件都是獨立 而且有自己的圖層
![](https://i.imgur.com/MdHmKk3.png =600x)
### 有了這些觀念之後 我們就可以把 遊戲設計的流程簡化為
思考遊戲規則 > 主畫面設計 > 每個元件的功能設計 > 各個元件的互動 > 遊戲整體優化
## 第三步 - 認識 Pygame 的初始化
我們都知道 pygame 就是拿來寫遊戲的
因此在我們開始寫所謂的 "遊戲內容" 時 當然要先知道怎麼設定一些初始化的東西 像是
- 視窗大小啊
- 遊戲標題啊
- 跟一些物件的呈現
- 諸如此類等等
首先 透過下面語法啟動套件
```python=1
pygame.init()
```
接下來 要設定遊戲視窗的大小和視窗標題
``` python=1
screen = pygame.display.set_mode(800*600)
pygame.display.set_caption("這是視窗標題")
```
## Pygame 中的重要模組
### 方法類
- pygame.display
> 有關主視窗的 也可以說是最基本ㄉ 遊戲沒有主視窗怎麼跑
常用功能:
- .setmode() 設定大小
- .display.update()
- .set_caption() 設定標題
- pygame.Surface
> 就是我們前面說的 "圖層" 的概念 這裡面有很多跟圖層有關的方法
- pygame.rect
> 用來偵測碰撞的
- pygame.draw
> 用來在 Surface 上畫畫的
- pygame.image
> 用來管理圖片 例如 圖片ㄉ載入等等
- pygame.font
> 跟字體有關的
常用功能:
- render(文字,平滑值,文字顏色,背景顏色)
- pygame.time / pygame.mixer / pygame.sound / pygame.transform
### 物件類
- Surface 物件
>其實就是圖層 很多功能都是在圖層上操作 或是會返回一個圖層給你
>例如 pygame.display.set_mode() 這個設定主視窗的功能 就會 return 一個 Surface
常用功能:
- .blit(畫布變數,繪製位置)
- .get_size()
- pygame.sprite.Sprite
> 這是pygame裡面幫腳色寫好的一個類別 如果要建立腳色 都會需要繼承這個類別
> 如果不知道什麼是 "類別" 和 "繼承" 的 你可以想成下面這樣
> 有一個樣板 裡面寫好了很多東西 如果你想要你的創建的物件也使用裡面的東西
> 就可以透過 "繼承"
>因此 pygame.sprite.Sprite 這個類別裡 就幫我們寫好了像是 腳色圖片
> 腳色碰撞,顯示,群組等等 我們要使用的時候 只要把我們準備好的東西 "代入進去" 就好了
## Pygame - Hello_World!
```python =1
import sys
import pygame
from pygame.locals import QUIT
# 初始化
pygame.init()
# 建立 window 視窗畫布,大小為 800x600
window_surface = pygame.display.set_mode((800, 600))
# 設置視窗標題為 Hello World:)
pygame.display.set_caption('Hello World:)')
# 清除畫面並填滿背景色
window_surface.fill((255, 255, 255))
# 宣告 font 文字物件
head_font = pygame.font.SysFont(None, 60)
# 渲染方法會回傳 surface 物件
text_surface = head_font.render('Hello World!', True, (0, 0, 0))
# blit 用來把其他元素渲染到另外一個 surface 上,這邊是 window 視窗
window_surface.blit(text_surface, (10, 10))
# 更新畫面,等所有操作完成後一次更新(若沒更新,則元素不會出現)
pygame.display.update()
# 事件迴圈監聽事件,進行事件處理
while True:
# 迭代整個事件迴圈,若有符合事件則對應處理
for event in pygame.event.get():
# 當使用者結束視窗,程式也結束
if event.type == QUIT:
pygame.quit()
sys.exit()