一、pygame简介
pygame是一种流行的Python游戏开发库,具有良好的跨平台支持,可以在多个操作系统上运行,例如Windows,MacOS和Linux,免费、开源和跨平台。
pygame是一组专为编写视频游戏而设计的 Python 模块,使开发人员可以轻松创建2D游戏。 它在优秀的 Simple DirectMedia Library 的库之上添加了功能,可以创建功能齐全的游戏和多媒体程序。

二、pygame模块与能力详解
2.1 基本编程框架
初始化pygame-- 定义显示窗口--定义循环(刷新游戏界面)--关闭游戏
import pygameimport sys#初始化内部各功能模块进行初始化pygame.init()#定义显示窗口size = width,height =800,600screen = pygame.display.set_mode(size)#设置显示窗口的标题内容等pygame.display.set_caption("小游戏程序")#定义循环,用于抓取事件、刷新游戏界面whileTrue:#获取事件(鼠标、键盘、操作系统)foreventinpygame.event.get():ifevent.type == pygame.QUIT: sys.exit()#对游戏界面执行更新,窗口全部重绘pygame.display.update()
2.2pygame基本模块详解
2.2.1 pygame.display: 控制显示窗口和屏幕
- pygame.display.set_mode
size:表示 Surface 对象的矩形区域大小,是一个以像素为单位的宽度和高度的元组。 如果未设置 size,则表面将具有当前分辨率的尺寸。
flags:控制由以下预定义常量表示的显示类型。

Depth:指定像素的颜色深度,默认为自适应模式。
Display:索引 0 表示使用默认显示,否则可能会被环境变量覆盖。
vsync:设置为 1,则有可能获得具同步功能的显示器,但不保证一定能获得。 当pygame.OPENGL 或 pygame.SCALED模式下有效。
pygame默认是采用的笛卡尔坐标系。左上角的顶点是(0,0),向下向左正值增加。

- pygame.display 模块其他方法

2.2.2 Surface模块用来新建图像的
- 语法:Surface=pygame.Surface(size=(width,height),flags,depth)
size:表示 Surface 对象的矩形区域大小。
flags:有两个可选参数值 HWSURFACE 和 SPCALPHA,前者代表将创建的 Surface 对象存放于显存中,后者表示让图像的每一个像素都包含一个 alpha 通道。
depth:指定像素的颜色深度,默认为自适应模式。
- 方法列表

事件是构建整个游戏程序的核心,鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等都可以看做是事件。
Event用事件队列来处理事件,遵循“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作。
常用的方法:

- 绘制矩形:pygame.draw.rect
surface:指主游戏窗口,无特殊情况,一般都会绘制在主屏幕上。
color:该参数用于该图形着色。
通过以下三种方式来传递 color 参数值:
- 使用 pygame.color 对象
Color - RBG值,a:透明度,255表示不透明
Color(color_value) - Color
- RGB 三元组
附:基本颜色:

rect:绘制图形的位置和尺寸大小。
width:可选参数,指定边框的宽度,默认为 0,表示填充该矩形区域。
- 绘制图形形状方法列表

2.2.5 Locals 模块:各种常量的定义
pygame中的常量是在各自的模块中定义的,但从 locals 模块中使用它们会变得更容易。常量定义主要用于以下几个方面:
- 事件像键盘鼠标等的名称、值等。
- Pygame中定义的颜色、特效等值。
- Pygame中所支持的字体的名称和样式。
- 屏幕的尺寸和特效。
例如,键、鼠标事件为KEYDOWN、MOUSEBUTTONDOWN
2.2.6 其他模块功能
pygame._sdl2.touch:使用触摸输入
pygame.camera:使用相机
pygame.cdrom:音频cdrom控制
pygame.cursors:游标资源
pygame.fastevent:与来自多个线程的事件和队列交互。
pygame.font:加载和渲染字体
pygame.freetype:加载和渲染计算机字体
pygame.gfxdraw:绘制形状
pygame.image:图像传输
pygame.joystick:与操纵杆、游戏手柄和轨迹球交互。
pygame.key:使用键盘
pygame.mask:图像遮罩。
pygame.math向量类
pygame.midi:与 MIDI 输入和输出交互。
pygame.mixer:加载和播放声音
pygame.mixer.music:控制流式音频
pygame.mouse:使用鼠标
pygame.pixelcopy :一般像素阵列复制
pygame.scrap:剪贴板支持。
pygame.sndarray:访问声音样本数据
pygame.sprite:基本游戏对象类
pygame.surfarray:使用数组接口访问表面像素数据
pygame.tests:单元测试套件包
pygame.time:监听时间,控制游戏的帧率、动画速度等
pygame.transform:转换表面

三、游戏编程示例 - 简易五子棋
3.1 游戏设计
3.1规则
- 五子棋棋盘由18条横线18条竖线组成
- 棋子要下在线的交叉点上,方格中不能放入棋子
- 双方分别使用黑白两色的棋子
- 横、竖、上斜、下斜先形成五子连珠方获胜
3.2 编程设计
- 程序主流程

- 设计关键环节
1)线的编号就是坐标取值(0~17),共计18条线,间隔位置参考下图
2)五子连线赢棋四种策略,参考绿色底色编号示意(实际位置在交叉点上)
3)落子点就是用坐标值表示(x,y)
4)获取鼠标位置,据所在范围,标识落子点,避免点错
5)棋子分黑白,画图获取的位置和大小,就以交叉点坐标为圆心,18px为半径画出(2px作为棋子间隔)

3.3 代码实现
- 源码
- 验证结果
PS D:\Shangouxuehui_Git & D:/Python312/python.exe d:/Shangouxuehui_Git/PythonBasicCases/pygame_wuziqi.py

山狗学会 License Start
主页链接:山狗学会主页
山狗学会 License End