前言
自学Python记录,不喜欢请勿评论!
本程序的代码是根据B站黑马程序员的视频代码改编的,我总结一下自己的想法,写下博文纯粹是为了记录自己的学习过程!
当我第一次想到使用Python的pygame模块来开发一款飞机对战游戏时,我立刻就兴奋起来。 毕竟,学以致用才是最好的学习方式,更不用说制作游戏了。 但当我真正开始使用它时,我发现我没有想象力。 太简单。 当然,万事开头难。 当你积累了一些经验后,前面的路就会变得容易得多。
文章目录
pygame模块安装
开发这个游戏的第一步是安装 pygame 模块。 我完全按照老师的要求在终端中使用命令行安装了pygame,并且还可以运行其外部小游戏,但是当我打开文件导入pygame模块Hou时,无论我做什么,它总是是“没有名为 pygame 的模块”。 我安装又卸载,卸载又摆弄,但总是弄不准,心态崩溃了。 所以我放弃了,但我又不愿意这么做。 查阅了很多资料,功夫不负有心人,终于在后来的博客中无意中发现了解决方案。 当然,其他掠夺者有更好的解决方案,怪我之前没有搜索到。 顺便想吐槽一下CSDN的搜索功能。 我经常寻找错误的答案。 我可以在微软什么的搜索CSDN博客内容。 找不到吗? 具体安装方法可以看这个:
开始使用 pygame
完成pygame模块的安装后,我们就要开始我们的游戏开发了! 在此之前,我们先来了解一下Python中的pygame模块。 pygame是Python中的2D游戏开发库,支持声音和图像的编辑。 当然,随着如今3D游戏的流行,pygame正在逐渐没落,但这并不妨碍我们从小就学习一些东西。 pygame程序的总体结构如下。 init()函数启动功夫游戏源码,quit()函数退出,中间是具体的游戏代码。
<code class="prism language-python">import pygame pygame.init() # 编写游戏的代码 print("游戏的代码...") pygame.quit()
使用 Rect 来描述圆形区域
在Python游戏中,坐标系用于描述游戏中每个组件的位置。 原点位于左上角,x 轴水平向右,y 轴水平向上。 描述一个圆形区域,还需要长度和高度,因为坐标只能表示其左上角的位置。 将长度和高度相加即可确定位置。
import pygame
hero_rect = pygame.Rect(100, 500, 120, 125)
print("英雄的原点%d %d" % (hero_rect.x, hero_rect.y))
print("英雄的尺寸%d %d" % (hero_rect.width, hero_rect.height))
print("%d %d" % hero_rect.size)
创建游戏窗口
pygame 中专门提供了一个模块 pygame.display 用于创建和管理游戏窗口。 有两种方法:
import pygame
pygame.init()
# 创建游戏的窗口
pygame.display.set_mode((480, 700))
while True:
pass
pygame.quit()
游戏窗口的宽度为480,高度为700。单位为像素。 这个设置和我们之前的背景图是一致的。 while循环是主游戏循环,只要没有退出游戏的命令,它就必须继续执行。
绘制图像
游戏窗口创建完成后,就该放东西了,否则你就只能盯着一个漆黑的窗口看! pygame中的load()函数加载图像数据,blit()函数勾画图像轮廓,update()函数更新屏幕显示。 每次绘制图像时都会调用 update 方法。 当然也可以放在最后,只调用一次update。 技能。
import pygame
pygame.init()
# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg, (0, 0))
# 3.update更新屏幕显示
pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (180,500))
pygame.display.update()
while True:
pass
pygame.quit()
完成此操作后,它将如下所示:
游戏循环
游戏循环意味着游戏的开始。 游戏循环的作用是保证游戏不会直接退出、改变图像位置实现动画效果以及衡量与用户的交互内容。 具体包括设置刷新分辨率、检测用户交互、更新图像位置、更新屏幕显示等。
while True:
pass
比赛时钟
pygame中专门提供了一个类pygame.time.Clock,可以非常方便的设置屏幕绘制速率——刷新分辨率。 在游戏初始化期间创建一个时钟对象,并让时钟对象在游戏循环中调用tick()方法。 tick()方法会根据之前调用的时间自动设置游戏循环中的延迟。
......
# 创建时钟对象
clock = pygame.time.Clock()
while True:
# 可以指定循环体内部的代码执行频率
clock.tick(60)
......
聆听暴风雨的声音
事件是游戏开始后用户对游戏所做的事情。 例如:用户点击鼠标、按下鼠标等。
监控就是判断用户的具体操作。 只有捕捉用户的具体操作,才能做出有针对性的响应。
pygame中,通过pygame.event.get(),可以获取当前用户进行的骚扰列表
import pygame
pygame.init()
# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))
# 绘制背景图像
bg = pygame.image.load("./images/background.png")
screen.blit(bg, (0, 0))
# pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
# screen.blit(hero, (180,500))
# 可以在所有绘制工作完成之后统一调用update方法
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150, 300, 102, 126)
# 游戏循环->意味着游戏的正式开始
while True:
# 可以指定循环体内部的代码执行频率
clock.tick(60)
# 监听事件
event_list = pygame.event.get()
if len(event_list) > 0:
print(event_list)
# 判断飞机的位置
if hero_rect.y <= 0:
hero_rect.y = 700
# 2.修改飞机的位置
hero_rect.y -= 1
# 3.调用blit方法绘制图像
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)
# 4.调用update方法更新显示
pygame.display.update()
pygame.quit()
MouseMotion表示键盘连接,KeyDown表示按下按钮,KeyUp表示抬起按钮。
精灵和精灵组
我不是在说数码宝贝! Sprites和Sprite Group是pygame中提供的两个类,用于简化图像加载、位置变化、图像绘制等功能的开发步骤。
pygame.sprite.Sprite - 用于存储图像图像和位置矩形的对象。
pygame.sprite.Group - 包含多个精灵的对象。
elf类中有两个属性image来记录图像数据和rect位置信息,update()方法更新位置信息。
sprite group类的add()方法将sprite添加到组中; sprites() 方法返回所使用的精灵列表; update()方法允许组中的所有精灵调用update方法; draw() 将组中使用的精灵图像绘制到 Surface 上。 正确的位置。
class GameSprite(pygame.sprite.Sprite):
"""飞机大战游戏精灵"""
def __init__(self, image_name, speed=1):
# 调用父类的初始化方法
super().__init__()
# 定义对象的属性
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self):
# 在屏幕的垂直方向上移动
self.rect.y += self.speed
框架建筑
借一张黑马的图吧。 以下是本游戏的总体框架:首先是游戏初始化,设置游戏窗口,创建游戏时钟,创建精灵和精灵组。 然后在游戏循环中设置刷新分辨率,进行风暴窃听、碰撞检查、更新轮廓精灵组、更新屏幕显示等。
存储各种类型精灵的文件:
主要程序:
最终的游戏窗口如下所示。 感觉可以玩一年。
终于
我还在B站找到了小螃蟹制作的客机大战,上面有积分,可以捡装备等等。 比这个好玩多了,但是程序很复杂功夫游戏源码,一般人看不懂。 黑马仔细解释了一下。 更容易理解。 强烈建议大家学Python看看。
黑马代码链接: 链接: 提取码:ww9l
小乌龟的代码链接:
提取码:uicm
如果失效或者链接无效,请私信联系我。