|
沙发

楼主 |
发表于 2020-8-24 16:02:07
|
只看该作者
单机
存储
有两种方式存储操作:自动和手动。
自动存储是每一回合轮到玩家阵营时,自动生成一个存储文件。
手动存储是在程序运行过程中,玩家在菜单中选择“存储”命令。
自动存储(savegame::save_game_automatic)
save_game_automatic会用savegame::save_game执行:- 1:before_save。形成[snapshot]等可以直接写入内存的变量。
- 2:write_game_to_disk。把[snapshot]等写入文件。
复制代码 手动存储(savegame::save_game_interactive)
1:显示确认存储对话框。
2:调用save_game。
加载
有两种情况下加载操作:初始界面时的“加载”操作,游戏过程中的“加载”操作
程序上“加载”加操作是通过loadgame中的两个load_game操作得到的。
初始界面时的“加载”操作
1:loadgame::load_game(std::string& filename, bool show_replay, bool cancel_orders, hero_map& heros)
@filename:要加载的文件名,包括*.sav扩展名,但不含路径。(前面是filename参数意义,但在此处就没有确定要选择哪个存档文件,给出的filename是空字串,loadgame::load_game须要显示“加载”对话框让玩家玩择一个存档文件)。
@heros:存档文件中的武将数据要被存放到hero_map。
注:存档文件中的config,虽然在load_game参数没有指定这个变量,但在loadgame构造函数时已传这下值。
游戏过程中的“加载”操作
1:loadgame::load_game()
这个load_game两个操作;1)显示“加载存档对话框”,2)向上抛出个game::load_game_exception异常,launch_game捕获到这个异常,并退出到do_gameloop,go_gameloop进而调用接下load_game。
2:loadgame::load_game(std::string& filename, bool show_replay, bool cancel_orders, hero_map& heros)。 |
|