Python学习笔记49:游戏篇之外星人入侵(十)

devtools/2024/9/23 1:13:28/

前言

之前的文章,已经把基础的游戏功能完成了,就像我们之前项目先写好了基础代码一样,游戏基础的逻辑代码已经编写完毕,后面我们会一步步的填充这个游戏的功能。

我的文章内容和功能实现顺序和原文教学并不是一模一样,是我自己学了这部分以后,重新再写一遍的时候写的思路一些。由于工作的原因有点断断续续不连贯,不习惯的可以直接按书中的内容进行学习即可。

刷新外星人

在游戏中,有两种情况我们需要在窗口中刷新外星人:

  • 外星人全部被消灭
  • 飞船坠毁

第一种是因为外星人被消灭完了,必须生在新的外星人继续游戏。

第二种就是因为飞船坠毁了我们需要清屏,飞船会刷新在窗口底部中央的位置,外星人就从窗口顶部开始重新向下移动。在我们的设定中,外星人撞击到飞船就会使得飞船坠毁。

接下来,针对这两种情况,进行代码编写。

消灭全部外星人

之前的文章中,我们在子弹的移动函数中进行子弹与外星人的碰撞处理,因此我们继续在这个函数中继续往下编写代码。

首先,之前我们已经编写过生成外星人组的函数,我们直接调用它。

python">def update_bullets(bullets, aliens, setting, screen):"""更新子弹"""bullets.update()# 删除已经消失的子弹for bullet in bullets.copy():# 当子弹矩形底部坐标小于0,说明子弹已经出了上边界if bullet.rect.bottom <= 0:bullets.remove(bullet)pygame.sprite.groupcollide(bullets, aliens, True, True)if len(aliens) == 0:create_fleet(setting, screen, aliens)

由于之前没有settingscreen两个参数,所以我们需要在main模块中调用update_bullets函数的位置增加这两个参数。

python">import pygame
from pygame.sprite import Groupimport alien_invasion.game_functions as gf
from alien_invasion.setting import Setting
from alien_invasion.ship import Shipdef run_game():"""启动游戏"""# 初始化pygamepygame.init()# 定义一个系统设置对象setting = Setting()# 新建窗口screen = pygame.display.set_mode((setting.screen_width, setting.screen_height))# 窗口命名pygame.display.set_caption(setting.caption)# 定义一个飞船对象ship = Ship(setting, screen)# 创建子弹编组bullets = Group()# 创建外星人编组aliens = Group()# 创建编组内的外星人gf.create_fleet(setting, screen, aliens)while True:# 处理监听事件gf.check_event(ship, setting, screen, bullets)# 移动飞船ship.move()# 更新子弹位置gf.update_bullets(bullets, aliens, setting, screen)# 更新外星人gf.update_aliens(aliens, setting, ship)# 刷新屏幕gf.update_screen(setting, screen, ship, bullets, aliens)if __name__ == '__main__':run_game()

代码编写完后,启动main模块,击毁窗口中所有的外星人,看看效果,不出所料在外星人被击毁完毕后重新生成了一批新的外星人。

当然,我们的子弹还是存在的没有清空掉,这个子弹要不要清空,大家自行决定。

撞击飞船

与前一种刷新方式一下,我们回到外星人移动的函数,在暂停后清空外星人,并重新生成。

python">def update_aliens(aliens, setting, ship):check_fleet_edges(aliens, setting)aliens.update()if pygame.sprite.spritecollideany(ship, aliens):ship.center_ship()sleep(0.5)aliens.empty()create_fleet(setting, ship.screen, aliens)

这里我们将暂停时间修改为0.5秒。由于创建外星人的函数参数在本函数中都存在,所以我们不需要对main模块进行修改,直接启动就行。

启动后,我们主动移动飞船撞击外星人,在短暂暂停后,飞船回到底部中央,外星人也重新在顶部刷新。

结尾

外星人的刷新功能比较简单就完成了,后面我们加上一个游戏状态的功能以及按钮光标等(原书的内容)。

加油!!!


http://www.ppmy.cn/devtools/88076.html

相关文章

生成式人工智能(AIGC):开发者的得力助手还是职业威胁?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在当今软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;技术正在以前所未有的方式改变着开发者的工作…

Hadoop-YARN

简介 YARN是Hadoop的资源管理和作业调度系统&#xff0c;它将集群资源管理和作业调度/监控功能从Hadoop MapReduce的实现中分离出来&#xff0c;使得Hadoop可以支持除了MapReduce之外的其他数据处理模型。用户可以将各种服务框架部署在 YARN 上&#xff0c;由 YARN 进行统一地…

网络安全之不同阶段攻防手段(四)

前面已经说过信息收集、扫描探测以及初始访问阶段的攻防手段&#xff0c;下面将说一下在攻击者获取到访问权限的情况下会接着如何进一步在网络中建立控制点、提权、横移以及完成攻击后的遗迹隐藏。 4. 建立立足点阶段 **攻击手段&#xff1a;**攻击者通过恶意软件、远程访问工…

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来&#xff1a;从高中生进化到,博士生&#xff1f; 随着近月GPT-4o的出世&#xff0c;OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中&#xff0c;美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…

包拯断案 | 数据库从库复制延迟引发高可用风险 怎么破@还故障一个真相

提问&#xff1a;作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制出现了延迟&#xff0c;是什么原因导致的&#xff1f; 2、延迟引发了高可用风险&#xff0c;应该如何处理&#xff1f; 心中有章&#xff0c;遇事不慌 作为DBA的你&#xff0c;遇到问题无从下手&#xf…

大模型评测与算法测试的区别和共同点-【2024实践总结】

算法测试和大语言模型评测之间存在着区别和共同点。以下是详细的比较&#xff1a; 共同点 目的&#xff1a;无论是算法测试还是大语言模型评测&#xff0c;其根本目的都是确保和评估技术解决方案的性能、可靠性和有效性。这是为了验证这些技术是否能够满足预期的需求和标准[3…

前端框架 element-plus 发布 2.7.8

更新日志 功能 组件 [级联选择器 (cascader)] 添加持久化属性以提升性能 (#17526 by 0song)[日期选择器 (date-picker)] 类型添加月份参数 (#17342 by Panzer-Jack)[级联选择器 (cascader)] 添加标签效果属性 (#17443 by ntnyq)[加载 (loading)] 补充加载属性 (#17174 by zhixi…

一文讲透TCP/IP协议 | 图解+秒懂+史上最全

目录 &#x1f64b;‍♂️ TCP/IP协议详解 &#x1f64b;‍♂️ TCP/IP协议的分层模型 OSI模型的七层框架 TCP/IP协议与七层ISO模型的对应关系 &#xff08;一&#xff09;TCP/IP协议的应用层 &#xff08;二&#xff09;TCP/IP协议的传输层 &#xff08;三&#xff09;…