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

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

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

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

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

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

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

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

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

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

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

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

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

  在这篇博客里,我们为游戏添加最后一个功能:GameOver画面的绘制。

  在当我方飞机的三条命全部挂掉之后,程序会进入结束程序,我们的设计时当程序结束时显示用户的目前得分以及历史最高分,仅此而已。

  1、加载图片资源

  在这里我们特意重做了一个游戏结束的画面,其实就是在背景图片上加了一些文字而已,首先在main()函数中加载它:

    gameover_image = pygame.image.load("image/game_over.png")  # 游戏结束背景图片gameover_rect = gameover_image.get_rect()

  2、保存并显示历史最高分

  程序要求能够保存用户所得到的历史最高分,这就要求程序在每一次结束前,都需要将用户的得分保存在磁盘上。首先我们在程序目录下新建一个文本文件“score_record.txt”来保存用户的得分,注意在新建完文本文件时我们需要在文件中输入一个数字“0”并保存,代表当前用户得分为零分,否则的话当程序第一次运行读取这个文件的话将会因为文件内容为空而读取失败,当然我们完全可以在程序中添加判断语句来避免这种情况,这里我们就采用一个投机取巧的方法,在创建文本文件时直接先给它一个零值。

  接下来当我方小飞机生命用尽时,程序会进入到“elif life_num == 0:”的循环分支中,之前这里只是用一个“pass”语句一带而过,这里开始扩充这部分代码。首先,绘制结束画面并关闭所有的音效以及定时器:

            screen.blit(gameover_image, gameover_rect)pygame.mixer.music.stop()  # 关闭背景音乐pygame.mixer.stop()  # 关闭所有音效pygame.time.set_timer(supply_timer, 0)  # 关闭补给机制

  接下来的工作就是读入“score_record.txt”文件中保留的用户历史最高分数,并和当前的用户得分进行比较,如果当前用户得分高于历史最高分,则将文本文件中保留的历史最高分替换掉:

                with open("score_record.txt", "r") as f:record_score = int(f.read())if score > record_score:  # 如果玩家得分大于历史最高分,则将当前分数存档with open("score_record.txt", "w") as f:f.write(str(score))

  这里涉及到最简单的Python读取文件的操作,不懂得地方大家可以从网上查阅相关资料,这里就不再赘述。替换完成后,将历史最高分和当前最高分显示在结束画面上,字体仍借用之前的分数字体“score_font”对象即可:

            record_score_text = score_font.render("%d" % record_score, True, color_white)screen.blit(record_score_text, (150, 25))game_over_score_text = score_font.render("%d" % score, True, color_white)screen.blit(game_over_score_text, (180, 370))

  这里两个字体的摆放位置时根据背景图片上的文字而定的,运行程序,一切正常。

  3、最后一个BUG

  其实程序到这里已经完全能够运行了,但这里仍然有一个不太完美的地方:就是当GameOver后,程序会不停的循环执行life_num = 0部分的代码,这就导致程序会不停的打开和关闭txt文件,这完全是没有必要的,只需在程序结束时check一次txt文件中的内容就够了,为此我们在主函数中设置一个标志位用来表示当前文件的打开状态:

flag_recorded = False  # 是否已经打开记录文件标志位

  然后在打开文件后,将其置为true,并且在打开文件前对其进行判断:

        elif life_num == 0:  # 生命值为零,绘制游戏结束画面# 关闭补给机制及音效if not flag_recorded:  # 读取历史最高分flag_recorded = True# 如果玩家得分大于历史最高分,则将当前分数存档

  ok,运行程序,一切正常,我们的打飞机游戏至此已经全部编写完成,由于博客所讲的代码比较零散,稍后我会上传一份完整的、添加详细注释的代码,这是我的第一个Python程序,欢迎大家指正,谢谢。

完整代码

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. [AWK]使用AWK进行分割字符串以及截取字符串
  2. mysql中的输出,mysql-将输出结果作为SQL中的列
  3. 波士顿动力一只48.8万,美女沙滩遛「狗」,网友直呼:壕
  4. Linux 中模拟延时和丢包的实现
  5. 没有读过的书,就不要瞎推荐了!
  6. 运维一定要懂的100个网络安全小知识
  7. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
  8. 箱线图和散点图叠加图形的绘制——R language
  9. maven常用的中央仓库
  10. python函数递归调用时对深度没有限制_在Python程序中设置函数最大递归深度
  11. 【Hadoop】:Windows下使用IDEA搭建Hadoop开发环境
  12. 安装Eplan时报错的解决方案
  13. 有效值/峰-峰值/幅值/瞬时值
  14. 桌面版 Linux 为什么打不过 Windows?Linus 现身说法!
  15. pe修改服务器2003密码,PE修改Windows密码
  16. C中printf()的常用输出
  17. win10离线安装 .NetFramework3.5
  18. 走在路上能被识别人脸,该为高科技而喜还是为隐私而忧?
  19. 国产x86服务器芯片,华为、飞腾扛旗,国产服务器芯片有望突破!ARM要替代x86?...
  20. Qt扫盲-QTabWidget理论总结

热门文章

  1. Spring Security 权限控制
  2. 【经典】学徒 名人学徒的名句
  3. 女研究生做“思维导图”与男友吵架!堪称吵架届的“内卷之王”....
  4. 零基础学黑客,该怎么学?
  5. VsCode,GO语言,go mod 下导入第三方包飘红,但是可以执行
  6. sbt 和 Scala Test
  7. SIM基本常识(PIN,PUK,IMEI,ICCID,Ki,IMSI,SMSP)
  8. Java 帕斯卡三角/杨辉三角
  9. SRP Batcher 原理及应用
  10. 三菱5uplc伺服电机指令_三菱plc特殊功能模块读取与写入指令