如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。

  Python编写微信打飞机小游戏(一)

  Python编写微信打飞机小游戏(二)

  Python编写微信打飞机小游戏(三)

  Python编写微信打飞机小游戏(四)

  Python编写微信打飞机小游戏(五)

  Python编写微信打飞机小游戏(六)

  Python编写微信打飞机小游戏(七)

  Python编写微信打飞机小游戏(八)

  Python编写微信打飞机小游戏(九)

  Python编写微信打飞机小游戏(十)

  Python编写微信打飞机小游戏(十一)

  Python编写微信打飞机小游戏(十二)

  现在飞机已经能够带着血条突突突飞下来让玩家虐,于是我们给用户一点打飞机的成就感——计分系统以及难度递增机制。

  1、计分系统

  首先,我们在main()函数中添加全局变量(score)并初始化为零用以统计当前用户的打飞机得分:

score = 0  # 统计用户得分

  接下来只需要在敌机销毁时对score进行累加就可以了,我们在这里先给敌机标个价:小型敌机一架值500分,中型敌机一架值2000分,大型敌机一架值6000分,然后在敌机损毁时根据敌机类型选择加多少分,对于小型敌机:

            for each in small_enemies:  # 绘制小型敌机并自动移动if each.active:# 绘制小型敌机
                else:if e1_destroy_index == 0:# 敌机损毁音效if not (delay % 3):# 播放损毁画面if e1_destroy_index == 0:score += 500
                            # reset()

  中型敌机:

            for each in mid_enemies:  # 绘制中型敌机并自动移动if each.active:# 绘制中型敌机# 绘制血槽
                else:if e2_destroy_index == 0:# 播放损毁音效if not (delay % 3):# 绘制损毁画面if e2_destroy_index == 0:score += 2000
                            # reset()

  大型敌机:

            for each in big_enemies:  # 绘制大型敌机并自动移动if each.active:  # 如果飞机正常存在# 绘制大型敌机# 绘制血槽
                    if each.rect.bottom == -50:# 播放大型飞机的音效(循环播放)else:  # 如果飞机已撞毁# 出场音效停止if e3_destroy_index == 0:# 播放飞机撞毁音效if not (delay % 3):  # 每三帧播放一张损毁图片# 大型敌机有六张损毁图片if e3_destroy_index == 0:  # 如果损毁图片播放完毕,则重置飞机属性score += 6000
                            # reset()

  需要指出一点,这里之所以添加“if e3_destroy_index == 0:”是因为整个飞机损毁的过程是由四帧(或六帧)图像的播放来完成的,如果不加这个限制,则在飞机损毁过程中每播放一帧就加一次分,这样小型机和中型机损毁一次就要加4次分,大型机损毁一次就要加6次分,因此需要规定每次飞机损毁时只在播放损毁最后一帧画面之后再进行加分、复位,播放声音等操作。

  2、显示分数

  在游戏过程中,需要将玩家得分实时显示在界面的左上角,这就涉及到Pygame的font模块的应用。首先在main函数初始化过程(while循环之前)调用font模块成员函数创造系统字体对象:

score_font = pygame.font.SysFont("arial", 48)  # 定义分数字体

  这里的score_font对象采用系统字体“arial”,字号为48。之后通过调用字体对象的render()成员函数将当前分数存于字体对象中,并返回字体的surface格式对象,用以接下来的屏幕打印工作:

        score_text = score_font.render("Score : %s" % str(score), True, color_white)screen.blit(score_text, (10, 5))

  这里先将当前分数通过str()函数转换成字符串,然后格式化到“Score:”的字符串中,第二个参数表示当前字体在打印时自动开启抗锯齿功能,第三个参数为字体颜色。建议将这两句代码放在while循坏体内比较靠前的位置,以便使代码更为整洁。运行程序,分数能够正确的、实时的显示在屏幕上,接下来我们来给游戏增加难度——难度分级递增机制。

  3、设计难度分级标准

  我们的目的是随着用户得分的提高,游戏对应难度也逐渐加大,首先需要在main()函数添加一个全局标志位level用以指示当前游戏处于那种难度:

level = 1  # 游戏难度级别

  接下来简单的制定以下难度门槛:分数处于(0,5000)为第一级难度,处于(5000,30000)为第二级难度,处于(30000,60000)为第三级难度:

        # ====================定义难度递进操作====================if level == 1 and score > 5000:  # 如果达到第二难度等级,则增加3架小型敌机,2架中型敌机,1架大型敌机,并提升小型敌机速度level = 2passelif level == 2 and score > 30000:  # 如果达到第三难度等级level = 3passelif level == 3 and score > 60000:  # 如果达到第四难度等级level = 4pass

  接下来开始根据对应难度等级来给游戏加难度,如何才算增加难度,无非是增加敌机数量,增加敌机速度,因此我们定义两个函数来完成这个功能,首先定义增加飞机数量的函数,刚好我们之前已经定义好了这个函数:

# ====================敌方飞机生成控制函数====================
def add_small_enemies(group1, group2, num):

def add_mid_enemies(group1, group2, num):

def add_big_enemies(group1, group2, num):

  关于这些函数的具体作用参见之前博文,接下来定义速度增加函数,原理就是增加敌机对象内部speed成员变量的值即可:

# ====================提升敌机速度====================
def inc_speed(target, inc):for each in target:each.speed += inc

  target为待加速的敌机精灵组,inc为加速的程度(大致可以成为加速度吧)。

  4、完善难度分级递增机制

  定义完“add_small_enemies”、“inc_speed”等操作函数后,我们给出完整的难度分级递增机制部分代码(建议放在while循环的开始部分):

        # ====================定义难度递进操作====================if level == 1 and score > 5000:  # 如果达到第二难度等级,则增加3架小型敌机,2架中型敌机,1架大型敌机,并提升小型敌机速度level = 2level_up_sound.play()add_small_enemies(small_enemies, enemies, 3)add_mid_enemies(mid_enemies, enemies, 2)add_big_enemies(big_enemies, enemies, 1)inc_speed(small_enemies, 1)elif level == 2 and score > 30000:  # 如果达到第三难度等级level = 3level_up_sound.play()add_small_enemies(small_enemies, enemies, 3)add_mid_enemies(mid_enemies, enemies, 2)add_big_enemies(big_enemies, enemies, 1)inc_speed(small_enemies, 1)inc_speed(mid_enemies, 1)elif level == 3 and score > 60000:  # 如果达到第四难度等级level = 4level_up_sound.play()add_small_enemies(small_enemies, enemies, 3)add_mid_enemies(mid_enemies, enemies, 2)add_big_enemies(big_enemies, enemies, 1)inc_speed(small_enemies, 1)inc_speed(mid_enemies, 1)inc_speed(big_enemies, 1)

  这段代码的分级机制很简单,每增加一级难度,就在之前的基础上添加三架小型敌机,两架中型敌机和一架大型敌机,同时将各个机型的速度均加一,在难度提升的瞬间还有特殊音效播放。ok程序到这里应该可以正确运行,试玩一下发现,当分数超过30000分时敌机已经铺天盖地的飞了下来,为了玩家的生存,我们将在下一篇博文中为我方飞机添加超级武器:超级子弹和全屏炸弹。

 

Python编写微信打飞机小游戏(八)相关推荐

  1. Python编写微信打飞机小游戏(三)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  2. Python编写微信打飞机小游戏(十一)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  3. Python编写微信打飞机小游戏(七)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  4. Python编写微信打飞机小游戏(十)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  5. Python编写微信打飞机小游戏(五)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  6. Python编写微信打飞机小游戏(十二)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  7. Python编写微信打飞机小游戏(九)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  8. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  9. 微信打飞机小游戏的尝试

    微信打飞机小游戏的尝试 问题:微信打飞机游戏出现不断跳出的问题 原因:未加return. ​

最新文章

  1. 一旦上了CRM系统 就期待短期见效?
  2. C 语言编程 — 程序的编译流程
  3. Python正则表达式之零宽断言(4)
  4. iShow UI for React 最佳实践
  5. 疑似高能粒子射线导致服务程序异常
  6. Spark 配置Kryo序列化机制注意细节
  7. 压缩命令tar cf xx.tar -C的正确用法
  8. 新功能:php-laravel记录来访人员的IP以及所在区域
  9. opencv 高通滤波和低通滤波_滤波电路合集(低通滤波,CLCП滤波,DLC滤波,CRC П滤波)...
  10. 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
  11. 网创第一件事是要找一起奋斗的人
  12. android toast
  13. Latex 常用代码
  14. Windows 7 通过无线网卡,模拟Wifi,实现手机,电脑等无线设备共享上网
  15. java绩效考核方案,基于jsp的职工绩效考核系统-JavaEE实现职工绩效考核系统 - java项目源码...
  16. 共享计算机桌面,DeskTopShare桌面屏幕共享软件
  17. HTML零基础入门教程(详细)
  18. EXCEL单元格式(亿元,万元)
  19. 版本控制器之-git的简单用法
  20. 如何在亿级数据中判断一个元素是否存在?

热门文章

  1. python生成字典暴力破解
  2. Idea自带Maven引入依赖抛错Could not transfer artifact 的几个处理思路
  3. iview组件引入vue项目
  4. openfalcon 基本监控配置
  5. 遗传算法的C语言实现
  6. 博客园android,博客园android客户端
  7. 比一比Nmap、Zmap、Masscan三种扫描工具区别
  8. Axure的安装和组件库导入
  9. [ASP.NET]下载txt格式的文件
  10. Thinkphp开发视频打赏平台源码