python图形化编程pygame游戏模块

文章目录:

一:语句使用模板

基本框架 

1.安装Pygame

2.创建一个主窗口display

3.图像渲染与动画

4.鼠标事件mouse

5.声音和音乐sound

6.设置屏幕背景颜色fill

7.添加文字font

8.绘制图形draw

8.1 绘制多边形polygon

8.2 绘制直线line

8.3 绘制弧线arc

8.4 绘制圆形circle

8.5 绘制椭圆ellipse

8.6 绘制矩形rect

9.Time时间控制

10.Rect区域位置

11.Font文本和字体

12.精灵和碰撞检测Sprite

二:分类语句方法

1.导入包

2.系统

3.窗口

4.动画

5.屏幕/画布/Surface表面/主窗体

6.矩形Rect

7.事件Event

7.1 事件处理方法 

7.2 窗口事件

7.3 鼠标事件

7.4 键盘事件

7.5 游戏手柄事件

7.6 pygame事件 

8.时钟Clock

9.精灵Sprite

10.颜色

11.音乐

12.文字和字体

13.绘制图形

三:项目

飞机大战


必备知识:Python快速入门教程

参考 

官方 :中文文档Pygame官方文档Pygame教程

C中文网:Pygame教程(非常详细)

脚本之家:Python游戏开发之Pygame使用的最全教程分享_python_脚本之家

第三方:python游戏库p颜色ygame经典教程_pygame教程

一:语句使用模板

基本框架 

#导入所需的模块
import sys
import pygame
#引入pygame中所有常量,比如 QUIT
from pygame.locals import *

# 使用pygame之前必须初始化
pygame.init()

# 设置主屏窗口
screen = pygame.display.set_mode((400,400))

# 设置窗口的标题,即游戏名称
pygame.display.set_caption('hello world')

#背景颜色
screen.fill('white')
#--------------------------------------------------------文本字体
# 引入字体类型
f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)

# 生成文本信息,第一个参数文本内容;第二个参数,字体是否平滑;
# 第三个参数,RGB模式的字体颜色;第四个参数,RGB模式字体背景颜色;
text = f.render("刘鑫磊",True,(255,0,0),(0,0,0))

#获得显示对象的rect区域坐标
textRect =text.get_rect()
# 设置显示对象居中
textRect.center = (200,200)
# 将准备好的文本信息,绘制到主屏幕 Screen 上
screen.blit(text,textRect)
#--------------------------------------------------------加载图像
#从外部加载图像:包含图像的 surface 对象
image_surface =pygame.image.load("图片路径")

image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)
    # rect(left,top,width,height)指定图片上某个区域
    # special_flags功能标志位,指定颜色混合模式,默认为 0 表示用纯色填充

#复制并移动
image_surface.scroll(100,50)
#--------------------------------------------------------创建图像
#创建一个 50*50 的图像,并优化显示
face = pygame.Surface((50,50),flags=pygame.HWSURFACE)
#填充颜色
face.fill(color='pink')
#--------------------------------------------------------Transform图像变形
#加载一张图片(455*191)
image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png").convert()
image_new = pygame.transform.scale(image_surface,(300,300))
# 查看新生成的图片的对象类型
#print(type(image_new))
# 对新生成的图像进行旋转至45度
image_1 =pygame.transform.rotate(image_new,45)
# 使用rotozoom() 旋转 0 度,将图像缩小0.5倍
image_2 = pygame.transform.rotozoom(image_1,0,0.5)
#--------------------------------------------------------

# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
#游戏主循环(游戏循环)
while True:
    # 循环获取事件,监听事件状态
    for event in pygame.event.get():
        # 判断用户是否点了"X"关闭按钮,并执行if代码段
        if event.type == pygame.QUIT:
            #卸载所有模块
            pygame.quit()
            #终止程序,确保退出程序
            sys.exit()
#--------------------------------------------------------创建图像
    # 将绘制的图像添加到主屏幕上,(100,100)是位置坐标,显示屏的左上角为坐标系的(0,0)原点
    screen.blit(face, (100, 100))
#--------------------------------------------------------加载图像
    # 将图像放置在主屏幕上
    screen.blit(image_surface,(0,0))
#--------------------------------------------------------Transform图像变形
    # 将最后生成的image_2添加到显示屏幕上
    screen.blit(image_2,(0,0))
#--------------------------------------------------------
    pygame.display.flip() #更新屏幕内容
    #pygame.display.update()#更新屏幕

1.安装Pygame

 在终端执行

pip install pygame

2.创建一个主窗口display

左上角(0,0)、右下角(800,600) 

import sys
import pygame

#使用pygame之前必须初始化
pygame.init()

#设置主屏窗口
screen = pygame.display.set_mode((400,400))
#填充主窗口的背景颜色,参数值RGB(颜色元组)
screen.fill((156,156,156))
#设置窗口标题
pygame.display.set_caption('刘鑫磊')
# 如果没有下列主循环代码,运行结果会一闪而过
while True:
    # 循环获取事件,监听事件
    for event in pygame.event.get():
        # 判断用户是否点了关闭按钮
        if event.type == pygame.QUIT:
            #卸载所有模块
            pygame.quit()
            #终止程序
            sys.exit()
    #更新屏幕内容
    pygame.display.flip()

3.图像渲染与动画

import pygame
import os
# 初始化Pygame
pygame.init()
# 创建一个窗口
screen = pygame.display.set_mode((800, 600))
# 加载一个图像
image_path = os.path.join('path_to_your_image_directory', 'image.png')
image = pygame.image.load(image_path)
# 游戏主循环
running = True
while running:
    # 获取所有事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # 清除屏幕
    screen.fill((0, 0, 0))
    # 绘制图像
    screen.blit(image, (100, 100))
    # 更新屏幕
    pygame.display.flip()
# 游戏结束,退出Pygame
pygame.quit()

4.鼠标事件mouse

用户输入 

#获取当前按下的所有键
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
    # 向左移动角色
    pass
if keys[pygame.K_RIGHT]:
    # 向右移动角色
    pass

跟随鼠标移动花圆

import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450,400))
pygame.display.set_caption("鼠标事件")
# 更新显示
pygame.display.flip()

while True:
    #等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")

    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 获取鼠标当前位置
        print('鼠标按下',event.pos)
        mx,my = event.pos
        # 调用 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()

5.声音和音乐sound

# 加载声音
sound = pygame.mixer.Sound('sound.wav')
# 播放声音
sound.play()
# 加载并播放音乐
pygame.mixer.music.load('music.mp3')
# 播放背景音乐,第一个参数为播放的次数(-1表示无限循环),第二个参数是设置播放的起点(单位为秒)
pygame.mixer.music.play(-1, 0.0)

6.设置屏幕背景颜色fill

# 设置背景颜色
surface.fill((255, 255, 255))
# 更新屏幕
pygame.display.update()

7.添加文字font

import pygame,sys
from pygame.locals import *


pygame.init()

surface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption("我的pygame游戏")
surface.fill((255, 255, 255))

# 获取字体对象
basicFont = pygame.font.SysFont("方正粗黑宋简体", 48)
# 获取当前系统字体fonts = pygame.font.get_fonts()
# surface对象
text = basicFont.render('秀儿', True, (255,255,255), (0,255,0))
# 设置文本位置
textRect = text.get_rect()

textRect.centerx = surface.get_rect().centerx
textRect.centery = surface.get_rect().centery
# 将渲染的surface对象更新到屏幕上
surface.blit(text,textRect)

#更新屏幕
pygame.display.update()
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

8.绘制图形draw

import pygame
from math import pi

#初始化
pygame.init()
# 设置主屏幕大小
size = (500, 450)
screen = pygame.display.set_mode(size)
#设置标题
pygame.display.set_caption("Draw绘图函数")

# 设置一个控制主循环的变量
done = False
#创建时钟对象
clock = pygame.time.Clock()
while not done:
    # 设置游戏的fps
    clock.tick(10)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True  # 若检测到关闭窗口,则将done置为True

    # 绘制一条宽度为 3 的红色对角线
    pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)

    # 绘制多条蓝色的直线(连续直线,非抗锯齿),False 表示首尾不相连
    pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)

    # 绘制一个灰色的矩形区域,以灰色填充区域
    pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)

    # 绘制一个线框宽度为2的矩形区域
    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表示弧线的结束位置,2表示线宽
    pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)

    # 刷新显示屏幕
    pygame.display.flip()

# 点击关闭,退出pygame程序
pygame.quit()

8.1 绘制多边形polygon

import pygame,sys
from pygame.locals import *


pygame.init()

surface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption("我的pygame游戏")
surface.fill((255, 255, 255))

#polygon 来绘制多边形
#第一个参数是屏幕对象,第二个是颜色,第三个是用点串连的一个元组,最后一个和第一个是一致的
pygame.draw.polygon(surface, (0, 0, 255), ((50, 40), (100, 100), (120, 80), (50, 40)))

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

8.2 绘制直线line

#第一个参数是屏幕对象,之后是颜色和两个点,最后一个参数是线条宽度
pygame.draw.line(surface, (0, 0, 255), (50, 40), (100, 100), 10)

8.3 绘制弧线arc

pygame.draw.arc(screen, color2, rect1, ang1, ang2, width=10)
    # 参数的含义解释
    """
    第一个参数:屏幕
    第二个参数:颜色
    第三个参数:开始的角度
    第四个参数:结束的角度
    第五个参数:线条的宽度
    """

8.4 绘制圆形circle

#第一个参数和第二个参数是屏幕对象和颜色,之后是圆心和半径
#最后一个表示宽度,如果设置为0,则是一个实园
pygame.draw.circle(surface, (0, 0, 255), (50, 40), 20, 10)

8.5 绘制椭圆ellipse

#第一个参数和第二个参数是屏幕对象和颜色
#第三个参数分别指定x和y轴的左上角,之后是x和y的半径,最后一个是宽度
pygame.draw.ellipse(surface, (0, 0, 255), (50, 40, 20, 10), 2)

8.6 绘制矩形rect

#第一个参数和第二个参数是屏幕对象和颜色,第三个参数分别制定左上角和右下角
pygame.draw.rect(surface, (0, 0, 255), (50, 40, 20, 10))

绘制矩形框

import pygame
import pygame.locals
import sys

pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Drawing Rectangles")
# 设置名称
Blue = 0, 0, 255
Purple = 160, 32, 240
while True:
    for event in pygame.event.get():
        if event.type == pygame.locals.QUIT or event.type == pygame.locals.KEYDOWN:
            # 还是如果说点击了关闭的按键,或者是按下了任意键,那么就可以关闭程序了
            sys.exit()
    pos = (300, 250, 100, 100)
    # 这里的 pos 不仅设置了位置,而且设置了长度以及宽度
    screen.fill(Purple)
    pygame.draw.rect(screen, Blue, pos, width=10)
    # width 是线条的宽度,screen 表示指定使用哪一个屏幕进行显示
    pygame.display.update()

9.Time时间控制

游戏暂停

import pygame

pygame.init()
screen = pygame.display.set_mode((500,500))
pygame.display.set_caption('游戏暂停')
# 获取以毫秒为单位的时间
t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止
t1 =pygame.time.wait(3000) #暂停游戏3000毫秒
print(t1)
#暂停t1时间后,加载图片
image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png")
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    screen.blit(image_surface,(0,0))
    pygame.display.update()

设置游戏FPS

import pygame

pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('设置游戏FPS')
# 获取以毫秒为单位的时间
t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止
t1 =pygame.time.delay(3000) #暂停游戏3000毫秒
print(t1)
#暂停t1时间后,加载图片
image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png")
#创建时钟对象(控制游戏的FPS)
clock = pygame.time.Clock()
while True:

    #通过时钟对象,指定循环频率,每秒循环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()

10.Rect区域位置

import pygame
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('区域位置')
image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png")
rect1 = pygame.Rect(50,50,100,100)
# 在原图的基础上创建一个新的子图(surface对象)
image_child= image_surface.subsurface(rect1)
rect2 = image_child.get_rect()
#输出的矩形大小为 100*100
print(rect2)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    #在屏幕上显示子图的区域
    screen.blit(image_child,rect1)
    pygame.display.update()

11.Font文本和字体

import sys
import pygame

# 初始化
pygame.init()
screen = pygame.display.set_mode((600,400))
#填充主窗口的背景颜色
screen.fill((20,90,50))
#设置窗口标题
pygame.display.set_caption('render')

# 字体文件路径 C:/Windows/Fonts/simhei.ttf
f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)

# render(text, antialias, color, background=None) -> Surface
text = f.render("网址:c.biancheng.net",True,(255,0,0),(255,255,255))

#获得显示对象的 rect区域大小
textRect =text.get_rect() 

#设置显示对象居中
textRect.center = (300,200)
screen.blit(text,textRect)

while True:
    # 循环获取事件,监听事件
    for event in pygame.event.get():
        # 判断用户是否点了关闭按钮
        if event.type == pygame.QUIT:
            #卸载所有pygame模块
            pygame.quit()
            #终止程序
            sys.exit()
    pygame.display.flip() #更新屏幕内容

12.精灵和碰撞检测Sprite

import pygame

class Snake(pygame.sprite.Sprite):
    #定义构造函数
    def __init__(self,filename,location):
        # 调父类来初始化子类
        pygame.sprite.Sprite.__init__(self)
        # 加载图片
        self.image = pygame.image.load(filename)
        # 获取图片rect区域
        self.rect = self.image.get_rect()
        # 设置位置
        self.rect.topleft=location

# 初始化pygame
pygame.init()
screen = pygame.display.set_mode((500,400))
pygame.display.set_caption('灵和碰撞检测Sprite')
# 填充为白色屏幕
screen.fill((255,255,255))
filename ="C:/Users/Administrator/Desktop/snake.png"

location =(100,150)
snake1 = Snake(filename,location)
# 碰撞检测,必须有两个精灵,因此再创建一个精灵,并使用location来控制第二个精灵的位置
location_2 = (100,80)
snake2 = Snake('C:/Users/Administrator/Desktop/logo.png',location_2)
# 调用 collide_rect()进行矩形区域检测,返回一个布尔值,碰撞返回True,否则返回False
crash_result = pygame.sprite.collide_rect(snake1,snake2)
if crash_result:
    print("精灵碰撞了!")
    pass
else:
    print('精灵没碰撞')

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 绘制精灵到屏幕上
    screen.blit(snake1.image,snake1.rect)
    screen.blit(snake2.image,snake2.rect)
    # 刷新显示屏幕
    pygame.display.update()

二:分类语句方法

Surface(表面):Pygame中的所有图形都是绘制在Surface对象上的,类似画布
        Surface可以是窗口、图像、按钮等,是游戏中最基本的图形对象

Rect(矩形):Pygame中的所有图形都是使用矩形表示的
        Rect可以表示Surface的位置、大小等信息,是游戏中常用的对象

Event(事件):Pygame中的所有操作都是通过事件来实现的
        事件可以是鼠标点击、键盘按下等用户操作,也可以是游戏中的自定义事件

Clock(时钟):Pygame中的所有动画都是使用时钟实现的
        时钟可以控制游戏的帧率、动画速度等

Sprite(精灵):Pygame中的Sprite是一个抽象概念,表示游戏中的可移动对象
        例如人物、怪物等。Sprite可以方便地进行移动、碰撞检测等操作
x,y                                              表示矩形距离 x、y 轴的距离

top, left, bottom, right                         在坐标系内描述矩形的大小

topleft, bottomleft, topright, bottomright       返回一个描述矩形大小的元组

midtop, midleft, midbottom, midright             返回一个描述矩形大小的元组

center, centerx, centery #(centerx,centery)     表示矩形中央坐标(x,y)的值

size, width, height

w,h                                              用于描述矩形的width、height

1.导入包

import pygame

pip install pygame安装Pygame

pygame.init()初始化

游戏
import clock

clock = pygame.time.Clock()创建时钟对象

clock.tick(60)控制游戏帧率

时钟
import sys内置标准模块

from pygame.locals import *

比如 QUIT引入pygame中所有常量

2.系统

退出系统sys.exit()
退出pygamepygame.quit()
更新屏幕pygame.display.update()

更新整个待显示的内容

如果后者没有提供区域位置参数时,其作用和 display.flip() 相同

刷新界面pygame.display.flip()根据选定的区域来更新部分内容

3.窗口

创建窗口size = (700, 500)
screen = pygame.display.set_mode(size=(),flags=0)

设置窗口大小

·size:用来设置窗口的大小

·flags:功能标志位,表示创建的主窗口样式

pygame.display.set_caption("My Game")设置窗口标题
填充窗口颜色screen.fill((255, 255, 255))
更新窗口pygame.display.update()
背景颜色screen.fill((255, 255, 255))

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

pygame.FULLSCREEN            创建一个全屏窗口
pygame.HWSURFACE             创建一个硬件加速窗口,必须和FULLSCREEN同时使用
pygame.OPENGL                创建一个OPENGL渲染窗口
pygame.RESIZABLE             创建一个可以改变大小的窗口
pygame.DOUBLEBUF             创建一个双缓冲窗口,建议在HWSURFACE或OPENGL时使用
pygame.NOFRAME               创建一个没有边框的窗口

4.动画

获取坐标get_rect()

5.屏幕/画布/Surface表面/主窗体

创建Surface对象screen = pygame.display.set_mode(400,400)
创建一个带文本对象

text = f.render("哈哈哈哈",True,(255,255,255),(0,0,0))

创建一个带图像对象surface_image = pygame.image.load("图片路径")
渲染到屏幕

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

通过blit方法将其绘制出来,textRect表示位置坐标
screen.blit(text,textRect)

source:表示要粘贴的 Surface 对象

dest:主窗口中的坐标位置

area: Rect 对象,默认为 None

special_flags:可选参数 

刷新显示屏幕pygame.display.flip()

创建图像Surface=pygame.Surface(size=(width,height),flags,depth)

size:表示Surface对象的矩形区域大小


flage:HWSURFACE存于显存中和SPCALPHA每个像素包含一个alpha通道


depth:指定像素的颜色深度

外部加载图像pygame.image.load('图片路径').convert()

pygame.display.flip() 

pygame.display.get_surface()获取当前显示的Surface对象

pygame.display.flip()更新整个待显示的Surface对象到屏幕上

pygame.display.update()更新部分软件界面显示

pygame.display.lnfo()产生一个VideInfo对象,包含了显示界面的相关信息

pygame.display.set_icon()设置左上角的游戏图标,图标尺寸大小为32*32

pygame.display.iconify()将显示的主窗口即Surface对象最小化,或者隐藏

pygame.display.get_active()当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False

Surface 模块还提供了处理图像的其他方法

pygame.Surface.blit() 	    将一个图像(Surface 对象)绘制到另一个图像上
pygame.Surface.convert() 	修改图像(Surface 对象)的像素格式
pygame.Surface.fill()  	    使用纯色填充 Surface 对象
pygame.Surface.scroll() 	复制并移动 Surface 对象
pygame.Surface.set_alpha() 	设置整个图像的透明度
pygame.Surface.get_at() 	获取一个像素的颜色值
pygame.Surface.set_at() 	设置一个像素的颜色值
pygame.Surface.get_palette()	获取 Surface 对象 8 位索引的调色板
pygame.Surface.map_rgb()  	将一个 RGBA 颜色转换为映射的颜色值
pygame.Surface.set_clip() 	设置该 Surface 对象的当前剪切区域
pygame.Surface.subsurface()  	根据父对象创建一个新的子 Surface 对象
pygame.Surface.get_offset()	获取子 Surface 对象在父对象中的偏移位置
pygame.Surface.get_size()	获取 Surface 对象的尺寸

6.矩形Rect

位置Rect=pygame.Rect(left,top,width,height)rect_x = 50
rect_y = 50
大小rect_width = 50
rect_height = 50
绘制矩形pygame.draw.rect(screen, red, [rect_x, rect_y, rect_width, rect_height])
pygame.Rect.copy()复制矩形
pygame.Rect.move()移动矩形区域,接受一个列表参数
pygame.Rect.move_ip()移动矩形(无返回)
pygame.Rect.inflate()增大或缩小矩形大小
pygame.Rect.clamp()将矩形移到另一个矩形内
pygame.Rect.union()返回一个两个矩形合并后的矩形。
pygame.Rect.fit()按纵横比调整矩形的大小或移动矩形。
pygame.Rect.contains()测试一个矩形是否在另一个矩形内
pygame.Rect.collidepoint() 测试点是否在矩形内
pygame.Rect.colliderect()测试两个矩形是否重叠

7.事件Event

7.1 事件处理方法 

pygame.event.get() 

从事件队列获取一个事件,并在事件队列中删除该事件

键盘鼠标操作

pygame.event.wait() 阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked() 控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.pump()调用该方法后,Pygame会自动处理事件队列
pygame.event.poll() 会根据实际情况返回一个真实的事件,或者一个None
pygame.event.peek() 检测某类事件是否在队列中
pygame.event.clear()  从队列中清除所有的事件
pygame.event.get_blocked() 检测某一类型的事件是否被禁止进入队列
pygame.event.post() 放置一个新的事件在队列中
pygame.event.Event() 创建一个用户自定义的事件
pygame.event.set_allowed()    控制哪些事件允许进入队列

7.2 窗口事件

用户按下窗口的关闭按钮qouit
窗口缩放videorsize
窗口部分公开videoexpose

7.3 鼠标事件

鼠标移动

mousemotion

pos,rel,button
鼠标按下

mousebuttondown

pos,button
鼠标放开

mousebuttondown

pos,button

不同事件类型对应着不同的成员属性 

pygame.event.MOUSEMOTION鼠标移动事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.rel 鼠标相对运动距离(X,Y),相对于上次事件
    event.buttons 鼠标按钮初始状态(0,0,0),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1

pygame.event.MOUSEBUTTONUP鼠标键释放事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3

pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5

7.4 键盘事件

键盘按下keydownunicode,key,mod
键盘释放keyupkey,mod
                                                                                   常用的键
退格键(Backspace)K_BACKSPACE    
制表键(Tab)K_TAB
清除键(Clear)K_CLEAR
回车键(Enter)K_RETURN
暂停键(Pause)K_PAUSE
退出键(Escape)K_ESCAPE
退出按钮quit
空格键(Space)K_SPACE    
0~9K_0~K_9
a~zK_a~k_z    
删除键(delete)K_DELETE
小键盘的0~9K_KP0~K_KP9    
F1~F15K_F1~K_F15    
向上箭头K_UP
向下箭头K_DOWN
向右箭头K_RIGHT
向左箭头K_LEFT    
同时按下Alt键KMOD_ALT

7.5 游戏手柄事件

游戏手柄(Joystick or pad)移动

joyaxismotion

joy,axis,value
游戏球(Joy  ball)移动

joyballomotion

joy,axis,value
游戏手柄(Joystick)移动

joyhatmotion

joy,axis,value
游戏手柄按下

joybuttondown

joy,button
游戏手柄放开

joybutonup

joy,button

7.6 pygame事件 

Pygame被激活或者隐藏ativeevent
Pygame窗口缩放

videosize

Pygame窗口部分公开(expose)

videoexpose

j
触发一个用户事件  

userevent

8.时钟Clock

以毫秒为单位获取时间pygam.time.get_ticks()
使程序暂停一段时间pygame.time.wait()
定时器pygame.time.set_time()每隔一段时间就去执行一些动作
时间对象pygame.time.Clock()确定游戏运行帧数
帧数率(FPS)pygame.time.Clock.tick()更新clock对象
pygame.time.Clock.get_time()获取上一个tick中的时间
pygame.time.Clock.get_fps()计算clock对象的帧数

9.精灵Sprite

                                                                                        sprite(pygame.sprite)模块
self.image加载要显示的精灵图片,控制图片大小和填充色
self.rect精灵图片显示在哪个位置
Sprite.update()刷新精灵图,使其相应效果生效
Sprite.add()添加精灵图到精灵组中(groups)
Sprite.remove()从精灵组中删除选中的精灵图
Sprite.kill()删除精灵组中全部的精灵
Sprite.alive()判断某个精灵是否属于精灵组

                                                                                        精灵容器(group 类)

# 创建精灵组
group = pygame.sprite.Group()

# 向组内添加一个精灵
group.add(sprite_one)
                                                                                        检测精灵是否碰撞的方法
pygame.sprite.collide_rect() 两个精灵之间的矩形检测,即矩形区域是否有交汇,返回一个布尔值。
pygame.sprite.collide_circle()两个精灵之间的圆形检测,即圆形区域是否有交汇,返回一个布尔值。
pygame.sprite.collide_mask() 两个精灵之间的像素蒙版检测,更为精准的一种检测方式。
pygame.sprite.spritecollide() 精灵和精灵组之间的矩形碰撞检测一个组内的所有精灵逐一地对另外一个单个精灵进行碰撞检测,返回值是一个列表,包含了发生碰撞的所有精灵。
pygame.sprite.spritecollideany()精灵和精灵组之间的矩形碰撞检测,上述函数的变体,当发生碰撞时,返回组内的一个精灵,无碰撞发生时,返回 None。
pygame.sprite.groupcollide()检测在两个组之间发生碰撞的所有精灵,它返回值是一个字典,将第一组中发生碰撞的精灵作为键,第二个组中发生碰撞的精灵作为值。

10.颜色

RGBred = (255, 0, 0)
填充窗口背景颜色screen.fill((255, 255, 255))


11.音乐

加载音乐sound = pygame.mixer.Sound('C:/Users/myun/Music/狙击枪.wav')
pygame.mixer.load('C:/Users/myun/Music/狙击枪.wav')
pygame.mixer.music.load(filename)
播放特效音pygame.mixer.Sound(filename)
播放音乐sound.play()
pygame.mixer.music.play(-1, 0.0)

第一个参数为播放的次数(-1表示无限循环)

第二个参数是设置播放的起点(单位为秒)

停止播放pygame.mixer.music.stop()

12.文字和字体

获取文字对象fonts = pygame.font.get_fonts()自定义字体

pygame.font.SysFont(name, size, bold=False, italic=False)

name

        size:表示字体的大小

        bold:字体是否加粗

        italic:字体是否为斜体

系统

自带字体

my_font = pygame.font.Font(filename所在路径, size) 

外部

导入字体

                                                                字体模块
初始化字体模块pygame.font.init()
取消初始化字体模块pygame.font.quit() 
检查字体模块是否被初始化,返回一个布尔值。pygame.font.get_init() 
获得默认字体的文件名。返回系统中字体的文件名pygame.font.get_default_font() 
获取所有可使用的字体,返回值是所有可用的字体列表pygame.font.get_fonts() 
从系统的字体库中匹配字体文件,返回值是完整的字体文件路径pygame.font.match_font() 
从系统的字体库中创建一个 Font 对象pygame.font.SysFont() 系统获取字体
从一个字体文件创建一个 Font 对象pygame.font.Font(filename,size)路径获取字体
                                                                处理字体文对象
该函数创建一个渲染了文本的 Surface 对象

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

        antialias:布尔值参数,是否是平滑字体(抗锯齿)

显示字体
该函数返回渲染文本所需的尺寸大小,返回值是一个一元组 (width,height)pygame.font.Font.size() 
是否为文本内容绘制下划线pygame.font.Font.set_underline() 
检查文本是否绘制了下划线pygame.font.Font.get_underline() 
启动粗体字渲染pygame.font.Font.set_bold() 
检查文本是否使用粗体渲染pygame.font.Font.get_bold() 
启动斜体字渲染pygame.font.Font.set_italic() 
获取字符串中每一个字符的详细参数pygame.font.Font.metrics() 
检查文本是否使用斜体渲染pygame.font.Font.get_italic() 
获取字体文本的行高pygame.font.Font.get_linesize() 
获取字体的高度pygame.font.Font.get_height() 
获取字体顶端到基准线的距离pygame.font.Font.get_ascent() 
获取字体底端到基准线的距离pygame.font.Font.get_descent() 

13.绘制图形

变形pygame.transform.scale()将图片缩放至指定的大小,并返回一个新的Surface对象
pygame.transform.rotate()将图片旋转至指定角度
pygame.transform.rotozoom()以角度旋转图像,同时将图像缩小或放大至指定的倍数
矩形

rect(0,0,20,50)

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

surface:指主窗口

color:该参数用于图形着色

rect:绘制图形的位置和大小

width:可选参数,指定边框的宽度,

             默认为0,表示填充该矩形区域

多边形pygame.draw.polygon(surface,color,points,width)points表示组成多边形的多个(x,y)坐标
圆形pygame.draw.circle(surface,color,pos,radius,width=0)

pos:该参数用来指定圆心的位置

radius:用来指定圆的半径

椭圆形pygame.draw.ellipse(surface,Rect,width=0)start_angle:该段该段圆弧的起始角度
圆弧曲线pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width=1)stop_angle:终止角度
弧线pygame.draw.arc()
直线pygame.draw.line(surface,color,start_pos,end_pos,width=1)

start_pos和end_pos:表示线段的起始位置和结束位置(x,y)

width=1:表示直线的宽度,默认为1

多条直线pygame.line(surface,color,closed,pointlist,width=1)
多条连续的线段pygame.draw.lines()    

pointlist:参数列表,包含了一些列点坐标的列表

closed:布尔参数,如果设置为True,表示直线的第一个端点和直线的最后一个端点要首尾相连

平滑线

(抗锯齿)

pygame.aaline(surface,color,start_pos,end_pos,blend=1)
多条连续的线段pygame.draw.aalines(surface,color,closed,pointlist,blend=1)

三:项目

飞机大战

 Python利用pygame实现飞机大战游戏

  • 32
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PythonPygame游戏-从入门到精通 中文pdf版本 部分目录如下: 系统学习部分 用PythonPygame游戏-从入门到精通(1) Pygame的历史,安装Pygame,第一个Pygame脚本 用PythonPygame游戏-从入门到精通(2) 理解游戏中的事件 用PythonPygame游戏-从入门到精通(3) Pygmae的屏幕显示 用PythonPygame游戏-从入门到精通(4) 使用字体模块Pygame 的错误处理 用PythonPygame游戏-从入门到精通(5) 像素和颜色 用PythonPygame游戏-从入门到精通(6) 使用图像,理解Surface 用PythonPygame游戏-从入门到精通(7) 绘制图形 用PythonPygame游戏-从入门到精通(8) 产生动画和控制帧率 用PythonPygame游戏-从入门到精通(9) 向量基础 用PythonPygame游戏-从入门到精通(10) 用户输入 用PythonPygame游戏-从入门到精通(11) 使用鼠标控制精灵。一个在鼠标旁不断游动的小鱼的例程。 用PythonPygame游戏-从入门到精通(12) 手柄操作,暂无 用PythonPygame游戏-从入门到精通(13) AI初探 用PythonPygame游戏-从入门到精通(14) 状态机 用PythonPygame游戏-从入门到精通(15) 开始AI编程PythonPygame游戏-从入门到精通(16) AI编程总结。一个蚂蚁采集食物,攻击蜘蛛的系统模拟例程。 用PythonPygame游戏-从入门到精通(17) 3D基础 用PythonPygame游戏-从入门到精通(18) 3D中的概念 用PythonPygame游戏-从入门到精通(19) 第一个 3D 程序(伪)。一个空间中的3D立方体的例程。 用PythonPygame游戏-从入门到精通(20) 声音原理 用PythonPygame游戏-从入门到精通(21) 使用声音,播放音效。一个重力模拟金属球碰撞的例程。 用PythonPygame游戏-从入门到精通(22) 播放长时间的背景音乐。一个建议播放器的例程。 额外提高部分 用PythonPygame游戏-从入门到精通(py2exe编) 使用py2exe将pygame脚本转换为exe可执行文件 用PythonPygame游戏-从入门到精通(Sprite篇) 介绍Pygame中不是必须但又很重要的Sprite模块游戏中的角色实现,大多都要靠它。 实践部分 用PythonPygame游戏-从入门到精通(实战一:涂鸦画板1) 一个类似于Windows画图板的小玩意儿,精简了很多功能但是有更帅的笔刷。这一次主要是将笔刷的实现。 用PythonPygame游戏-从入门到精通(实战一:涂鸦画板2) 加上了按钮,我们的涂鸦画板可以用了! 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块1) 俄罗斯方块,却有不是普通的俄罗斯方块。 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块2) 代码构架 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块3) 实现说明 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块4) 完成,提供下载 用PythonPygame游戏-从入门到精通(实战三:植物大战僵尸1)
Python的设计哲学是“优雅”、“明确”、“简单。Python用途极广。图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。 数学处理:NumPy扩展提供大量与许多标准数学库的接口。 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。 数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。 Web编程:应用的开发语言,支持最新的XML技术。 多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。 pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。 黑客编程python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。 用Python写简单爬虫
我们来开发一个游戏吧!我们将使用Pygame,这是一组功能强大而有趣的模块,可用于管理图形、动画乃至声音,让你能够更轻松地开发复杂的游戏。通过使用Pygame来处理在屏幕上绘制图像等任务,你不用考虑众多烦琐而艰难的编码工作,而是将重点放在程序的高级逻辑上。 在本章中,你将安装Pygame,再创建一艘能够根据用户输入而左右移动和射击的飞船。在接下来的两章中,你将创建一群作为射杀目标的外星人,并做其他的改进,如限制可供玩家使用的飞船数以及添加记分牌。 从本章开始,你还将学习管理包含多个文件的项目。我们将重构很多代码,以提高代码的效率,并管理文件的内容,以确保项目组织有序。 创建游戏是趣学语言的理想方式。看别人玩你编写的游戏让你很有满足感,而编写简单的游戏有助于你明白专业级游戏是怎么编写出来的。在阅读本章的过程中,请动手输入并运行代码,以明白各个代码块对整个游戏所做的贡献,并尝试不同的值和设置,这样你将对如何改进游戏的交互性有更深入的认识。 注意:游戏《外星人入侵》将包含很多不同的文件,因此请在你的系统中新建一个文件夹,并将其命名为alien_invasion 。请务必将这个项目的所有文件都存储到这个文件夹中,这样相关的import语句才能正确地工作。
Python的设计哲学是“优雅”、“明确”、“简单。Python用途极广。图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。 数学处理:NumPy扩展提供大量与许多标准数学库的接口。 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。 数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。 Web编程:应用的开发语言,支持最新的XML技术。 多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。 pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。 黑客编程python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。 用Python写简单爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘鑫磊up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值