天天看點

Pygame遊戲開發(一)

Pygame

Pygame遊戲開發(一)

  Pygame是個遊戲開發的敲門磚,大家可以按照自己的喜好選擇是否學習Pygame。喜歡遊戲的同學可以學習Pygame,制作一個自己喜歡的小遊戲。因為是遊戲,我特意将背景設為了天空,希望大家在學習遊戲開發時遨遊夢想天空,體會遊戲快樂!

Pygame遊戲開發(一)
Pygame遊戲開發(一)

一、Pygame的安裝

 下面我來給大家介紹如何安裝Pygame:首先我們使用win+R打開"運作"輸入cnd打開指令行,接着輸入​

​pip install pygame​

​等待下載下傳安裝即可完成。如果安裝過程出現錯誤,可以參考我的這篇文章關于解決pip install庫下載下傳慢(下載下傳出錯)或無法更新的問題。

Pygame遊戲開發(一)

二、Pygame最小開發架構

  首先我們來看一下下面這段代碼:

import pygame,sys                #引入


pygame.init()                      #初始化
screen = pygame.display.set_mode((600, 400))          #設定窗體大小
pygame.display.set_caption("跟着夜寒學Python")        #設定标題欄


while True:                          #無限循環
  for event in pygame.event.get():
    if event.type == pygame.QUIT:                        #設定退出響應
      sys.exit()                      #退出程式
  pygame.display.update()      

其運作結果如下圖:

Pygame遊戲開發(一)

可以看到它并沒有顯示任何東西,僅僅是在視窗欄有了标題變化。但這便是一個最小開發架構。

Pygame遊戲開發(一)

分為以下四個步驟:

(1)引入pygame、sys

把我們需要的第三方庫和功能引入

(2)初始化init()及設定

初始化遊戲,設定窗體,設定标題欄

(3)擷取事件并逐類響應

進入一個無限循環,先擷取時間并逐類相應

(4)重新整理螢幕

擷取并響應事件後重新整理效果

Pygame遊戲開發(一)

三、Pygame相關函數

sys.exit()

用于結束遊戲并退出

pygame.init()

對Pygame各子產品進行初始化

pygame.display.set_mode((width,height))

設定pygame的窗體大小,寬度和高度使用二值元組傳輸

pygame.display.set_caption()

設定窗體标題欄

pygame.QUIT()

pygame的退出事件

pygame.event.get()

從事件隊列中擷取事件

pygame.display.update()

對視窗進行重新整理,預設視窗全部繪制

Pygame遊戲開發(一)

四、Pygame小執行個體

  在介紹第一個小例子之前我們需要先知道一些基本的知識。pygame的視窗采用笛卡爾坐标系,左上角為(0,0),橫軸向右是正方向,縱軸向下是正方向。其他需要知道的知識我會在函數的講解同時為大家講解。

先介紹一些函數

pygame.image.load()

引入系統相關路徑下的一張圖檔

<對象名>.get_rect()

pygame使用内部定義的surface對象表示所有載入的圖像,其中.get_react()方法傳回一個外切圖像的矩形rect對象。同時rect也有一些參數,這裡給大家講解:

Pygame遊戲開發(一)

top = y

bottom = w

left = x

right = u

width = u-x

height = w - y

<對象rect>.move(speed[x], speed[y])

對rect後的矩形對象形成偏移量為x和y的移動,偏移量為移動像素,整數。

screen.fill(color)

将視窗的背景填充為color色,采用RGB色彩體系。若不重新整理視窗背景預設為白色。

screen.blit(src, dest)

将一個圖像繪制在另一個圖像上, 即将src繪制到dest位置上,通過rect對象引導對圖像的繪制。

pygame.time.Clock()

建立一個Clock對象,用于操作時間。

clock.tick(framerate)

控制幀速率,即視窗重新整理速度,例如clock.tick(100)表示每秒鐘100次幀重新整理

pygame.KEYDOWN

通過這個函數pygame會知道這時發生了鍵盤敲擊事件,其中每個鍵的定義如下:

**pygame.K_UP()**上方向鍵

**pygame.K_DOWN()**下方向鍵

**pygame.K_LEFT()**左方向鍵

**pygame.K_RIGHT()**右方向鍵

下面我們編寫我們的第一個Demo(認真了解每一句話)

import pygame,sys


pygame.init()                    #初始化參數
size = width, height = 600,400    #設定窗體大小參數
speed = [1,1]                      #設定移動速度參數
BLACK = 0, 0, 0                    #設定背景顔色參數RGB
screen = pygame.display.set_mode(size)
pygame.display.set_caption("跟着夜寒學Python")
ball = pygame.image.load("test.png")        #導入圖檔,注意圖檔為自己下載下傳的,在自己機子上運作時注意更改
ballrect = ball.get_rect()          #設定圖檔surface參數
fps = 300                          #設定重新整理幀率參數
fclock = pygame.time.Clock()    #建立clock.用于後續操作重新整理時間


while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()
    elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_LEFT:
        speed[0] = speed[0] if speed[0] ==0 else (abs(speed[0]) -1 )* int(speed[0]/abs(speed[0]))
      elif event.key == pygame.K_RIGHT:
        speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
      elif event.key == pygame.K_UP:
        speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
      elif event.key == pygame.K_DOWN:
        speed[1] = speed[1] if speed[1] ==0 else (abs(speed[1]) -1 )* int(speed[1]/abs(speed[1]))
  ballrect = ballrect.move(speed[0], speed[1])
  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(BLACK)
  screen.blit(ball, ballrect)        #将圖檔放在rect切線矩形上
  pygame.display.update()      #重新整理
  fclock.tick(fps)      

       這個小遊戲實作了一個圖檔在螢幕的四壁碰撞反彈(類似于windowsXP的屏保,大家可以自主複制代碼運作看看),使用者可以通過上下左右控制圖檔的運作速度,現在大家可以對照這些函數公式來了解這個執行個體小遊戲,有助于大家對Pygame的進一步認識。

Pygame遊戲開發(一)