From 2b85451404d4263ff7e3a4a76ea1149866c8dad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Thu, 28 Jul 2022 15:48:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=9F=B3=E9=87=8F=E8=AE=BE=E7=BD=AE=E5=88=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E4=BB=A5=E4=BE=BF=E4=B8=8B=E6=AC=A1=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/level.py | 29 +++++++++++++++-------------- source/state/mainmenu.py | 12 ++++++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/source/state/level.py b/source/state/level.py index ab97bd2..149b3eb 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -30,6 +30,15 @@ class Level(tool.State): self.setupBackground() self.initState() + def saveUserData(self): + with open(c.USERDATA_PATH, "w") as f: + userdata = {} + for i in self.game_info: + if i in c.INIT_USERDATA: + userdata[i] = self.game_info[i] + dataToSave = json.dumps(userdata, sort_keys=True, indent=4) + f.write(dataToSave) + def loadMap(self): if self.game_info[c.GAME_MODE] == c.MODE_LITTLEGAME: map_file = f'littleGame_{self.game_info[c.LITTLEGAME_NUM]}.json' @@ -55,13 +64,7 @@ class Level(tool.State): self.game_info[c.LITTLEGAME_COMPLETIONS] += 1 self.done = True self.next = c.MAIN_MENU - with open(c.USERDATA_PATH, "w") as f: - userdata = {} - for i in self.game_info: - if i in c.INIT_USERDATA: - userdata[i] = self.game_info[i] - savedata = json.dumps(userdata, sort_keys=True, indent=4) - f.write(savedata) + self.saveUserData() return # 是否有铲子的信息:无铲子时为0,有铲子时为1,故直接赋值即可 self.hasShovel = self.map_data[c.SHOVEL] @@ -590,6 +593,8 @@ class Level(tool.State): for i in c.SOUNDS: i.set_volume(self.game_info[c.VOLUME]) c.SOUND_BUTTON_CLICK.play() + # 将音量信息存档 + self.saveUserData() elif self.inArea(self.volume_minus_button_rect, *mouse_pos): self.game_info[c.VOLUME] = max(self.game_info[c.VOLUME] - 0.1, 0) # 一般不会有人想把音乐和音效分开设置,故pg.mixer.Sound.set_volume()和pg.mixer.music.set_volume()需要一起用 @@ -597,6 +602,8 @@ class Level(tool.State): for i in c.SOUNDS: i.set_volume(self.game_info[c.VOLUME]) c.SOUND_BUTTON_CLICK.play() + # 将音量信息存档 + self.saveUserData() # 一大波僵尸来袭图片显示 @@ -1427,13 +1434,7 @@ class Level(tool.State): self.game_info[c.LEVEL_NUM] += 1 self.next = c.GAME_VICTORY self.done = True - with open(c.USERDATA_PATH, "w") as f: - userdata = {} - for i in self.game_info: - if i in c.INIT_USERDATA: - userdata[i] = self.game_info[i] - savedata = json.dumps(userdata, sort_keys=True, indent=4) - f.write(savedata) + self.saveUserData() elif self.checkLose(): self.next = c.GAME_LOSE self.done = True diff --git a/source/state/mainmenu.py b/source/state/mainmenu.py index 901a755..bb426a8 100644 --- a/source/state/mainmenu.py +++ b/source/state/mainmenu.py @@ -1,5 +1,6 @@ import pygame as pg import os +import json from .. import tool from .. import constants as c @@ -22,6 +23,15 @@ class Menu(tool.State): pg.display.set_caption(c.ORIGINAL_CAPTION) pg.mixer.music.set_volume(self.game_info[c.VOLUME]) + def saveUserData(self): + with open(c.USERDATA_PATH, "w") as f: + userdata = {} + for i in self.game_info: + if i in c.INIT_USERDATA: + userdata[i] = self.game_info[i] + dataToSave = json.dumps(userdata, sort_keys=True, indent=4) + f.write(dataToSave) + def setupBackground(self): frame_rect = (80, 0, 800, 600) # 1、形参中加单星号,即f(*x)则表示x为元组,所有对x的操作都应将x视为元组类型进行。 @@ -270,6 +280,7 @@ class Menu(tool.State): for i in c.SOUNDS: i.set_volume(self.game_info[c.VOLUME]) c.SOUND_BUTTON_CLICK.play() + self.saveUserData() # 音量- elif self.inArea(self.volume_minus_button_rect, *mouse_pos): self.game_info[c.VOLUME] = max(self.game_info[c.VOLUME] - 0.1, 0) @@ -278,6 +289,7 @@ class Menu(tool.State): for i in c.SOUNDS: i.set_volume(self.game_info[c.VOLUME]) c.SOUND_BUTTON_CLICK.play() + self.saveUserData() # 没有点到前两者时常规行检测所有按钮的点击和高亮 else: # 先检查选项高亮预览