From 64f2fa52c033910f0e1fc942914e31cfe503bf93 Mon Sep 17 00:00:00 2001 From: wszqkzqk Date: Wed, 27 Jul 2022 16:50:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81Windows=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=B0=81=E8=A3=85=E6=A8=A1=E5=BC=8F=E8=B0=83?= =?UTF-8?q?=E8=8A=82=E6=B8=B8=E6=88=8F=E9=80=9F=E5=BA=A6=E5=80=8D=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/constants.py | 5 ++--- source/tool.py | 25 +++++++++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/source/constants.py b/source/constants.py index 06bf8d2..e34e690 100755 --- a/source/constants.py +++ b/source/constants.py @@ -7,9 +7,6 @@ else: # 非Windows系统存储路径 USERDATA_PATH = os.path.expanduser(os.path.join("~", ".config", "wszqkzqk.dev", "pypvz", "userdata.json")) USERLOG_PATH = os.path.expanduser(os.path.join("~", ".config", "wszqkzqk.dev", "pypvz", "run.log")) -# 游戏速度倍率(调试用) -GAME_RATE = 1 - # 窗口标题 ORIGINAL_CAPTION = 'pypvz' # 窗口图标 @@ -86,6 +83,7 @@ LEVEL_NUM = 'level num' LITTLEGAME_NUM = 'littleGame num' LEVEL_COMPLETIONS = 'level completions' LITTLEGAME_COMPLETIONS = 'littleGame completions' +GAME_RATE = 'game rate' # 整个游戏的状态 MAIN_MENU = 'main menu' @@ -663,6 +661,7 @@ INIT_USERDATA = { LITTLEGAME_NUM: 1, LEVEL_COMPLETIONS: 0, LITTLEGAME_COMPLETIONS: 0, + GAME_RATE: 1, } # 无穷大常量 diff --git a/source/tool.py b/source/tool.py index 3b06fc0..16f3125 100755 --- a/source/tool.py +++ b/source/tool.py @@ -33,7 +33,6 @@ class Control(): self.screen = pg.display.get_surface() self.done = False self.clock = pg.time.Clock() # 创建一个对象来帮助跟踪时间 - self.fps = 50 * c.GAME_RATE self.keys = pg.key.get_pressed() self.mouse_pos = None self.mouse_click = [False, False] # value:[left mouse click, right mouse click] @@ -45,10 +44,19 @@ class Control(): # 存在存档即导入 with open(c.USERDATA_PATH) as f: userdata = json.load(f) - # 存档内不包含即时游戏时间信息,需要新建 - self.game_info = {c.CURRENT_TIME:0} - # 导入数据 - self.game_info.update(userdata) + self.game_info = {} + # 导入数据,保证了可运行性,但是放弃了数据向后兼容性,即假如某些变量在以后改名,在导入时可能会被重置 + need_to_rewrite = False + for key in c.INIT_USERDATA: + if key in userdata: + self.game_info[key] = userdata[key] + else: + self.game_info[key] = c.INIT_USERDATA[key] + need_to_rewrite = True + if need_to_rewrite: + with open(c.USERDATA_PATH, "w") as f: + savedata = json.dumps(self.game_info, sort_keys=True, indent=4) + f.write(savedata) except FileNotFoundError: # 不存在存档即新建 if not os.path.exists(os.path.dirname(c.USERDATA_PATH)): @@ -57,8 +65,9 @@ class Control(): savedata = json.dumps(c.INIT_USERDATA, sort_keys=True, indent=4) f.write(savedata) self.game_info = c.INIT_USERDATA.copy() # 内部全是不可变对象,浅拷贝即可 - # 存档内不包含即时游戏时间信息,需要新建 - self.game_info[c.CURRENT_TIME] = 0 + # 存档内不包含即时游戏时间信息,需要新建 + self.game_info[c.CURRENT_TIME] = 0 + self.fps = 50 * self.game_info[c.GAME_RATE] def setup_states(self, state_dict, start_state): @@ -69,7 +78,7 @@ class Control(): def update(self): # 返回自 pygame_init() 调用以来的毫秒数 * 游戏速度倍率 - self.current_time = pg.time.get_ticks() * c.GAME_RATE + self.current_time = pg.time.get_ticks() * self.game_info[c.GAME_RATE] if self.state.done: self.flip_state()