支持自动保存音量设置到文件,以便下次直接应用

This commit is contained in:
星外之神 2022-07-28 15:48:59 +08:00
parent ffc57d12ff
commit 2b85451404
2 changed files with 27 additions and 14 deletions

View File

@ -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

View File

@ -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:
# 先检查选项高亮预览