其实Python学习笔记:使用pygame模块编写飞机对战游戏(一)的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享Python学习笔记:使用pygame模块编写飞机对战游戏(一)的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
在全局环境中安装pygame
在Windows系统中,按Win+R键,输入cmd进入命令行模式,输入命令行:
pip 安装pygame
如果您使用的python版本在3.11之前,可以按照上面的方法完成安装。不过,我使用的是最新版本的Python 3.11。上面的默认安装会失败。我需要强制指定版本号来安装。命令行如下:
pip install pygame==2.1.3.dev8
在pycharm虚拟环境中安装
在pycharm中,点击File--settings.--你的项目名称--Python Interpreter。项目虚拟环境中安装的所有软件包都将显示在右侧窗口中。点击页面上的“+”。在弹出窗口左上角的搜索框中输入pygame。默认安装版本是2.1.2。选择右下角的指定版本选项。默认值为2.1.3.dev8。最后点击安装即可安装成功。
在pycharm中安装pygame接口
1.pygame常用方法
1. 初始化方法
用于初始化pygame 的所有元素。使用pygame创建游戏窗口时,必须首先调用init方法。
格式:pygame.init()
2.戒烟
用于退出pygame 图形模式。一般与init配合使用。 quit 方法必须在程序结束之前调用。
格式:pygame.quit()
3. 矩形类
用于创建矩形区域对象。对象具有位置坐标、宽度和高度等属性,并且可以轻松控制其内部图像的显示位置和大小等因素。
格式:pygame.Rect(左,上,宽,高)
pygame.Rect((左,上),(宽,高))
本着由浅入深的原则,为了便于理解和吸收,这里只介绍这些必须用到的方法。
2.pygame模块介绍
pygame模块概述:
模块
功能
光驱
管理cdrom 设备和音频播放
光标
加载光标形状
展示
管理显示窗口
画
绘制图形(点、线、形状)
事件
管理鼠标、键盘等产生的事件。
字体
加载字体
图像
加载和保存图像
操纵杆
管理游戏手柄设备
钥匙
管理键盘行为
老鼠
管理鼠标行为
电影
mpeg 电影播放
sndarray
数字处理的声音
冲浪阵列
数字处理的声音
时间
控制时间
转换
变换图像(缩放、旋转和翻转)
这里介绍几个常用模块的用法,如下:
1.显示模块
该模块的功能是对显示窗口进行管理。用于创建窗口、设置窗口标题、更新窗口显示内容和图像绘制等,是pygame中最重要的模块。
创建窗口
格式: screen=pygame.display.set_mode(size=(width,height),flags=0,深度=0)
size表示创建的窗口的大小(宽和高),元组类型; flags 是标志位,深度是颜色位深度。目前尚未使用,暂不介绍。
创建的窗口有一个重要的方法,就是image blit方法。简单格式如下:
格式:screen.blit(图片对象,(左,上))
设置窗口标题
格式:pygame.display.set_caption(标题)
更新窗口
格式:pygame.display.update()—— 主要用于非双缓冲,可以更新局部区域。
pygame.display.flip()——主要用于双缓冲,不双缓冲也能正常工作。
注意:完成创建窗口、设置相关属性、绘制图像等所有操作后,必须调用更新窗口方法,否则预定操作的内容将不会显示在窗口上。 update方法通常用于更新窗口内容。为了减少内存占用和节省代码,通常在写完所有窗口和图像操作代码后,在最后写一条更新窗口语句。
2.图像模块
图像模块用于加载和保存图像。主要是将需要用到的图片加载到内存中以备后用。
格式:图像对象=pygame.image.load(图像地址)
3.时间模块
时间模块中一个重要的类是Clock类,它用于创建时钟对象。时钟对象用于调整窗口屏幕显示的帧率,即刷新率。
格式:clock=pygame.time.Clock()
通常游戏的帧率可以设置为60,也就是说每秒刷新60次,让游戏看起来更流畅。
格式:时钟.tick(60)
4.事件模块
事件模块用于监听鼠标、键盘操作,是游戏中人机交互的重要手段。
格式:pygame.event.get()
上面的语句用于获取所有监听到的事件。结果是一个列表。通过遍历事件列表即可完成相关操作。
3. 飞机战棋实践写作
上面已经简单介绍了pygame的基本情况。现在我们开始使用pygame的模块和方法来构建游戏框架,逐步添加内容和功能,看看最终能达到什么效果。
1. 创建窗口和主要元素
import pygame# 初始化pygame图形模式pygame.init()# 使用显示模块创建一个窗口大小为470*758的游戏窗口screen=pygame.display.set_mode((470, 758))# 设置窗口标题pygame. display.set_caption(' 飞机战争V1.0')# 使用image 模块的load 方法将背景图片加载到内层bg=pygame.image.load(r'images\background.jpg')# 加载飞机图像进入内层plane=pygame. image.load(r'images\plane.png')# 在游戏窗口坐标(0,0)处开始绘制背景图片,也就是左上角screen.blit(bg, (0, 0))# 在游戏窗口坐标在(177,600)处绘制飞机图片screen.blit(plane, (177, 600))# 使用display模块的update方法更新图形窗口pygame.display.update()# 设置无限循环,否则将执行程序序列并且窗口屏幕将闪烁,同时True: pass# 退出pygame 图形模式pygame.quit()
以上代码都是介绍的pygame的基本方法和模块。为了方便查看,这里暂时使用了无限循环语句,防止程序瞬间执行完毕。
另外,需要提前准备好所需的图片素材,比如背景图片、己方飞机图片、敌机图片等,除了背景图片外,其他图片基本都要求是png格式的背景透明图片格式,需要自己制定。素材图片放置在项目目录下的images文件夹中。
该代码构建了飞机战争游戏界面的原型。如果不添加绘制背景图片和飞机图片的代码,将会创建一个470*758的黑屏窗口。这也是使用pygame模块创建图形界面的基本流程。我们看一下运行效果:
2.让飞机移动
为了更方便地控制飞机图像的显示位置,使用pygame的Rect类创建一个矩形区域对象,让飞机图像绘制在这个矩形区域中,然后不断改变矩形区域对象的坐标为使飞机图像移动。动画效果。同时,为了让这个动画效果看起来更流畅,我们使用pygame.time模块中的Clock类来创建一个时钟来控制动画帧率。代码如下:
import pygame# 初始化pygame图形模式pygame.init()# 注意这里创建了一个时钟对象# 创建一个时钟对象来控制游戏屏幕刷新率,即帧率Clock=pygame.time.Clock()# 使用显示模块创建一个游戏窗口,窗口大小为470*758 screen=pygame.display.set_mode((470, 758))# 设置窗口标题pygame.display.set_caption('飞机大战V1.0')# 使用image模块的load方法,将背景图片加载到内层bg=pygame.image.load(r'images\background.jpg')# 将飞机图片加载到内层plan=pygame.image.load(r 'images\plane.png')# 游戏中窗口坐标为(0,0),即背景图从左上角开始绘制screen.blit(bg, (0, 0))# 一个矩形这里创建了area对象# 创建了一个矩形area对象,用来显示自己飞机的图片plane_rect=pygame .Rect(177, 600, 112, 111)# 设置移动步长step=2while True: # 这里设置时钟频率,即动画帧率# 将时钟帧率设置为60,即执行clock.tick(每秒60次60) # 重新绘制背景图像以覆盖游戏屏幕,移动图像后清除原始图像screen.blit(bg, (0, 0)) # 让矩形区域的横坐标减去步长,循环改变位置plane_rect.x -=step # 如果平面移动到最左或最右,则反转步长size 来改变飞机运动的方向ifplane_rect.x=0 orplane_rect.x=(470-112): step=- step # 将飞机图片绘制成一个矩形区域screen.blit(plane,plane_rect) # 毕竟图片元素已更改,更新显示窗口pygame.display.update() # 退出pygame 图形模式pygame.quit()
重点:这段代码的重点是在循环开始后重绘背景图片。目的是覆盖飞机图像,然后飞机会在新的位置重新显示。如此循环往复,飞机将开始移动!如果没有重绘背景的步骤,飞机运动的横坐标上就会生成无数的飞机图像。上面的代码有如下效果:
视频加载中.
3.添加关闭窗口功能
上面的代码运行时是死循环,因为没有关闭程序的操作。接下来利用pygame的event模块获取程序运行过程中产生的所有事件,然后遍历事件列表,通过判断鼠标点击关闭按钮事件来关闭窗口。结束程序运行。添加的事件检测部分代码如下:
# 获取所有事件并遍历判断。如果是点击退出按钮的事件,则执行pygame.event.get():中event的退出操作if event.type==pygame.QUIT: print('退出游戏.') # 退出pygame图形mode pygame.quit() # 使用exit直接退出程序,而不是使用break中断循环# 可能因为时钟的原因,使用break中断循环后,会再次进行绘制操作, # 但上面有已经完成退出pygame图形模式,所以会出现错误exit()
上面的代码中,使用pygame.event.get()语句获取事件列表,然后使用for循环进行遍历。如果有pygame.QUIT事件,则退出程序。至此,我们终于摆脱了无限循环。现在它是一个流畅的动画。目前还无法控制飞行器产生相应的动作。需要进一步添加键盘监听事件和相应的代码来完成控制飞行器的功能。
用户评论
刚开始学Python,看了这篇笔记觉得讲解非常清晰!pygame模块确实很适合入门游戏开发,以后我要试试用它写个简单的射击游戏!
有12位网友表示赞同!
文章写的不错,把基本的pygame知识和游戏逻辑都阐述了很清楚。不过感觉这段代码的注释可以更详细一些,对于初学者能提供更多帮助。
有5位网友表示赞同!
终于找到一篇比较详细的python pygame教程啦!现在好多教程都是碎片化的,这篇笔记很有条理,很容易理解。太感谢作者了!
有8位网友表示赞同!
飞机大战这游戏我当年玩まく多了! 现在看到用python写出来还是很酷的,可惜我只懂一点Python, 希望自己也能像作者一样开发游戏。
有18位网友表示赞同!
感觉文章写的比较轻松有趣,很喜欢代码中加的飞机爆炸效果,很有逼真感!但对于基础知识讲解不太深入,建议结合更多的理论知识讲解。
有6位网友表示赞同!
这篇笔记让我对pygame模块有了初步的了解,但是学习起来还是有点难度。希望作者以后能分享更多关于飞机大战游戏的玩法设计和碰撞检测的技巧!
有10位网友表示赞同!
没时间看那么多教程,幸好发现了这篇文章,直接看代码就能明白逻辑。感谢分享! 感觉 pygame 模块的界面绘制部分还是挺绕脑的, 不过看了文章后稍微明了一些。
有11位网友表示赞同!
我试着敲了 代码运行了一下,发现飞机不会自动移动!估计是哪里配置少了什么。这方面还需要查阅更多资料才明白是怎么回事。
有6位网友表示赞同!
Python 学习笔记很棒! 这个飞机大战的例子确实可以帮助理解pygame模块。期待作者后续分享更多的游戏开发案例学习!
有6位网友表示赞同!
用python写游戏太酷了! 赶紧试试文章里的代码,希望自己能做出一个简单但有趣的飞机大战游戏来炫耀一下给朋友们看 。
有10位网友表示赞同!
学习编程真的需要循序渐进,这篇笔记虽然讲解清晰但对于完全没有接触过pygame的读者来说,还是比较难入门。建议结合更多的实际案例和实战练习!
有11位网友表示赞同!
用python写游戏确实很有成就感,希望以后能学习更多高级的游戏开发技术,做出更逼真的游戏。
有7位网友表示赞同!
感觉文章写的有些过于简练了。比如对pygame模块的常用属性和方法讲解比较少,需要配合其他教程深入了解。
有8位网友表示赞同!
作者的代码注释也很详细,把每个功能都解释得很清楚,非常适合新手学习使用pygame模块。
有7位网友表示赞同!
这个飞机大战游戏的逻辑很简单,但是要实现一个完整的运行游戏却很不容易! 文章介绍的很详细,希望能继续分享更多类似的游戏开发案例。
有11位网友表示赞同!
虽然代码示例挺有趣,但是对于我来说讲解不够深入。我还是想了解pygame模块的更深层的使用技巧和应用场景。
有11位网友表示赞同!