欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python Pygame的具體使用講解

 更新時間:2017年11月03日 10:46:07   作者:MCFON  
本篇文章主要介紹了python Pygame的具體使用講解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、實驗介紹

1.1 實驗內(nèi)容

在本節(jié)課中,我們將講解Pygame的常用對象及其操作,包括圖形、動畫、文字、音頻等,確保同學們對Pygame有一個基礎(chǔ)的了解,同時為后續(xù)課程做好準備。

1.2 實驗知識點

  1. Pygame圖形
  2. Pygame動畫
  3. Pygame文字
  4. Pygame音頻
  5. Pygame事件

1.3 實驗環(huán)境

  1. Python 2.7.6
  2. Xfce終端

1.4 適合人群

本課程難度為一般,屬于初級級別課程,適合具有Python基礎(chǔ)的用戶,熟悉Python基礎(chǔ)知識加深鞏固。

1.5 代碼獲取

本節(jié)實驗所用到的代碼和相關(guān)資源文件可以通過下面命令下載到實驗樓環(huán)境中,作為參照對比進行學習。

$ wget http://labfile.oss.aliyuncs.com/courses/940/foundation.zip

解壓縮至 /home/shiyanlou/foundation :

$ unzip foundation.zip

二、開發(fā)準備

本次課程主要利用Pygame模塊來進行開發(fā),首先我們需要打開Xfce終端,并使用 pip 命令來安裝Pygame

$ sudo pip install pygame

安裝完成之后進入Python的交互界面,輸入以下命令查看是否成功安裝。

import pygame

若無異常,則說明安裝成功。

三、實驗步驟

3.1 HelloWorld

首先開始我們第一個HelloWorld程序:

# -*- coding: UTF-8 -*-
# helloworld.py

# 導(dǎo)入所需的模塊
import pygame, sys
# 導(dǎo)入所有pygame.locals里的變量(比如下面大寫的QUIT變量)
from pygame.locals import *


# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500, 400))

# 設(shè)置窗口標題
pygame.display.set_caption('Hello World')

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

這里解釋一下上面程序的運行方式

一個游戲循環(huán)(也可以稱為主循環(huán))就做下面這三件事:

  1. 處理事件
  2. 更新游戲狀態(tài)
  3. 繪制游戲狀態(tài)到屏幕上

 

3.2 繪制圖形

Pygame的坐標原點(0,0)點位于左上角,X軸自左向右,Y軸自上向下,單位為像素。

這里介紹一下常用的方法:

pygame.draw.line(Surface, color, start_pos, end_pos, width)此方法用于繪制一條線段

pygame.draw.aaline(Surface, color, start_pos, end_pos, blend)此方法用于繪制一條抗鋸齒的線

pygame.draw.lines(Surface, color, closed, pointlist, width)此方法用于繪制一條折線

pygame.draw.rect(Surface, color, Rect)此方法用于繪制一個矩形

pygame.draw.rect(Surface, color, Rect, width)此方法用于繪制一個矩形框

pygame.draw.ellipse(Surface, color, Rect)此方法用于繪制一個橢圓

pygame.draw.ellipse(Surface, color, Rect, width)此方法用于繪制一個橢圓框

pygame.draw.polygon(Surface, color, pointlist, width)此方法用于繪制一個多邊形

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width)此方法用于繪制一條弧線

pygame.draw.circle(Surface, color, Rect, radius)此方法用于繪制一個圓

以下為示例代碼:

# -*- coding: UTF-8 -*-
# drawing.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *
from math import pi


# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((400,300))

# 設(shè)置窗口標題
pygame.display.set_caption('Drawing')

# 定義顏色
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)

# 設(shè)置背景顏色
screen.fill(WHITE)

# 繪制一條線
pygame.draw.line(screen, GREEN, [0, 0], [50,30], 5)

# 繪制一條抗鋸齒的線
pygame.draw.aaline(screen, GREEN, [0, 50],[50, 80],True)

# 繪制一條折線
pygame.draw.lines(screen, BLACK, False, 
         [[0, 80], [50, 90], [200, 80], [220, 30]], 5)

# 繪制一個空心矩形
pygame.draw.rect(screen, BLACK, [75, 10, 50, 20], 2)

# 繪制一個矩形
pygame.draw.rect(screen, BLACK, [150, 10, 50, 20])

# 繪制一個空心橢圓
pygame.draw.ellipse(screen, RED, [225, 10, 50, 20], 2)

# 繪制一個橢圓
pygame.draw.ellipse(screen, RED, [300, 10, 50, 20])

# 繪制多邊形
pygame.draw.polygon(screen, BLACK, [[100, 100], [0, 200], [200, 200]], 5)

# 繪制多條弧線
pygame.draw.arc(screen, BLACK,[210, 75, 150, 125], 0, pi/2, 2)
pygame.draw.arc(screen, GREEN,[210, 75, 150, 125], pi/2, pi, 2)
pygame.draw.arc(screen, BLUE, [210, 75, 150, 125], pi,3*pi/2, 2)
pygame.draw.arc(screen, RED, [210, 75, 150, 125], 3*pi/2, 2*pi, 2)

# 繪制一個圓
pygame.draw.circle(screen, BLUE, [60, 250], 40)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

3.3 實現(xiàn)動畫

由于人類眼睛的特殊生理結(jié)構(gòu),當所看畫面的幀率高于24的時候,就會認為是連貫的,此現(xiàn)象稱之為 視覺暫留 。

幀率(Frame rate)是用于測量顯示幀數(shù)的量度,所謂的測量單位為每秒顯示幀數(shù)(Frames per Second,簡稱:FPS)

一般來說30fps是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了。

在我們原有坐標系的基礎(chǔ)上添加偏移量,再重新繪制,依次一張一張的循環(huán)繪制下去,就會得到我們想要的物體移動的效果。

Pygame實現(xiàn)動畫主要用到的方法:

pygame.image.load(filename)加載一張圖片

pygame.Surface.blit(source, dest, area=None, special_flags = 0)將圖片繪制到屏幕相應(yīng)坐標上(后面兩個參數(shù)默認,可以不傳)

pygame.time.Clock()獲得pygame的時鐘

pygame.time.Clock.tick(FPS)設(shè)置pygame時鐘的間隔時間

以下為示例代碼:

# -*- coding: UTF-8 -*-
# animation.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置幀率(屏幕每秒刷新的次數(shù))
FPS = 30

# 獲得pygame的時鐘
fpsClock = pygame.time.Clock()

# 設(shè)置窗口大小
screen = pygame.display.set_mode((500, 400), 0, 32)

# 設(shè)置標題
pygame.display.set_caption('Animation')

# 定義顏色
WHITE = (255, 255, 255)

# 加載一張圖片(所用到的的圖片請參考1.5代碼獲?。?
img = pygame.image.load('resources/shiyanlou.PNG')

# 初始化圖片的位置
imgx = 10
imgy = 10

# 初始化圖片的移動方向
direction = 'right'

# 程序主循環(huán)
while True:

  # 每次都要重新繪制背景白色
  screen.fill(WHITE)

  # 判斷移動的方向,并對相應(yīng)的坐標做加減
  if direction == 'right':
    imgx += 5
    if imgx == 380:
      direction = 'down'
  elif direction == 'down':
    imgy += 5
    if imgy == 300:
      direction = 'left'
  elif direction == 'left':
    imgx -= 5
    if imgx == 10:
      direction = 'up'
  elif direction == 'up':
    imgy -= 5
    if imgy == 10:
      direction = 'right'

  # 該方法將用于圖片繪制到相應(yīng)的坐標中
  screen.blit(img, (imgx, imgy))

  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()

  # 刷新屏幕
  pygame.display.update()

  # 設(shè)置pygame時鐘的間隔時間
  fpsClock.tick(FPS)

效果圖如下:

 

3.4 繪制文字

如果你想繪制文字到屏幕上,Pygame提供了很方便的方法使用.ttf字體文件,這樣我們就能很輕易的將文字繪制在屏幕上了。

這里我使用了ARBERKLEY.ttf作為字體,字體文件的獲取請參考1.5代碼獲取。

主要用到的方法:

pygame.font.Font(filename, size)

filename:字體文件的文件名;

size:字體的高height,單位為像素;

pygame.font.Font.render(text, antialias, color, background=None)

text:要顯示的文字;

antialias: 是否抗鋸齒;

color:字體顏色;

background:背景顏色(可選參數(shù));

.get_rect()

獲得一個對象的rect,以便于設(shè)置其坐標位置

以下為示例代碼:

# -*- coding: UTF-8 -*-
# font.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400))

# 設(shè)置窗口的標題
pygame.display.set_caption('Font')

# 定義顏色
WHITE = (255, 255, 255)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 128)

# 通過字體文件獲得字體對象
fontObj = pygame.font.Font('resources/ARBERKLEY.ttf', 50)

# 配置要顯示的文字
textSurfaceObj = fontObj.render('Pygame', True, BLUE, GREEN)

# 獲得要顯示的對象的rect
textRectObj = textSurfaceObj.get_rect()

# 設(shè)置顯示對象的坐標
textRectObj.center = (250, 200)

# 設(shè)置背景
screen.fill(WHITE)

# 繪制字體
screen.blit(textSurfaceObj, textRectObj)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

3.5 播放音頻

在Pygame里播放音頻有兩個方法,一個用來播放特效聲音,一個用來播放背景音樂:

pygame.mixer.Sound(filename)

該方法返回一個Sound對象,調(diào)用它的.play( )方法,即可播放較短的音頻文件(比如玩家受到傷害、收集到金幣等);

pygame.mixer.music.load(filename)

該方法用來加載背景音樂,之后調(diào)用pygame.mixer.music.play( )方法就可以播放背景音樂(Pygame只允許加載一個背景音樂在同一個時刻)

以下為示例代碼:

# -*- coding: UTF-8 -*-
# audio.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400))

# 設(shè)置窗口的標題
pygame.display.set_caption('Audio')

# 定義顏色
WHITE = (255, 255, 255)

# 設(shè)置背景
screen.fill(WHITE)

# 加載并播放一個特效音頻文件(所用到的音頻文件請參考1.5代碼獲?。?
sound = pygame.mixer.Sound('resources/bounce.ogg')
sound.play()

# 加載背景音樂文件
pygame.mixer.music.load('resources/bgmusic.mp3')

# 播放背景音樂,第一個參數(shù)為播放的次數(shù)(-1表示無限循環(huán)),第二個參數(shù)是設(shè)置播放的起點(單位為秒)
pygame.mixer.music.play(-1, 0.0)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 停止播放背景音樂
      pygame.mixer.music.stop()
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

注意:因?qū)嶒灅抢飼簳r不能播放音頻,上述代碼在實驗樓環(huán)境中可能無法正常運行,同學們可以在自己的電腦上嘗試運行。

3.6 事件

Pygame里常用的事件如下表:

事件 產(chǎn)生途徑 參數(shù)
QUIT 用戶按下關(guān)閉按鈕 none
ACTIVEEVENT Pygame被激活或者隱藏 gain, state
KEYDOWN 鍵盤被按下 unicode, key, mod
KEYUP 鍵盤被放開 key, mod
MOUSEMOTION 鼠標移動 pos, rel, buttons
MOUSEBUTTONDOWN 鼠標按下 pos, button
MOUSEBUTTONUP 鼠標放開 pos, button
VIDEORESIZE Pygame窗口縮放 size, w, h

以下為示例代碼:

# -*- coding: UTF-8 -*-
# event.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 定義顏色
WHITE = (255, 255, 255)

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400), 0, 32)

# 設(shè)置窗口的標題
pygame.display.set_caption('Event')

# 設(shè)置背景
screen.fill(WHITE)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

    # 獲得鼠標當前的位置  
    if event.type ==MOUSEMOTION:
      print(event.pos)

    # 獲得鼠標按下的位置
    if event.type ==MOUSEBUTTONDOWN:
      print("鼠標按下:",event.pos)

    # 獲得鼠標抬起的位置
    if event.type ==MOUSEBUTTONUP:
      print("鼠標抬起:",event.pos) 

    # 獲得鍵盤按下的事件  
    if event.type == KEYDOWN:
      if(event.key==K_UP or event.key==K_w):
        print("上")
      if(event.key==K_DOWN or event.key==K_s):
        print("下")
      if(event.key==K_LEFT or event.key==K_a):
        print("左")
      if(event.key==K_RIGHT or event.key==K_d):
        print("右")
      # 按下鍵盤的Esc鍵退出
      if(event.key==K_ESCAPE):
        # 退出pygame
        pygame.quit()
        # 退出系統(tǒng)
        sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

四、實驗總結(jié)

本節(jié)課程我們主要講解了Pygame的一些常用對象及操作,這些都是我們后續(xù)課程需要用到的知識點,希望同學們能熟練掌握這些內(nèi)容。若想要深入了解,可參考下方Pygame官方文檔的鏈接。

五、參考鏈接

Pygame官方文檔

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 常見的Python異常及處理方法總結(jié)

    常見的Python異常及處理方法總結(jié)

    本文主要介紹了Python中常見異常,什么是異常,回溯信息,簡單的異常處理格式,異常嵌套以及異常處理注意事項與建議,有需要的朋友可以借鑒參考下
    2021-09-09
  • 利用Python實現(xiàn)kNN算法的代碼

    利用Python實現(xiàn)kNN算法的代碼

    這篇文章主要介紹了利用Python實現(xiàn)kNN算法的代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python 執(zhí)行函數(shù)的九種方法

    python 執(zhí)行函數(shù)的九種方法

    這篇文章主要介紹了python 執(zhí)行函數(shù)的九種方法,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python3的高階函數(shù)map,reduce,filter的示例詳解

    Python3的高階函數(shù)map,reduce,filter的示例詳解

    這篇文章主要介紹了Python3的高階函數(shù)map,reduce,filter的示例代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • python中的循環(huán)結(jié)構(gòu)問題

    python中的循環(huán)結(jié)構(gòu)問題

    這篇文章主要介紹了python中的循環(huán)結(jié)構(gòu)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python保存字符串到文件的方法

    python保存字符串到文件的方法

    這篇文章主要介紹了python保存字符串到文件的方法,實例分析了Python文件與字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python字典的基本用法實例分析【創(chuàng)建、增加、獲取、修改、刪除】

    Python字典的基本用法實例分析【創(chuàng)建、增加、獲取、修改、刪除】

    這篇文章主要介紹了Python字典的基本用法,結(jié)合具體實例形式分析了Python字典的創(chuàng)建、增加、獲取、修改、刪除等基本操作技巧與注意事項,需要的朋友可以參考下
    2019-03-03
  • Python3 pywin32模塊安裝的詳細步驟

    Python3 pywin32模塊安裝的詳細步驟

    這篇文章主要介紹了Python3 pywin32模塊安裝的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • python實現(xiàn)的漢諾塔算法示例

    python實現(xiàn)的漢諾塔算法示例

    這篇文章主要介紹了python實現(xiàn)的漢諾塔算法,結(jié)合實例形式分析了漢諾塔算法的原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • 基于python編寫監(jiān)控系統(tǒng)各項資源的腳本

    基于python編寫監(jiān)控系統(tǒng)各項資源的腳本

    這篇文章主要為大家詳細介紹了如何編寫一個python腳本,實現(xiàn)監(jiān)控網(wǎng)絡(luò)的流量、CPU使用率、內(nèi)存使用率和磁盤使用情況,感興趣的小伙伴可以了解下
    2023-11-11

最新評論