星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪

系列文章目录

星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

 星际争霸之小霸王之小蜜蜂(十)--鼠道

星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

 星际争霸之小霸王之小蜜蜂(七)--消失的子弹

星际争霸之小霸王之小蜜蜂(六)--让子弹飞

 星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来


目录

系列文章目录

文章目录

前言

一、p增加游戏难度

二、记分系统

三、显示记分

 四、更新得分

总结



前言

截至到目前,这个游戏已经可以玩了,但是为了让更多的玩家沉迷其中,我们学习企鹅精神,增加消费点,上瘾点,比如加入记分机制、难度升级机制。


一、p增加游戏难度

书上加了很多,比如提速,然后记分,最高分、等级、剩余老鼠的数量等,我觉得我们不需要这么麻烦,我选择几个功能实现就行了,提速、分数、等级、最高分就可以了,其他花里胡哨的我们就不搞了。

 增加游戏难度的原理是每消除一群老鼠后,将老鼠的初始速度增加,刷新出新的老鼠,这样我们需要每次刷新新的老鼠前,将其速度增加,然后游戏失败后,将速度还原成原始速度。

class Settings():def __init__(self):self.screen_width = 800self.screen_height = 600self.bg_color = (255,255,255)self.ship_limit = 2self.bullet_width = 2self.bullet_hight = 5self.bullet_color = 60,60,60self.bullets_allowed = 20self.fleet_drop_speed = 50self.speedup_scale = 1.2self.initialize_dynamic_settings()def initialize_dynamic_settings(self):self.ship_speed_factor = 0.1self.bullet_speed_factor = 0.5self.alien_speed_factor = 2self.fleet_direction = 1

 我们发现增加了一个 self.speedup_scale属性,可以预想到每次增加速度的时候,将原速度乘以它,就可以提示20%的速度,这个数值我们可以在实际使用中再调试,同时我们将需要归位的属性单独放在initialize_dynamic_settings函数中,这样需要初始化时直接调用函数就行,可以看出,initialize_dynamic_settings函数里主要是描述速度的属性,还有一个表示小老鼠移动方向的。

 因此,我们再创建一个函数,当需要升级速度的时候就调用它

def increase_speed(self):self.ship_speed_factor *= self.speedup_scaleself.bullet_speed_factor *= self.speedup_scaleself.alien_speed_factor *= self.speedup_scale

 按照前面的分析,我们需要在重新创建新的老鼠时调用

def check_bullet_alien_collisions(new_setting,screen,bullets,aliens):collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if len(aliens) == 0:bullets.empty()new_setting.increase_speed()create_fleet(new_setting, screen, aliens)

 同时我们在游戏结束后,也就是点击开始后,调用设置为初始属性。

def check_play_button(stats,play_button,mouse_x,mouse_y,new_setting,aliens,bullets,ship,screen):if play_button.rect.collidepoint(mouse_x,mouse_y) and not stats.game_active:pygame.mouse.set_visible(False)stats.reset_stats()stats.game_active = Truealiens.empty()bullets.empty()new_setting.initialize_dynamic_settings()create_fleet(new_setting,screen,aliens)ship.center_ship()

二、记分系统

增加难度功能已经实现了,下面我们就要实现记分功能,书上是按每一个难度打死的小老鼠分数不同来记分,其实没有这个必要,就按照消灭老鼠的数量记分非常科学,闯的关越多分越高。

 这个的思路也很简单,和创建开始按钮差不多,我们首先设置一个属性,每消灭一个小老鼠,该属性值加1,当重新开始游戏时,该属性归0。然后按照开始按钮的显示设置,将数字转换为图像显示在屏幕右上。等级的原理和分数是一样的,就不再编写了,最高分无非是再创建一个变量,游戏结束后加一个判断,将最大的分数赋值就行了。

 按照上面的思路,我们先建立分数的变量

class GameStats():def __init__(self,new_setting):self.new_setting = new_settingself.reset_stats()self.game_active = Falsedef reset_stats(self):self.ships_left = self.new_setting.ship_limitself.score = 0

 然后我们参照button类,建立score类。

import pygame.fontclass Scoreboard():def __init__(self,new_setting,screen,stats):self.screen = screenself.screen_rect = screen.get_rect()self.new_setting  = new_settingself.stats = statsself.text_color = (30,30,30)self.font = pygame.font.SysFont(None,48)self.prep_score()def prep_score(self):score_str = str(self.stats.score)self.score_image =  self.font.render(score_str,True,self.text_color,self.new_setting.bg_color)self.score_rect = self.score_image.get_rect()self.score_rect.right = self.screen_rect.right-20self.score_rect.top = 20def show_score(self):self.screen.blit(self.score_image,self.score_rect)

 上述代码就不一一解释了,和之前创建的button类类似

三、显示记分

记分的类写好后,和button一样,首先我们要创建一个分数的实例。我们在主函数创建实例

 sb = Scoreboard(new_setting,screen,stats)

然后我们将实例作为参数传递,在刷新屏幕是调用sb的show_score函数

def update_screen(new_setting,screen,stats,ship,bullets,aliens,play_button,sb):screen.fill(new_setting.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)sb.show_score()if not stats.game_active:play_button.draw_button()
pygame.display.flip()

 至此,我们已经可以显示分数了

 

 四、更新得分

 我们现在能显示得分了,但是得分一直为0,我们没有更新它,每当消失一只老鼠的时候,我们就将得分加1

def update_bullets(new_setting,screen,bullets,aliens,stats,sb):check_bullet_alien_collisions(new_setting,screen,bullets,aliens,stats,sb)bullets.update()for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)def check_bullet_alien_collisions(new_setting,screen,bullets,aliens,stats,sb):collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if collisions:for aliens in collisions.values():stats.score += len(aliens)sb.prep_score()if len(aliens) == 0:bullets.empty()new_setting.increase_speed()create_fleet(new_setting, screen, aliens)

 我们每次遍历碰撞了多少老鼠,有几只就加几分,len(aliens)就是老鼠的数量,这样得分就是打死老鼠的数量,简单明了。

 

 我们发现一个问题,游戏重新开始时不重新计算分数,我们需要在点击开始按钮后,重置分数。这里代码我就不粘贴了。


总结

截至现在,这个游戏算是完成了第一版,书上一些乱七八糟的功能我们就不实现了,代码其实都差不多,明天我会做个总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139398.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023华为杯数学建模D题第三问——区域双碳目标情景设计样例

在第二问建立好预测模型的基础上&#xff0c;如何设计第三问所说的区域双碳路径&#xff0c;以对宏观政策进行指导&#xff01; 采用STIRPA的基本模型对中国碳达峰时间进行预测&#xff0c;对该模型公式两边取对数得到&#xff1a; 其中&#xff1a;P为人口&#xff0c;A为GDP…

01_docker镜像管理:80分钟一口气学完docker+k8s!带你掌握docker+k8s所有核心知识点,全程干货,无废话!

docker镜像的实际使用学习 开发过程中&#xff0c;需要安装很多三方工具&#xff0c;比如etcd、kafka、mysql、nginx等等 1、下载安装Docker工具。 2、获取该软件的Docker镜像&#xff08;基本上&#xff0c;都能搜索到核实的镜像&#xff09;&#xff0c;下载镜像nginx镜像…

研究生选控制嵌入式还是机器视觉好?

研究生选控制嵌入式还是机器视觉好&#xff1f; 我是嵌入式/硬件方向转的算法&#xff0c;现在是公司的算法负责人&#xff0c;如果再让我选一次&#xff0c;我是不会再选嵌入式方 向&#xff0c;嵌入式如果只做技术是没前途的。 你要是有一定自学能力&#xff0c;能自己在学校…

以太坊代币标准ERC20、ERC721

两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善&#xff1b;在ERC中提出了很多标准&#xff0c;用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…

Ant Design分页组件中实现禁止点击当前页按钮的方法

这里需要使用到Ant Design分页组件pagination的一个回调函数onChange onChange函数用来监听鼠标点击事件&#xff0c; 它有两个入参》1. 点击分页按钮时获取到的页码 2. 每页最大显示条数 所以&#xff0c;禁止点击当前分页按钮的核心逻辑是&#xff1a; if {当前页的页…

HBuilder X 未检测到手机或模拟器(安卓端)

解决办法 1、找到HBuilderX安装目录下的D:\HBuilderX\plugins\launcher\tools\adbs。 2、应用程序和应用程序扩展删除掉 3、然后把1.0.31目录下的文件拷贝到D:\HBuilderX\plugins\launcher\tools\adbs里&#xff0c;直接覆盖即可。 4、重启HBuilderX就可以检测到手机了。 注意…

InputAction的使用

感觉Unity中InputAction的使用&#xff0c;步步都是坑。 需求点介绍 当用户长按0.5s 键盘X或者VR left controller primaryButton (即X键)时&#xff0c;显示下一个图片。 步骤总览 创建InputAction资产将该InputAction资产绑定到某个GameObject上在对应的script中&#xf…

Redis延迟双删-架构案例2021(三十二)

数据库设计 某医药销售企业因业务发展&#xff0c;需要建立线上药品销售系统&#xff0c;为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外&#xff0c;还需要提供当前热销产品排名、评价分类管理等功能。 通过对需求的分析&#xf…

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…

基于物联网的农村地区智能微电网系统(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Kafka 源码分析——Consumer

文章目录 前言Consumer 消费流程Consumer初始化如何选举Consumer Leader消费者分区策略Consumer拉取数据提交偏移量 前言 当生产者将消息发送到Broker时&#xff0c;这些消息将被存储在磁盘上。消费者是如何消费这些消息呢&#xff1f; Consumer 消费流程 站在源码的核心角度…

java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类&#xff0c;不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装&#xff0c;直接将ctrl的代码写入到一个文件里然后调用&#xff1a; package adminimport ("net/http""git…

FP树 高效发现频繁项集

1&#xff1a;a,b,c,d,e 2&#xff1a;a,b,c 3&#xff1a;e,f 4&#xff1a;b,c,d,e 现将其建立FP树 计算支持度 a2,b3,c3,d2,e2,f1 剔除支持度1的&#xff0c;再排序 b3,c3,a2,d2,e2 1&#xff1a;b,c,a,d,e 2&#xff1a;b,c,a 3&#xff1a;e 4&#xff1a;b,c…

无人机“长坡”上,谁是滚出“厚雪球”的长期主义者?

“股神”巴菲特&#xff0c;曾提出过“长坡厚雪”的理论&#xff1a; 人生就像滚雪球&#xff0c;重要的是发现很湿的雪和很长的坡。 运用到企业经营上&#xff0c;“长坡”指的是企业所布局的领域发展潜力足、空间大&#xff1b;而“湿雪”&#xff0c;指的是企业竞争力强、…

大模型应用发展的方向|代理 Agent 的兴起及其未来(下)

“ 借助LLM作为代理大脑的优势&#xff0c;探讨了单一代理、多代理系统和人机协作等应用场景&#xff0c;探讨了代理的社会行为、心理活动以及在模拟社会环境中观察新兴社会现象和人类洞见的可能性。” 01 — 造福人类&#xff1a;代理实践 LLM型智能代理是一种新兴的方向&…

Linux——文件系统

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;上期我们了解了文件在内存中得组织方式&#xff0c;那么文件在磁盘中…

【C语言】错题本(4)

一. 题目及选项: 答案解析: 知识点: 字符型在内存中的数据存储 char类型数据在内存中的图示: unsigned char类型数据在内存中的图示: 二. 题目及选项: 答案解析: A: B: C: D: 三. 题目及选项: 答案解析: 数据在计算机中是先转换成补码,再进行运算的!

C语言自定义类型详解(1)结构体知识汇总

本篇概要 本篇主要讲述C语言结构体的相关知识&#xff0c;包括结构体的基本声明&#xff0c;结构体的匿名结构&#xff0c;结构体的自引用&#xff0c;结构体变量的定义和初始化以及结构体的内存对齐等相关知识。 文章目录 本篇概要1.结构体1.1结构体的基本声明1.2结构体的特殊…

精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来

9 月 17 日&#xff0c;由 TinTinLand 主办的「DESTINATION MOON: Web3 Dev Summit Shanghai 2023」线下活动在上海黄浦如约而至。 本次 DESTINATION MOON 活动作为 2023 上海区块链国际周的 Side Event&#xff0c;设立了 4 场主题演讲与 3 个圆桌讨论&#xff0c;聚集了诸多…