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

python游戲庫pygame經(jīng)典教程(推薦!)

 更新時間:2022年12月06日 12:01:40   作者:小馬哥不馬虎  
Python Pygame是一款專門為開發(fā)和設(shè)計 2D 電子游戲而生的軟件包,是入門級游戲開發(fā)庫,下面這篇文章主要給大家介紹了python游戲庫pygame經(jīng)典教程的相關(guān)資料,需要的朋友可以參考下

一.Pygame程序基本搭建過程

Pygame搭建游戲窗口主要為如下幾步

1.初始化化程序

在使用Pygame編程之前,我們要對程序進行初始化,代碼如下

pygame.init()

該代碼是整個程序的第一句代碼,它的作用是自動檢測Pygame軟件包是否正常,并完成包括display(顯卡模塊),font(字體模塊),mixer(聲音模塊),cursors(光標控制模塊)等的模塊的初始化

2.創(chuàng)建Surface對象

Surface是Pygame編程的窗口界面,類似畫布,圖像和文本可以顯示在Surface上,創(chuàng)建方式主要有以下方式

(1)創(chuàng)建Surface對象:

#也可以叫做screen對象,本質(zhì)上是一個Surface對象
screen = pygame.display.set_mode(400,400)

(2)創(chuàng)建一個帶文本的Surface對象:

#創(chuàng)建一個包含文字的Surface對象
text = f.render("小馬哥不馬虎",True,(255,255,255),(0,0,0))
#通過blit方法將其繪制出來,textRect表示位置坐標
screen.blit(text,textRect)

(3)創(chuàng)建一個包含圖像的Surface對象:

surface_image = pygame.image.load("圖片路徑")

3.事件監(jiān)聽

一個好的游戲少不了游戲與人的交互,通過事件,人按自己的想法對游戲進行交互

如下是一個關(guān)閉游戲的簡單交互:

#所有g(shù)et()獲取事件
for event in pygame.event.get():
    #判斷事件類型
    if event.type == pygame.QUIT:
        pygame.quit()

4.游戲循環(huán) 

代碼:

while True:
    for event in pymage.event.get():
        if event.type == pygame.QUIT:
            pymage.quit()
            sys.exit()
    #更新并繪制屏幕內(nèi)容
    pygame.display.flip()

二.Pygame Display顯示模塊詳解

Pygame使用pygame.display顯示模塊中的方法創(chuàng)建游戲的主窗口:

格式:

screen = pygame.display.set_mode(size=(),flags=0)

·size:用來設(shè)置窗口的大小

·flags:功能標志位,表示創(chuàng)建的主窗口樣式,flags參數(shù)如下:

flags參數(shù)

標志位功能
pygame.FULLSCREEN創(chuàng)建一個全屏窗口
pygame.HWSURFACE創(chuàng)建一個硬件加速窗口,必須和FULLSCREEN同時使用
pygame.OPENGL創(chuàng)建一個OPENGL渲染窗口
pygame.RESIZABLE創(chuàng)建一個可以改變大小的窗口
pygame.DOUBLEBUF創(chuàng)建一個雙緩沖窗口,建議在HWSURFACE或OPENGL時使用
pygame.NOFRAME創(chuàng)建一個沒有邊框的窗口

1.將Surface對象粘貼至主窗口上

代碼:

scrren.blit(source,dest,area=None,special_flage=0)

·source:表示要粘貼的Surface對象

·dest:主窗口一個標識的坐標位置

·area:接受一個Rect對象,默認為None,如果提供該參數(shù)則相當于摳圖操作,即在屏幕的指定位置顯示想要的內(nèi)容

·special_flags:可選參數(shù),用于指定對應(yīng)位置顏色的混合方式

2.設(shè)置窗口主窗口

screen = pygame.display.set_mode(400,400)

3.填充主窗口背景,參數(shù)值RGB

screen.fill((156,156,156))

4.設(shè)置窗口標題

pygame.display.set.caption('小馬哥不馬虎')

5.更新屏幕內(nèi)容

pygame.display.flip()

6.pygame.display其他方法

方法名稱說明
pygame.display.get_surface()獲取當前顯示的Surface對象
pygame.display.flip()更新整個待顯示的Surface對象到屏幕上
pygame.display.update()更新部分軟件界面顯示
pygame.display.lnfo()產(chǎn)生一個VideInfo對象,包含了顯示界面的相關(guān)信息
pygame.display.set_icon()設(shè)置左上角的游戲圖標,圖標尺寸大小為32*32
pygame.display.iconify()將顯示的主窗口即Surface對象最小化,或者隱藏
pygame.display.get_active()當前顯示界面顯示在屏幕上時返回True,如果窗口被隱藏和最小化時則返回False

三.Pygame Surface創(chuàng)建圖像

1.Surface模塊創(chuàng)建圖像

語法格式:

Surface=pygame.Surface(size=(width,height),flags,depth)

·size:表示Surface對象的矩形區(qū)域大小

·flage:功能標志位,有兩個可選參數(shù)值HWSURFACE和SPCALPHA,前者代表將創(chuàng)建的Surface對象存放于顯存中,后者表示讓圖像的每一個像素包含一個alpha通道

·depth:指定像素的顏色深度,默認為自適應(yīng)模式,由Pygame自動調(diào)節(jié)

代碼實例:

import pygame
import sys
 
pygame.init()
#設(shè)置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('blue')
#設(shè)置窗口標題
pygame.display.set_caption('小馬哥不馬虎')
#創(chuàng)建一個圖像
face = pygame.Surface((60,60),flags=pygame.HWSURFACE)
#填充圖像
face.fill(color='pink')
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    #將圖像添加到主屏幕上
    screen.blit(face,(100,100))
    #更新屏幕內(nèi)容
    pygame.display.flip()

效果:

2.Surface從外部加載圖像

語法格式:

pygame.image.load('圖片路徑').convert()

代碼實例:

import pygame
import sys
 
pygame.init()
#設(shè)置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('white')
#設(shè)置窗口標題
pygame.display.set_caption('小馬哥不馬虎')
#加載圖片
image_surface = pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)
image_surface.scroll(100,60)  #移動圖片
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    #將圖像添加到主屏幕上
    screen.blit(image_surface,(0,0))
    #更新屏幕內(nèi)容
    pygame.display.flip()

效果圖:

Surface模塊處理圖像方法:

方法說明
pygame.Surface.blit()將一個圖像繪制到另一個圖像上
pygame.Surface.convert()修改圖像的格式
pygame.Surface.fill()使用純色填充Surface圖像
pygame.Surface.scroll()復(fù)制并移動Surface對象
pygame.Surface.set_alpha()設(shè)置整個圖像的透明度
pygame.Surface.get_at()獲取一個像素的顏色值
pygame.Surface.set_at()設(shè)置一個像素的顏色值
pygame.Surface.get_palette()獲取Surface對象8位索引的調(diào)色板
pygame.Surface.map_rgb()將一個RGBA顏色轉(zhuǎn)換為映射的顏色值
pygame.Surface.set_clip()設(shè)置該Surface對象的剪切區(qū)域
pygame.Surface.subsurface()根據(jù)父對象創(chuàng)建一個新的子Surface對象
pygame.Surface.get_offset()獲取子Surface對象在父對象中的偏移量
pygame.Surface.get_size()獲取Surface對象的大小

四.Pygame Transform圖像變形 

Transform方法

方法說明
pygame.transform.scale()將圖片縮放至指定的大小,并返回一個新的Surface對象
pygame.transform.rotate()將圖片旋轉(zhuǎn)至指定角度
pygame.transform.rotozoom()以角度旋轉(zhuǎn)圖像,同時將圖像縮小或放大至指定的倍數(shù)

五.Pygame Time時間控制

1.游戲暫停

Pygame.time模塊提供以下常用方法

方法說明
pygam.time.get_ticks()以毫秒為單位獲取時間
pygame.time.wait()使程序暫停一段時間
pygame.time.set_time()創(chuàng)建一個定時器,即每隔一段時間就去執(zhí)行一些動作
pygame.time.Clock()創(chuàng)建一個時間對象來幫助我們確定游戲要以多大的幀數(shù)運行

代碼實例:

import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('時間設(shè)置')
#獲取時間
t=pygame.time.get_ticks()
#暫停游戲3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
        screen.blit(image_surface,(0,0))
        pygame.display.update()

效果:三秒后加載圖片

2.設(shè)置游戲的幀數(shù)率(FPS)

Clock()方法可以實現(xiàn)對游戲幀數(shù)的設(shè)置

方法說明
pygame.time.Clock.tick()更新clock對象
pygame.time.Clock.get_time()獲取上一個tick中的時間
pygame.time.Clock.get_fps()計算clock對象的幀數(shù)

代碼實例:

import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('時間設(shè)置')
#獲取時間
t=pygame.time.get_ticks()
#暫停游戲3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
#創(chuàng)建時間對象
clock = pygame.time.Clock()
while True:
    #通過時間對象指定循環(huán)幀數(shù),每秒循環(huán)60次
    clock.tick(60)
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
        screen.blit(image_surface,(0,0))
        pygame.display.update()

注:游戲幀數(shù)中在動態(tài)圖時才顯現(xiàn)出來

六.Pygame Rect區(qū)域位置

Rect()方法創(chuàng)建一個指定位置,指定大小的矩形區(qū)域

語法格式:

Rect=pygame.Rect(left,top,width,height)

代碼實例: 

import pygame
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('小馬哥不馬虎')
image_surface = pygame.image.load("C:/Users/myun/Pictures/bg.jpg")
rect1 = pygame.Rect(50,50,100,100)
# 在原圖的基礎(chǔ)上創(chuàng)建一個新的子圖(surface對象)
image_child= image_surface.subsurface(rect1)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    #在屏幕上顯示子圖的區(qū)域
    screen.blit(image_child,rect1)
    pygame.display.update()

效果:在圖片上截取了一個和Rect1同樣大小的矩形區(qū)域

Rect對其他常用方法:

方法說明
pygame.Rect.copy()復(fù)制矩形
pygame.Rect.move()移動矩形區(qū)域,接受一個列表參數(shù)
pygame.Rect.move_ip()移動矩形(無返回)
pygame.Rect.inflate()增大或縮小矩形
pygame.Rect.clamp()將矩形移動到另一個矩形內(nèi)
pygame.Rect.union()返回兩個矩形合并后的矩形
pygame.Rect.fit()按橫縱比調(diào)整矩形或移動矩形
pygame.Rect.contains()測試一個矩形是否在另個矩陣內(nèi)
pygame.Rect.collidepoint()測試點是否在矩形中
pygame.Rect.colliderect()測試兩個矩形是否重疊

七.Pygame Event事件模塊 

1.事件類型

通過事件類型,可以有序的,逐一的處理用戶的操作

事件

事件類型描述成員屬性
        QOUIT用戶按下窗口的關(guān)閉按鈕none
ATIVEEVENTPygame被激活或者隱藏

gain,state

 KEYDOWN鍵盤按下unicode,key,mod
KEYUP鍵盤釋放key,mod
MOUSEMOTION鼠標移動pos,rel,button
MOUSEBUTTONDOWN鼠標按下pos,button
MOUSEBUTTONUP鼠標放開pos,button
JOYAXISMOTION游戲手柄(Joystick or pad)移動joy,axis,value
JOYBALLMOTION游戲球(Joy  ball)移動joy,axis,value
JOYHATMOTION游戲手柄(Joystick)移動joy,axis,value
JOYBUTTONDOWN游戲手柄按下joy,button
JOYBUTTONUP游戲手柄放開joy,button
VIDEORESIZEpygame窗口縮放size,w,h
VIDEOEXPOSEPygame窗口部分公開none
USEREVENT觸發(fā)一個用戶事件事件代碼

2.事件處理方法

Pygam.event模塊提供了處理事件的常用方法,如下:

方法說明
pygame.event.get()從事件隊列獲取一個事件,并在事件隊列中刪除該事件
pygame.event.wait()阻塞直至事件發(fā)生才會繼續(xù)執(zhí)行,若沒有事件發(fā)生將一直處于阻塞狀態(tài)
pygame.event.set_blocked()控制哪些事件禁止進入隊列,如果參數(shù)值為None,則表示禁止所有事件進入
pygame.event.pump()調(diào)用該方法后,Pygame會自動處理事件隊列
pygame.event.poll()會根據(jù)實際情況返回一個真實的事件,或者一個None
pygame.event.peek()檢測某類事件是否在隊列中
pygame.event.clear()從隊列中清除所有的事件
pygame.event.get_blocked()檢測某一類型的事件是否被禁止進入隊列
pygame.event.post()放置一個新的事件在隊列中
pygame.event.Event()創(chuàng)建一個用戶自定義的事件
pygame.event.set_allowed()控制哪些事件允許進入隊列

3.處理鍵盤事件

鍵盤事件通過一個key屬性,通過該屬性可以獲取鍵盤的按鍵,如下是鍵盤按鍵的常量:

常量名描述
K_BACKSPACE

退格鍵(Backspace)

K_TAB制表鍵(Tab)
K_CLEAR清除鍵(Clear)
K_RETURN回車鍵(Enter)
K_PAUSE暫停鍵(Pause)
K_ESCAPE退出鍵(Escape)
K_SPACE

空格鍵(Space)

K_0~K_90~9
K_a~k_za~z
K_DELETE

刪除鍵(delete)

K_KP0~K_KP9

小鍵盤的0~9

K_F1~K_F15F1~F15
K_UP向上箭頭
K_DOWN向下箭頭
K_RIGHT向右箭頭
K_LEFT向左箭頭
KMOD_ALT同時按下Alt鍵

4.處理鼠標事件

事件說明
MOUSEMOTION鼠標按下
MOUSEBUTTONDOWN鼠標釋放
MOUDEBUTTONUP鼠標釋放
import pygame
from random import randint
# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450,400))
# 更新顯示
pygame.display.flip()
while True:
    #等待事件發(fā)生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")
    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 獲取鼠標當前位置
        print('鼠標按下',event.pos)
        mx,my = event.pos
        # 調(diào)用 pygame.draw 模塊畫圓
        pygame.draw.circle(screen,(255,255,0),(mx,my),50)
        # 處理完,更新顯示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠標彈起')
        pass
    if event.type == pygame.MOUSEMOTION:
        print('鼠標移動')
        mx, my = event.pos
        # 隨機生成 RGB 顏色值
        r = randint(0,255)
        g = randint(0,255)
        b = randint(0,255)
        pygame.draw.circle(screen, (r,g,b,),(mx, my), 50)
        # 處理完,更新顯示
        pygame.display.update()

八.Pygame Dra繪圖函數(shù)

1.繪制矩形

語法格式:

pygame.draw.rect(surface,color,rect,width)

·surface:指主窗口

·color:該參數(shù)用于圖形著色

·rect:繪制圖形的位置和大小

·width:可選參數(shù),指定邊框的寬度,默認為0,表示填充該矩形區(qū)域

注:當width>0時,表示線框的寬度,而width<0時,此時不會繪制任何圖形

2.繪制多邊形

語法格式:

pygame.draw.polygon(surface,color,points,width)

其余參數(shù)與上面相同,points表示組成多邊形的多個(x,y)坐標

3.繪制圓形

語法格式:

pygame.circle(surface,color,pos,radius,width=0)

·pos:該參數(shù)用來指定圓心的位置

·radius:用來指定圓的半徑

4.繪制橢圓形

語法格式:

pygame.draw.ellipse(surface,Rect,width=0)

5.繪制圓弧曲線

語法格式:

pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width=1)

·start_angle:該段該段圓弧的起始角度

·stop_angle:終止角度

6.繪制直線

語法格式:

一條直線:

pygame.draw.line(surface,color,start_pos,end_pos,width=1)

·start_pos和end_pos:表示線段的起始位置和結(jié)束位置(x,y)

·width=1:表示直線的寬度,默認為1

一條消除鋸齒的平滑線:

pygame.aaline(surface,color,start_pos,end_pos,blend=1)

多條直線:

pygame.line(surface,color,closed,pointlist,width=1)

·pointlist:參數(shù)列表,包含了一些列點坐標的列表

·closed:布爾參數(shù),如果設(shè)置為True,表示直線的第一個端點和直線的最后一個端點要首尾相連

多條抗鋸齒直線:

pygame.draw.aalines(surface,color,closed,pointlist,blend=1)

繪圖方法總匯:

pygame.draw模塊繪圖方法

方法說明
pygame.draw.rect()繪制矩陣
pygame.draw.polygon()繪制多邊形
pygame.draw.circle()根據(jù)圓心和半徑繪制圓形
pygame.draw.ellipse()繪制一個橢圓形
pygame.draw.arc()繪制弧線
pygame.draw.line()繪制線段
pygame.draw.ines()繪制多條連續(xù)的線段
pygame.draw.aaline()繪制一條平滑的線段(抗鋸齒)
pygame.draw.aalines()繪制多條連續(xù)的線段

代碼實例:

import pygame
from math import pi
#初始化
pygame.init()
# 設(shè)置主屏幕大小
size = (500, 450)
screen = pygame.display.set_mode(size)
# 設(shè)置一個控制主循環(huán)的變量
done = False
#創(chuàng)建時鐘對象
clock = pygame.time.Clock()
while not done:
    # 設(shè)置游戲的fps
    clock.tick(10)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True  # 若檢測到關(guān)閉窗口,則將done置為True
    # 繪制一條寬度為 3 的紅色對角線
    pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)
    # 繪制多條藍色的直線(連續(xù)直線,非抗鋸齒),F(xiàn)alse 表示首尾不相連
    pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)
    # 繪制一個灰色的矩形區(qū)域,以灰色填充區(qū)域
    pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)
    # 繪制一個線框?qū)挾葹?的矩形區(qū)域
    pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2)
    # 繪制一個橢圓形,其線寬為2
    pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2)
    # 繪制一個實心的紅色橢圓形
    pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20))
    # 繪制一個綠色邊框(寬度為2)三角形
    pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2)
    # 繪制一個藍色實心的圓形,其中[60,250]表示圓心的位置,40為半徑,width默認為0
    pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40)
    # 繪制一個圓弧,其中0表示弧線的開始位置,pi/2表示弧線的結(jié)束位置,2表示線寬
    pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)
    # 刷新顯示屏幕
    pygame.display.flip()
# 點擊關(guān)閉,退出pygame程序
pygame.quit()

效果圖:

九.字體繪制

font模塊可以繪制字體

·pygame.font.Font(filename,size):獲取字體

·pygame.font.Font.render(text,antialias,color,background=None):顯示字體

·get_rect():獲取坐標對象

實例:

import pygame,sys
from pygame.locals import *
 
pygame.init()
 
surface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption("文字繪制")
surface.fill((255, 255, 255))
 
# 獲取字體對象,可以獲取系統(tǒng)自帶的,也可以自定義字體
fonts = pygame.font.get_fonts()
fonts = 'fonts/ARBERKLEY.ttf'
basicFont = pygame.font.SysFont(fonts, 50)
 
# surface對象
text = basicFont.render('這是一串字符', True, (255,255,255), (0,255,0))
 
# 設(shè)置文本位置
textRect = text.get_rect()
 
textRectObj.center = (250, 200)
 
# 將渲染的surface對象更新到屏幕上
surface.blit(text,textRect)
 
# 程序主循環(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()

十.音頻播放

mixer音頻模塊

·pygame.mixer.Sound(filename):播放特效音

·pygame.mixer.music.load(filename):加載背景音樂

代碼實例:

import pygame, sys
from pygame.locals import *
 
# 初始化pygame
pygame.init()
 
# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500, 400))
 
# 設(shè)置窗口的標題
pygame.display.set_caption('音頻播放')
 
# 設(shè)置背景
screen.fill((255, 255, 255))
 
# 加載并播放一個特效音頻文件
sound = pygame.mixer.Sound('C:/Users/myun/Music/狙擊槍.wav')
sound.play()
 
# 加載背景音樂文件
pygame.mixer.music.load('C:/Users/myun/Music/Oh The Larceny - Light That Fire.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()

總結(jié)

到此這篇關(guān)于python游戲庫pygame經(jīng)典教程的文章就介紹到這了,更多相關(guān)python游戲庫pygame內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論