支持Windows下单文件封装模式调节游戏速度倍率
This commit is contained in:
parent
95d72c55cd
commit
64f2fa52c0
@ -7,9 +7,6 @@ else: # 非Windows系统存储路径
|
|||||||
USERDATA_PATH = os.path.expanduser(os.path.join("~", ".config", "wszqkzqk.dev", "pypvz", "userdata.json"))
|
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"))
|
USERLOG_PATH = os.path.expanduser(os.path.join("~", ".config", "wszqkzqk.dev", "pypvz", "run.log"))
|
||||||
|
|
||||||
# 游戏速度倍率(调试用)
|
|
||||||
GAME_RATE = 1
|
|
||||||
|
|
||||||
# 窗口标题
|
# 窗口标题
|
||||||
ORIGINAL_CAPTION = 'pypvz'
|
ORIGINAL_CAPTION = 'pypvz'
|
||||||
# 窗口图标
|
# 窗口图标
|
||||||
@ -86,6 +83,7 @@ LEVEL_NUM = 'level num'
|
|||||||
LITTLEGAME_NUM = 'littleGame num'
|
LITTLEGAME_NUM = 'littleGame num'
|
||||||
LEVEL_COMPLETIONS = 'level completions'
|
LEVEL_COMPLETIONS = 'level completions'
|
||||||
LITTLEGAME_COMPLETIONS = 'littleGame completions'
|
LITTLEGAME_COMPLETIONS = 'littleGame completions'
|
||||||
|
GAME_RATE = 'game rate'
|
||||||
|
|
||||||
# 整个游戏的状态
|
# 整个游戏的状态
|
||||||
MAIN_MENU = 'main menu'
|
MAIN_MENU = 'main menu'
|
||||||
@ -663,6 +661,7 @@ INIT_USERDATA = {
|
|||||||
LITTLEGAME_NUM: 1,
|
LITTLEGAME_NUM: 1,
|
||||||
LEVEL_COMPLETIONS: 0,
|
LEVEL_COMPLETIONS: 0,
|
||||||
LITTLEGAME_COMPLETIONS: 0,
|
LITTLEGAME_COMPLETIONS: 0,
|
||||||
|
GAME_RATE: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
# 无穷大常量
|
# 无穷大常量
|
||||||
|
|||||||
@ -33,7 +33,6 @@ class Control():
|
|||||||
self.screen = pg.display.get_surface()
|
self.screen = pg.display.get_surface()
|
||||||
self.done = False
|
self.done = False
|
||||||
self.clock = pg.time.Clock() # 创建一个对象来帮助跟踪时间
|
self.clock = pg.time.Clock() # 创建一个对象来帮助跟踪时间
|
||||||
self.fps = 50 * c.GAME_RATE
|
|
||||||
self.keys = pg.key.get_pressed()
|
self.keys = pg.key.get_pressed()
|
||||||
self.mouse_pos = None
|
self.mouse_pos = None
|
||||||
self.mouse_click = [False, False] # value:[left mouse click, right mouse click]
|
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:
|
with open(c.USERDATA_PATH) as f:
|
||||||
userdata = json.load(f)
|
userdata = json.load(f)
|
||||||
# 存档内不包含即时游戏时间信息,需要新建
|
self.game_info = {}
|
||||||
self.game_info = {c.CURRENT_TIME:0}
|
# 导入数据,保证了可运行性,但是放弃了数据向后兼容性,即假如某些变量在以后改名,在导入时可能会被重置
|
||||||
# 导入数据
|
need_to_rewrite = False
|
||||||
self.game_info.update(userdata)
|
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:
|
except FileNotFoundError:
|
||||||
# 不存在存档即新建
|
# 不存在存档即新建
|
||||||
if not os.path.exists(os.path.dirname(c.USERDATA_PATH)):
|
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)
|
savedata = json.dumps(c.INIT_USERDATA, sort_keys=True, indent=4)
|
||||||
f.write(savedata)
|
f.write(savedata)
|
||||||
self.game_info = c.INIT_USERDATA.copy() # 内部全是不可变对象,浅拷贝即可
|
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):
|
def setup_states(self, state_dict, start_state):
|
||||||
@ -69,7 +78,7 @@ class Control():
|
|||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
# 返回自 pygame_init() 调用以来的毫秒数 * 游戏速度倍率
|
# 返回自 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:
|
if self.state.done:
|
||||||
self.flip_state()
|
self.flip_state()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user