当前位置: 首页 > news >正文

《Python编程从入门到实践》day25

# 昨日知识点回顾

如何创建多行外星人

碰撞结束游戏

创建game_stats.py跟踪统计信息

# 今日知识点学习

第14章 记分

14.1 添加Play按钮

        14.1.1 创建Button类

import pygame.font# button.py
class Button:def __init__(self, ai_game, msg):"""初始化按钮的属性"""self.screen = ai_game.screenself.screen_rect = self.screen.get_rect()# 设置按钮的尺寸和其他属性self.width, self.height = 200, 50self.button_color = (0, 255, 0)self.text_color = (255, 255, 255)self.font = pygame.font.SysFont(None, 48)# 创建按钮的rect对象,并使其居中self.rect = pygame.Rect(0, 0, self.width, self.height)self.rect.center = self.screen_rect.center# 按钮的标签只需创建一次self._prep_msg(msg)def _prep_msg(self, msg):"""将msg渲染为图像,并使其在按钮上居中"""# 方法font.render()接受一个布尔实参,该实参制定开启还是关闭反锯齿功能(反锯齿让文本的边缘更平滑)# 后面两个实参分别是文本颜色和背景色(如果没有指定背景色,pygame渲染文本时将使用透明背景)self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):# 绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color, self.rect)# screen.blit传递一幅图像以及与该图像相关联的rectself.screen.blit(self.msg_image, self.msg_image_rect)

        14.1.2 在屏幕上绘制按钮        

# 主程序
import sys
from time import sleepimport pygamefrom Settings import Settings
from game_stats import GameStats
from button import Button
from Ship import Ship
from alien import Alien
from bullet import Bulletclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()# 非全屏运行self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))# 全屏运行# self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)# self.settings.screen_width = self.screen.get_rect().width# self.settings.screen_height = self.screen.get_rect().height# 设置当前窗口标题pygame.display.set_caption("Alien Invasion")# 创建一个用于存储游戏统计信息的实例self.stats = GameStats(self)self.ship = Ship(self)# 创建子弹精灵组self.bullets = pygame.sprite.Group()# 创建外星人精灵组self.aliens = pygame.sprite.Group()self._create_fleet()# 创建Play按钮self.play_button = Button(self, "Play")-----snip-----def _update_screen(self):"""更新屏幕上的图像,并切换到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()for bullet in self.bullets.sprites():bullet.draw_bullet()self.aliens.draw(self.screen)# 如果游戏处于非活动状态,就绘制Play按钮if not self.stats.game_active:self.play_button.draw_button()# 让最近绘制的屏幕可见pygame.display.flip()
-----snip-----

        运行结果:(Play按钮出现)

         14.1.3 开始游戏

# 主程序
----snip----def _check_events(self):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)elif event.type == pygame.MOUSEBUTTONDOWN:# 玩家鼠标点击Play按钮做出响应# pygame.mouse.get_pos()返回玩家单击时鼠标(x,y)元组mouse_pos = pygame.mouse.get_pos()self._check_play_button(mouse_pos)def _check_play_button(self, mouse_pos):"""在玩家单击Play按钮时开始新游戏"""if self.play_button.rect.collidepoint(mouse_pos):self.stats.game_active = True
----snip----

        14.1.4 重置游戏

# 主程序def _check_play_button(self, mouse_pos):"""在玩家单击Play按钮时开始新游戏"""if self.play_button.rect.collidepoint(mouse_pos):# 重置游戏统计信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子弹self.aliens.empty()self.bullets.empty()# 创建一群新的外星人并让飞船居中self._create_fleet()self.ship.center_ship()

        14.1.5 将Play按钮切换到非活动状态

# 主程序def _check_play_button(self, mouse_pos):"""在玩家单击Play按钮时开始新游戏"""# game_active为False时游戏才开始并显示Play按钮button_clicked = self.play_button.rect.collidepoint(mouse_pos)if button_clicked and not self.stats.game_active:# 重置游戏统计信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子弹self.aliens.empty()self.bullets.empty()# 创建一群新的外星人并让飞船居中self._create_fleet()self.ship.center_ship()

        14.1.6 隐藏鼠标光标

# 主程序def _check_play_button(self, mouse_pos):"""在玩家单击Play按钮时开始新游戏"""# game_active为False时游戏才开始并显示Play按钮button_clicked = self.play_button.rect.collidepoint(mouse_pos)if button_clicked and not self.stats.game_active:# 重置游戏统计信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子弹self.aliens.empty()self.bullets.empty()# 创建一群新的外星人并让飞船居中self._create_fleet()self.ship.center_ship()# 隐藏鼠标光标pygame.mouse.set_visible(False)def _ship_hit(self):"""响应飞船被外星人撞到"""if self.stats.ships_left > 0:# 将Ship_left减1self.stats.ships_left -= 1# 清空余下的外星人和子弹self.aliens.empty()self.bullets.empty()# 创建一批新的外星人,并将飞船放到屏幕底部的中央self._create_fleet()self.ship.center_ship()# 暂停sleep(0.5)else:self.stats.game_active = False# 游戏结束,重新显示光标pygame.mouse.set_visible(True)

相关文章:

《Python编程从入门到实践》day25

# 昨日知识点回顾 如何创建多行外星人 碰撞结束游戏 创建game_stats.py跟踪统计信息 # 今日知识点学习 第14章 记分 14.1 添加Play按钮 14.1.1 创建Button类 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按钮…...

Unity 性能优化之光照优化(七)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、测试目的一、实时光源是什么?二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…...

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…...

AI办公自动化-用kimi批量重命名Word文档

文件夹里面有很多个word文档&#xff0c;标题里面都含有零代码编程&#xff0c;现在想将其替换为AI办公自动化。 在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&am…...

Golang 并发 Mutex 互斥锁的使用

Golang 并发 Mutex 互斥锁的使用 1. 初始化 func TestMutex(t *testing.T) {mu01 : sync.Mutex{}var mu02 sync.Mutex }两种方式都ok 2. Mutex使用 计数器统计&#xff0c;多个协程同时对同一个变量进行 代码示例 var mu sync.Mutex var counter intfunc TestMutexAdd(t…...

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业 1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c;getShell&am…...

常见的十二种软件架构

常用的软件架构有多种&#xff0c;以下是一些主要的软件架构风格&#xff1a; 单体架构&#xff08;Monolithic Architecture&#xff09;&#xff1a; 描述&#xff1a;所有功能都集中在一个应用或系统中&#xff0c;易于开发和部署&#xff0c;但随着系统增长&#xff0c;可能…...

数据库出现死锁的解决方法参考

死锁引起的原因一般是多个用户并发访问数据库导致的问题&#xff0c;或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…...

HCIP-Datacom-ARST自选题库_01_防火墙【6道题】

一、单选题 1.在防火墙域间安全策略中&#xff0c;请问以下哪一项的数据流不是Outbound方向的? 从Trust区域到DMZ区域的数据流 从Trust区域到Untrust区域的数据流 从Trust区域到Local区域的数据流 从DMZ区域到Untrust区域的数据流 2.如果防火墙域间没有配置安全策路&…...

力扣/leetcode383.比特位记数

题目描述 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 代码思路 第一种方法 最简单的方法就是&#xff0c;遍历然后使用python自带的bin()方法直接…...

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作&#xff1f; useEffect 用于编写由渲染本身引起的对接组件外部的操作&#xff08;官方称呼为&#xff1a;副作用操作&#xff09; 以下情况会触发页面渲染 初次加载页面&#xff08;组的挂载&#xff09;响应式变量发生变化&#xff0c;触发页面根据新值重新…...

Excel 分组汇总后删除明细

有 Excel 数据如下所示&#xff1a; IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列&#xff0c;结果如下&#xff1a; IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…...

docker runc升级1.1.12

上传runc-1.1.12制品至中控机 874e970eaa932a97de9888344ae08f24 runc.arm64 将所有节点的runc文件备份 所有节点(包括master+node) vim host [all] 10.1.0.183 ansible_password=Bigdata@Ksyun123 ansible_user=root ansible_port=22 10.1.0.249 ansible_password=Bigdata…...

C++接口:构建模块化与可扩展的软件架构

目录标题 1. 接口的定义与作用2. 抽象类作为接口3. 接口的设计原则4. 示例&#xff1a;使用接口实现多态5. 拓展&#xff1a;接口和类的区别6. 结论 在C编程中&#xff0c;接口是一种重要的设计模式&#xff0c;它定义了一组方法&#xff0c;这些方法可以被不同的类实现。接口在…...

【讲解下目标追踪】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

实时Linux对EtherCAT工业自动化协议的支持

在自动化技术和工业控制领域&#xff0c;实时通信网络的重要性不断增长。EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作为一种高效的工业以太网通信协议&#xff0c;因其出色的性能和灵活性而广受欢迎。而实时Linux作为影响最为广泛的开源实时…...

ViLT 浅析

ViLT 浅析 论文链接&#xff1a;ViLT 文章目录 ViLT 浅析创新点网络结构总结 创新点 本文先分析了4种不同类型的Vision-and-Language Pretraining(VLP) 其中每个矩形的高表示相对计算量大小&#xff0c;VE、TE和MI分别是visual embedding、text embedding和modality interact…...

7-117 死亡隧道

小毛驴要回家了,凭借着刚从老毛驴处学到的闪烁魔法,小毛驴信心满满地出发了。这一次它来到了另一条死亡隧道口,但是,小毛驴不知道死亡威胁随时存在,因为它所打算穿过的这条死亡隧道即将于T秒时间后坍塌。 已知小毛驴行走的速度是每秒17米,而小毛驴拥有的闪烁法术可以使它…...

java数据结构与算法(链表归并排序)

前言 链表的归并排序和数组的归并排序类似&#xff0c;只是在操作原有操作数组的基础上对链表进行操作。喜欢的可以试试吧。 实现原理 链表归并排序是一种常见的排序算法&#xff0c;它利用了归并排序的思想来对链表进行排序。与数组不同&#xff0c;链表在归并排序中的主要…...

最新网页版USB转串口芯片CH340中文规格书手册(20240511)

前言 南京沁恒的产品已经很成熟了&#xff0c;完全可替代国外USB转串口产品&#xff0c;不必迷信FT232&#xff0c;CP2102之类了。 另外&#xff0c;急着买芯片&#xff0c;直接跑过去的&#xff0c;看过几次妹子了:) CH340手册&#xff0c;基于网页3.3版本&#xff0c;规格书…...

关于 MongoDB 数据库基本操作的详细介绍

MongoDB 是一个基于分布式文件存储的数据库&#xff0c;其设计旨在提供高性能、可扩展性和易用性。以下是关于 MongoDB 数据库基本操作的详细介绍 一、MongoDB 简介 MongoDB 是一个面向文档的数据库&#xff0c;其数据存储在类似 JSON 的 BSON&#xff08;Binary JSON&#x…...

【网络基础】网络层 之 IP协议与分片、网段划分、IP地址分类、子网掩码与路由

文章目录 网络层1. IP协议段格式1.1 分片1.2 *为什么存在分片 / 分片是什么 ?*1.3 *如何理解 / 实现 分片与组装*1.4 深入具体&#xff1a;分片 和 组装 的过程1.5 为什么不推荐 分片 2. 网段划分2.1 举例&#xff1a;国际间通信 && 国家内通信2.2 理解网段划分 3. IP…...

C语言实现猜数字小游戏

1.随机数生成 要想实现猜数字小游戏&#xff0c;依赖于随机数的生成 1.1 rand()函数 这个函数是用来生成随机数的&#xff0c;返回值是正整数&#xff0c;他的值的范围是0到rand_max之间的&#xff0c;rand_max的值在大多数编译器上面是32767&#xff0c;rand()函数的使用必…...

iOS Failed to create provisioning profile.

错误描述 错误情况参考这张图 解决方案 修改Bundle Identifier就可以解决这个错误&#xff0c;找不到位置可以看图 &#xff08;具体解决的原理与证书有关&#xff0c;个人不是非常熟悉&#xff0c;还望大神告知&#xff09;...

122. Kafka问题与解决实践

文章目录 前言顺序问题1. 为什么要保证消息的顺序&#xff1f;2.如何保证消息顺序&#xff1f;3.出现意外4.解决过程 消息积压1. 消息体过大2. 路由规则不合理3. 批量操作引起的连锁反应4. 表过大 主键冲突数据库主从延迟重复消费多环境消费问题后记 前言 假如有家公司是做餐饮…...

Pytorch常用的函数(九)torch.gather()用法

Pytorch常用的函数(九)torch.gather()用法 torch.gather() 就是在指定维度上收集value。 torch.gather() 的必填也是最常用的参数有三个&#xff0c;下面引用官方解释&#xff1a; input (Tensor) – the source tensordim (int) – the axis along which to indexindex (Lo…...

用爬虫解决问题

使用Java进行网络爬虫开发是一种常见的做法&#xff0c;它可以帮助你从网站上自动抓取信息。Java语言因为其丰富的库支持&#xff08;如Jsoup、HtmlUnit、Selenium等&#xff09;和良好的跨平台性&#xff0c;成为实现爬虫的优选语言之一。下面我将简要介绍如何使用Java编写一个…...

机器学习-有监督学习

有监督学习是机器学习的一种主要范式&#xff0c;其基本思想是从有标签的训练数据中学习输入和输出之间的关系&#xff0c;然后利用学习到的模型对新的输入进行预测或分类。 有监督学习的过程如下&#xff1a; 1. 准备数据&#xff1a;首先&#xff0c;需要准备一组有标签的训练…...

【详细介绍下Visual Studio】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

【Golang】实现 Excel 文件下载功能

在当今的网络应用开发中&#xff0c;提供数据导出功能是一项常见的需求。Excel 作为一种广泛使用的电子表格格式&#xff0c;通常是数据导出的首选格式之一。在本教程中&#xff0c;我们将学习如何使用 Go 语言和 Gin Web 框架来创建一个 Excel 文件&#xff0c;并允许用户通过…...