前言
在之前的博客中,我详细的介绍了一下大战外星人的现目组成,从这篇博客开始,我将尝试用不同的方式来二次开发(魔改)这个项目。
这次我将魔爪放在了最高分部分上,我们知道之前的最高分在每一次重新运行游戏就消失了,这次我们采取将最高分读入到文件中。
先写入
写入部分还是比较简单的,这里我采取的思路是在三条命都没了之后、在游戏退出之前写入当前最高分。
虽然书上的意思是在sys.exit()之前,但是玩一半退出了,不给你保留也没什么问题。
首先找到要修改的位置:game_function文件的ship_hit函数
在函数中,我们有判断三条命是否用完了的情况,并对两种结果都进行了操作,我们将在else中添加内容。
然后要考虑,可能之前已经有了这样一个最高分文件,但是对我没有影响,我的想法是简单粗暴一些,反正之前的最高分也不要了,与其取出然后再写入不如直接使用"w"方法直接覆盖之前的文档。
(下面可能有一点啰嗦,简单说了一下几种文件打开类型和打开函数,不感兴趣的直接看代码部分吧)
对了,先介绍一下py的几种常见的读入文件格式:
字母 | 模式 |
---|---|
w | 写入模式 |
r | 读取模式 |
r+ | 读写模式 |
a | 附加模式 |
我们假设之前有一个文件,那么a就是在之前的基础上接着写;
w就是覆盖掉之前的文件,然后重写;
r则是只能读取,不能写入;
r+则比较厉害,能写入和读取。
如果是之前没有文件,w和r+会生成一个空文档;
a也会生成,但是会有一个io.UnsupportedOperation: not readable
的报错;
至于r,还是别难为它吧,直接报错文件找不到。
回归正题,别忘了我们采取的是"w"模式。
一般来说打开文件我比较喜欢的是with open,这里也简单说一下吧。
with open的结构是这样的:
with open("file name","模式") as file_object:
内容
首先with open是单独的一个模块,主意好缩进;
两个参数分别为文件名和打开类型(不写默认为r);
file_object属于打开文件的别名,学过C的都知道也有类似的东西(不过孩子已经ptsd了,立下flag以后不被逼就不写C)
除此之外,还有:
file_object = open("file name","模式")
不过这是我们就需要使用close函数了,with open相当于是将关闭文件的时间交给py来判断。
代码部分:
#stats.max_name存储了我的最高分文件名称,这个就是自己随便起
with open("./alien/"