py实现外星人入侵(二次开发)——6.保存游戏进度(json文件基本操作)

本文介绍如何在Python的外星人入侵游戏中使用JSON文件保存玩家的得分、等级等数据。当用户点击'q'或关闭窗口时,游戏状态将被写入JSON文件。在游戏开始时,用户可以选择加载进度或重新开始。内容涉及JSON文件格式、写入操作以及游戏逻辑的修改。
摘要由CSDN通过智能技术生成

前言

打脸了,忘记了这部分,还以为自己的外星人项目已经结束了。

这部分主要是讲如何使用json文件保存我们的等级、得分、最高分等等的游戏数据
之前有一个写如何保存最高分的博客,这次我们进行了一些改进。

逻辑:

  • 用户点击’q’或者关闭窗口时,我们将此时的stats数据(主要是得分、等级、剩余飞船数等)以及设置中的部分数据(飞船、外星人的移动速度,这些和等级有关)写入json文件。
  • 在点击play按钮后我们采用另外一个选项框来让用户进行选择,可以读取json文件的数据继续游戏,也可以重新开始。

json文件格式

整个文件是用花括号包起来的,和py的字典差不多,不过key只能用双引号包起来(py中字典的key单双引号都行)

运行生成的json文件:
在这里插入图片描述
当然还有其他的格式,比如这个vscode生成的json文件:
在这里插入图片描述
字典中的value有列表,列表的元素还是字典……
注意最里层的也是双引号

写入json

首先找到需要写入的位置,"q"按钮和关闭窗口,都在我们的事件函数部分。
写入的话,我们直接采用w方法(各种方法的功能、区别讲解看上面的博客),因为之前的文件已经不需要再使用了。
首先我们需要导入json包:
import json
写入的方法为dump(内容,文件变量)

with open('./alien/memory.json',"w") as m:
	memory = {
   
		"high_score":stats.high_score,
		"ships_left":stats.ships_left,
		"score":stats.score,
		"level":stats.level,
		"big_bullet":stats.big_bullet,
		
		"alien_speed_factor":ai_settings.alien_speed_factor,
		"ship_speed_factor":ai_settings.ship_speed_factor,
		"bullet_speed_factor":ai_settings.bullet_speed_factor,
		"alien_points":ai_settings.alien_points
	}
	json.dump(memory,m)

可能看到了那个奇奇怪怪的文件路径,这个我也在上面的博客中提到过,因为我们希望能在模块同一层中显示,所以才选择了这样的路径。

在两处的sys.exit之前添加:
在这里插入图片描述
在这里插入图片描述

开始逻辑

状态

在前言中,我简单讲了一下我想要的效果,点击play,进入下一个选项,然后就可以开始游戏。
也就是之前的双阶段游戏(点击play和没点击)被我分成了三部分,第一部分点击play按钮,第二部分为是否(我叫yon模块),第三部分是游戏开始。
所以我将game_stats中的game_activate改为了0。
在这里插入图片描述
没错,剩下的两个状态就是1和2。
这部分的想法主要是因为之前写过数逻的状态机,所以采用了类似的方法

新按钮模块

因为之前的按钮模块已经成了一个体系,不方便继续修改,我就自己又添加了一个模块,用来显示选项,长这样:(好叭已经听到有人骂它丑了)
在这里插入图片描述
模块叫做yon.py(yes or not)

import pygame.font
class YON():
    def __init__(self,screen):
        self.screen = screen
        self.screen_rect = screen.get_rect()
        self.text_color = (255,255,255)
        self.font = pygame.font.SysFont(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值