Python游戏开发入门

目录

一、pygame最小开发框架

pygame介绍:Pygame是一个开源的Python模块,专门用于开发2D游戏和多媒体应用程序。它基于Simple DirectMedia Layer(SDL)库,并提供了一系列功能,使得使用Python语言进行游戏开发变得简单和直观。Pygame的设计目标是提供一个跨平台的框架,使得开发者可以在不同的操作系统上运行他们的游戏,而无需担心底层的系统差异。

pygame的安装:以管理员身份运行cmd(Windows 操作系统中的命令提示符),执行 pip install pygame,pygame就自动安装好了;

pygame的安装检测:cmd中执行python ‐m pygame.examples.alien,若出现一个小游戏,则说明pygame安装成功啦!

pygame的最小开发框架:

 最小程序:

 最小程序代码解释:

import pygame,sys:

pygame.init():

pygame.display.set_mode((600,400)):  

pygame.display.set_caption("Pygame游戏之旅"):

pygame.enent.get():

event.type:

pygame.QUIT:

pygame.display.flip()与pygame.display.uplate()的区别:


 

慕课学习链接

一、Pygame最小开发框架

1.Pygame介绍:

Pygame是一个开源的Python模块,专门用于开发2D游戏和多媒体应用程序。它基于Simple DirectMedia Layer(SDL)库,并提供了一系列功能,使得使用Python语言进行游戏开发变得简单和直观。Pygame的设计目标是提供一个跨平台的框架,使得开发者可以在不同的操作系统上运行他们的游戏,而无需担心底层的系统差异。

2.Pygame的安装:

以管理员身份运行cmd(Windows 操作系统中的命令提示符),执行 pip install pygame,pygame就自动安装好了;

3.Pygame的安装检测:

cmd中执行python ‐m pygame.examples.alien,若出现一个小游戏,则说明pygame安装成功啦!

4.Pygame的最小开发框架:

f79868a99446453c8e93775b1eec8628.bmp1b4fca92d8b341689cfc8fe672da7b19.bmp

 5.最小程序:

# Unit PYG02: Pygame Hello World Game
import pygame,sys

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pygame游戏之旅")

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

 二、最小程序框架代码的解释

1.import pygame,sys:

sys,pygame是Python的标准库,提供Python运行时环境变量的操控;sys.exit()用于退出结束游戏并退出;

2.pygame.init():

是 Pygame 模块中的一个函数,用于初始化 Pygame 模块,在使用 Pygame 的任何功能之前,必须先调用 pygame.init() 函数来初始化 Pygame 的各种功能模块及变量,如事件处理、图像、声音等。 

3.pygame.display.set_mode((600,400)):  

a.是 Pygame 模块中的一个函数,用于创建一个新的显示窗口或屏幕,以便在其中绘制图形和处理事件;   b.这个函数返回一个 Surface 对象,代表了创建的窗口或屏幕,你可以在这个 Surface 上绘制图形和文本;   c. 函数接受一个参数,即一个表示窗口大小的元组。这个元组包含两个整数,分别代表窗口的宽度和高度;   d.此外,这个函数还可以接受一些可选的参数,用于指定窗口的其他属性,如窗口的标题、是否全屏显示、是否可调整大小等。

4.pygame.display.set_caption("Pygame游戏之旅"):

a.是 Pygame 模块中的一个函数,用于设 置 Pygame 窗口的标题。当你调用这个函数时,它会更改窗口的标题栏中显示的文本;    b.这个函数通常在创建窗口后调用,以设置窗口的名称或标题;    c.它接受一个字符串参数,该字符串将作为窗口的标题显示;     d.函数通常在程序的开始部分调用,以便在用户看到窗口之前设置好标题。这样,用户就可以清楚地知道他们正在运行的是哪个程序。

5.pygame.enent.get():

是 Pygame 模块中的一个函数,从Pygame的事件队列中取出事件,并从队列中删除该事件。事件可以是多种类型,例如按键事件、鼠标事件、窗口事件等。每个事件都有自己的属性和方法,用于描述事件的类型和相关信息。

6.event.type:

event.type 是一个属性,它表示事件的类型。当你从 Pygame 的事件队列中获取一个事件时,event.type 可以用来确定该事件的类型。Pygame 支持多种类型的事件,每种事件类型都有其特定的用途和属性。

7.pygame.QUIT:

是 Pygame 模块中定义的一个事件类型常量,它代表了用户请求退出程序的事件。当用户关闭窗口或点击窗口的关闭按钮时,Pygame 会生成一个 pygame.QUIT 事件,并将其放入事件队列中。在 Pygame 程序中,通常需要在主循环中检查 pygame.QUIT 事件,以便在用户请求退出时能够正确地响应。如果检测到 pygame.QUIT 事件,程序应该执行清理工作并退出。

8.pygame.display.flip()与pygame.display.uplate()的区别:

在 Pygame中 pygame.display.flip() 和 pygame.display.update() 都用于更新屏幕显示,但它们的行为有所不同:

9.pygame.display.flip():
a.pygame.display.flip() 会更新整个屏幕的内容,包括所有已经绘制的图形和图像。它会告诉 Pygame 显示卡将双缓冲区的内容复制到屏幕上,这通常会导致屏幕内容的刷新。
b.flip() 通常用于双缓冲场景,以避免屏幕闪烁和撕裂现象。
c.flip() 会等待直到所有屏幕内容都更新完毕,这可能会导致一些延迟。

10.pygame.display.update():

a.pygame.display.update() 用于更新屏幕上的一部分区域,而不是整个屏幕。它允许你指定一个矩形区域,只有这个区域内的内容会被更新。
b.update() 通常用于单缓冲场景,或者当你只想更新屏幕上的特定部分时。
c.update() 不会等待屏幕内容更新完毕,因此它通常比 flip() 更快,但可能不会提供双缓冲的全部好处。

在大多数情况下,如果你正在使用双缓冲来避免屏幕闪烁,你会使用 pygame.display.flip()。如果你需要更精细地控制屏幕更新,例如只更新屏幕上变化的部分,你可以使用pygame.display.update()。

三、Pygame屏幕绘制机制

1.屏幕控制

pygame.display用来控制pygame游戏的屏幕,pygame有且只有一个屏幕,屏幕左上角坐标为(0,0),向右为x轴正方向,向下为y轴正方向,以像素为单位.

2.屏幕控制需求

(1).屏幕模式:全屏、屏幕大小可调节、无边框.

(2).更改游戏标题栏内容

(3).更改游戏图标

3.屏幕控制的重要函数

(1).屏幕尺寸和模式:pygame.display.set_mode()和pygame.display.Info()

(2).窗口标题和图标:pygame.display.set_caption()、pygame.display.set_icon()、pygame.display.get_caption()

(3).窗口感知和刷新:pygame.display.get_active()、pygame.display.flip()、pygame.display.update()

1.pygame.display.set_mode(size,flags):

size是游戏屏幕的分辨率,采用(width, height)方式输入

flags用来控制显示类型,可用|组合使用,常用显示标签如下:

† pygame.RESIZABLE            窗口大小可调

† pygame.NOFRAME              窗口没有边界显示

† pygame.FULLSCREEN        窗口全屏显示        

注意:每种显示方式要配合相应的处理机制

2.pygame.display.Info():

产生一个显示信息对象VideoInfo,表达当前屏幕的参数信息

在.set _ mode()之前调用,则显示当前系统显示参数信息

参数很多,其中有两个十分重要,如下:

† current _ w:当前显示模式或窗口的像素宽度

† current _ h:当前显示模式或窗口的像素高度

3.pygame.VIDEORESIZE

这是一种窗口大小更改的事件

事件发生后,返回event.size元组,包含新窗口的宽度和高度

size[0] 宽度,也可以用event.w

size[1] 高度,也可以用event.h

返回参数仅在事件发生时有用

4.pygame.display.set_caption(title,icontitle)

title设置窗口的标题内容(与窗口图标区别)

icontitle设置图表化后的小标题,小标题可选,部分系统没有

5.pygame.display.get_caption()

返回当前设置窗口的标题及小标题内容

返回结构为(title, icontitle)

该函数与游戏交互逻辑配合,可以根据游戏情节修改标题内容

6.pygame.display.set_icon(surface)

设置窗口的图标效果

图标是一个Surface对象

下载:icon=pygame.image.load("图片路径")

7.pygame.display.get_active()

该函数可以用来判断是否游戏窗口被最小化

窗口在系统中显示(屏幕绘制/非图标化)时返回True,否则返回False

进一步,判断后可以暂停游戏,改变响应模式等

8.pygame.display.flip()

重新绘制整个窗口

9.pygame.display.update()

仅重新绘制窗口中有变化的区域,相比flip()执行更快

四、Pygame事件处理机制

1.Pygame事件处理机制简介

a.事件处理需求:

响应用户键盘、鼠标等外设操作

响应屏幕尺寸和模式变化

响应游戏情节的特定触发条件

产生一些触发条件等

b.Pygame事件队列

用户对事件逐一处理,队列缓存并且派发所有事件,原则上先到先处理.

c.Pygame事件

pygame.event.EventType
• 事件本质上是一种封装后的数据类型(对象)
• EventType是Pygame的一个类,表示事件类型
• 事件类型只有属性,没有方法
• 用户可自定义新的事件类型

各种事件类型及属性:

60245775bc7f4485ac6c0dc24276fbd9.jpeg
 

2.Pygame事件处理的重要函数

处理事件函数:
pygame.event.get() 

从事件队列中获得事件列表,即获得所有被队列的事件

for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#可以增加参数,获得某类或某些类事件:
pygame.event.get(type)
pygame.event.get(typelist)

pygame.event.poll()

• 从事件队列中获得一个事件

While True:
event = pygame.event.poll()


• 事件获取将从事件队列中删除
• 如果事件队列为空,则返回 event.NOEVENT

pygame.event.clear()

• 从事件队列中删除事件,默认删除所有事件
• 该函数与pygame.event.get()类似,区别仅是不对事件进行处理
• 可以增加参数,删除某类或某些类事件:
pygame.event.clear(type)
pygame.event.clear(typelist)

操作事件队列:
pygame.event.set_blocked()

 控制哪些类型事件不允许被保存到事件队列中

pygame.event.get_blocked()

• 测试某个事件类型是否被事件队列所禁止
• 如果事件类型被禁止,则返回True,否则返回False

pygame.event.set_allowed()

 控制哪些类型事件允许被保存到事件队列中

生成事件:

pygame.event.post()

• 产生一个事件,并将其放入事件队列
• 一般用于放置用户自定义事件(pygame.USEREVENT)
• 也可以用于放置系统定义事件(如鼠标或键盘等),给定参数

pygame.event.Event()

• 创建一个给定类型的事件
• 其中,事件的属性和值采用字典类型复制,属性名采用字符串形式
• 如果创建已有事件,属性需要一致

3.键盘事件及类型的使用

键盘事件及属性:

键盘按下事件:pygame.event.KEYDOWN

属性:event.unicode  按键的unicode码,与平台有关,不推荐使用.

        event.key         按键的常量名称

        event.mod        按键修饰符的组合值

键盘释放事件:pygame.event.KEYUP

属性:event.key         按键的常量名称

        event.mod        按键修饰符的组合值

event.mod:

修饰符的按位或运算   event.mod=KMOD_ALT | KMOD_SHIFT

按键的常量名称:

afdc52d84a6e4ff1ae44a8724ba9ee21.jpeg

3104ab4ba3cb4ad3ac223232e0929ce3.jpeg

b9429a029c874096a837cbe04baafb27.jpeg

 按键的修饰符:

e18cc6b4b32e4ae098bc262eadbedd59.jpeg

鼠标事件及类型的使用

鼠标类型及属性:

鼠标移动事件:pygame.event.MOUSEMOTION

• event.pos:鼠标当前坐标值(x,y),相对于窗口左上角
• event.rel:鼠标相对运动距离(X,Y),相对于上次事件
• event.buttons:鼠标按钮状态(a,b,c),对应于鼠标的三个键
鼠标键释放事件: pygame.event.MOUSEBUTTONUP

• event.pos:鼠标当前坐标值(x,y),相对于窗口左上角
• event.button:鼠标按下键编号n,取值 0/1/2,分别对应三个键
鼠标键按下事件:pygame.event.MOUSEBUTTONDOWN

• event.pos:鼠标当前坐标值(x,y),相对于窗口左上角
• event.button:鼠标按下键编号n,取值为整数,左键为1,右键为3,与设备相关

五、Pygame色彩与绘图机制
1.Pygame色彩机制

pygame.Color

Color类用于表达色彩,使用RGB或RGBA色彩模式,A可选(透明度),Color类可以用色彩名字、RGBA值、HTML色彩格式等方式定义
Color(name) 例如:Color("grey")
Color(r,g,b,a) 例如:Color(190, 190, 190, 255)
Color(rgbvalue) 例如:Color("#BEBEBEFF")

RGB色彩模式

• 红绿蓝三个通道颜色组合
• 覆盖视力所能感知的所有颜色
• RGB取值范围0-255

fe2a0bad41c14ab4ba3c3d297a92a882.png

RGBA色彩模式
• RGB色彩模式之外增加了第四维度:alpha通道
• alpha通道表示不透明度,取值0-255,默认255
• alpha通道值越大,不透明度越高,255表示不透明 

pygame.Color类
pygame.Color.r获得Color类的红色值r
pygame.Color.g获得Color类的绿色值g
pygame.Color.b获得Color类的蓝色值b
pygame.Color.a获得Color类的不透明度值a

pygame.Color.normalize将RGBA各通道值归一到0-1之间

2.图形绘制机制

pygame.draw

向屏幕上绘制一些简单的图形,如直线、圆形、椭圆等任何一个图形绘制后,会返回一个矩形Rect类表示该形状圆形绘制后,用Rect类表示

Rect类(pygame.Rect)
表达一个矩形区域的类,用于存储坐标和长度信息
Pygame利用Rect类来操作图形/图像等元素
四个参数如下:
left, top, width, height(矩形左上角点坐标为(left,top))

Rect类提供了很多属性和方法

pygame.draw

.rect() 矩形   .line() 直线   .polygon() 多边形    .lines() 连续多线    .circle() 圆形
.aaline() 无锯齿线    .ellipse() 椭圆形   .aalines() 连续无锯齿线     .arc() 椭圆弧形

矩形绘制

pygame.draw.rect(Surface, color, Rect, width=0)
• Surface 矩形的绘制屏幕
• color矩形的绘制颜色
• Rect矩形的绘制区域
• width=0 绘制边缘的宽度,默认为0,即填充图形
多边形绘制
pygame.draw.polygon(Surface, color, pointlist, width=0)
• Surface   多边形的绘制屏幕
• color       多边形的绘制颜色
• pointlist  多边形顶点坐标列表
• width=0   绘制边缘的宽度,默认为0,即填充图形

圆形绘制
pygame.draw.circle(Surface, color, pos, radius, width=0)
• Surface   圆形的绘制屏幕
• color       圆形的绘制颜色
• pos          圆形的圆心坐标
• radius      圆形的半径
• width=0    绘制边缘的宽度,默认为0,即填充图形

椭圆形绘制
pygame.draw.ellipse(Surface, color, Rect, width=0)
• Surface         椭圆形的绘制屏幕
• Color             椭圆形的绘制颜色
• Rect               椭圆形的绘制区域
• width=0         绘制边缘的宽度,默认为0,即填充图形
椭圆弧形绘制
pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=0)
• Surface          弧形的绘制屏幕
• Color              椭椭圆弧形的绘制颜色圆
• Rect                椭圆弧形的绘制区域
• start_angle, stop_angle   绘制起始和结束弧度值
• width=0            绘制边缘的宽度,默认为0,即填充图形

直线绘制
pygame.draw.line(Surface, color, start_pos, end_pos, width=1)
• Surface         直线的绘制屏幕
• Color             直线的绘制颜色
• start_pos, end_pos         直线的起始和结束坐标
• width=1            直线的宽度,默认值为1
连续多线绘制
pygame.draw.lines(Surface, color, closed, pointlist, width=1)
• Surface   连续多线的绘制屏幕
• Color       连续多线的绘制颜色
• closed     如果为True,起止节点间自动增加封闭直线
• pointlist  连续多线的顶点坐标列表
• width=1   连续多线的宽度,默认值为1

无锯齿线绘制
pygame.draw.aaline(Surface, color, start_pos, end_pos, blend=1)
• Surface           无锯齿线的绘制屏幕
• Color               无锯齿线的绘制颜色
• start_pos, end_pos   无锯齿线的起始和结束坐标
• blend=1           不为0时,与线条所在背景颜色进行混合

连续无锯齿线绘制
pygame.draw.aalines(Surface, color, closed, pointlist, blend=1)
• Surface         连续无锯齿线的绘制屏幕
• Color             连续无锯齿线的绘制颜色
• closed           如果为True,起止节点间自动增加封闭直线
• pointlist         连续无锯齿线的顶点坐标列表
• blend=1          不为0时,与线条所在背景颜色进行混合

3.文字绘制机制

pygame.freetype,向屏幕上绘制特定字体的文字文字不能直接print() ,而是用像素根据字体点阵图绘制,pygame.freetype是绘制文字的增强方法,建议使用必须额外增加import引用,即import pygame.freetype

系统中的字体:Windows系统  C:\Windows\Fonts
                        字体文件的扩展名*.ttf   *.ttc
pygame.freetype.Font():根据字体和字号生成一个Font对象
Font.render_to()、Font.render():用Font对象的render*方法绘制具体文字

Font类:  pygame.freetype.Font(file, size=0)
• file 字体类型名称或路径
• size 字体的大小

Font类的绘制方法:

(1)Font.render_to(surf, dest, text, fgcolor=None, bgcolor=None, rotation=0, size=0) ->Rect

• surf         绘制字体的平面,Surface对象
• dest         在平面中的具体位置,(x,y)
• text          绘制的文字内容
• fgcolor    文字颜色
• bgcolor   背景颜色
• rotation   逆时针的旋转角度,取值0-359,部分字体可旋转
• size         文字大小,赋值该参数将覆盖Font中的设定值

返回一个Rect对象

(2)Font.render(text, fgcolor=None, bgcolor=None, rotation=0, size=0) —> (Surface, Rect)
• text          绘制的文字内容
• fgcolor, bgcolor 字体颜色、背景颜色
• rotation   逆时针的旋转角度,取值0-359,部分字体可旋转
• size          文字大小,赋值该参数将覆盖Font中的设定值
返回一个元组,包含Surface对象和Rect对象

理解Pygame的两个重要类型
pygame.Surface
绘图层,或绘图平面,或图层
• 用于表示图形、文字或图像的绘制效果
• 与当前屏幕主图层可以并列存在
• 如果不绘制在主图层上,则不会被显示
pygame.Rect
矩形区域
• 对应于当前主图层的某个具体区域
• 相当于某个矩形区域的指针或标识信息
• 可以指定图层绘制在某个矩形区域中

主图层
由pygame.display.set_mode()生成的Surface对象

size = width, height = 600, 400
screen = pygame.display.set_mode(size)


在主图层上绘制其他图层使用.blit()方法

screen.blit(ball(即pygame.Surface), ballrect(即pygame.Rect))

7b05a96b7df54838b49eb80eda2f5040.jpeg







 





 

 

 

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值