关闭

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

标签: 微信打飞机Python
5461人阅读 评论(4) 收藏 举报
分类:

  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程序,欢迎大家指正,谢谢。

完整代码


4
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

树莓派学习系列5——使用python编写简单的游戏程序

前言 Raspbian的系统中包含了python的编程环境IDE,方便了我们对于python的学习。个人觉得还是游戏程序能够更好的激发我们的潜力所以,话不多说下面就来使用python编写我们简单的游戏...
  • wait_for_taht_day5
  • wait_for_taht_day5
  • 2016-06-05 01:43
  • 4987

python 小游戏 代码存档

import pygame #导入pygame库 import math from pygame.locals import * #导入一些常用的函数和常量 import random #2初始化p...
  • u011209223
  • u011209223
  • 2015-05-13 11:10
  • 922

python趣味入门——写几个常玩的游戏

文档介绍 利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组/字典/流程控制/库函数等等。 环境参数 ...
  • buptlrw
  • buptlrw
  • 2014-12-14 14:19
  • 14225

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

在这篇博文中,我们准备为打飞机小游戏添加一个暂停的功能,即用户在游戏过程中随时可以通过单击屏幕右上方的一个暂停按钮来暂停和恢复游戏。这个功能看似比较简单,但其中涉及了鼠标操作、图片切换、代码结构的重置...
  • u013088062
  • u013088062
  • 2015-11-18 11:17
  • 3750

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

接下来,我们为我方飞机添加武器——发射子弹。   考虑到Python语言的模块化,我们同样将子弹封装为一个模块,bullet.py。新建py文件,导入Pygame,编程开始。   1、定义子弹类—...
  • u013088062
  • u013088062
  • 2015-11-13 21:34
  • 4045

教你用python写游戏之flappy bird(1)

flappy bird最近火遍大江南北,教你用python写游戏的第一课就向它开刀了。    这个课程的基础是假定你有比较不错的编程功底,对python有一点点的基础。   一、准备工作   1...
  • a008068920
  • a008068920
  • 2014-03-01 14:11
  • 3075

十岁小孩教用Python写游戏

http://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python B...
  • stereohomology
  • stereohomology
  • 2013-09-24 08:02
  • 4565

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

最近开始学习Python语言,发现Python有一个神奇的Pygame模块,在编写小游戏时显得非常方便,于是参照教学视频编写了一个微信打飞机的小游戏,网上有很多相关的博客,但都不是很详细,大都是直接贴...
  • u013088062
  • u013088062
  • 2015-11-07 21:13
  • 17363

python写的2048游戏

  • 2016-11-03 17:26
  • 3KB
  • 下载

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

最近开始学习Python语言,发现Python有一个神奇的Pygame模块,在编写小游戏时显得非常方便,于是参照教学视频编写了一个微信打飞机的小游戏,网上有很多相关的博客,但都不是很详细,大都是直接贴...
  • u013088062
  • u013088062
  • 2015-11-07 21:13
  • 17363
    个人简介
    燕山大学研究生,目前研三。邮箱:1095988845@qq.com,交流请发邮件,评论和私信可能无法及时回复,谢谢。
    个人资料
    • 访问:1481410次
    • 积分:11083
    • 等级:
    • 排名:第1671名
    • 原创:134篇
    • 转载:2篇
    • 译文:0篇
    • 评论:549条
    博客专栏
    最新评论