static void Main(string[] args) { var storyTitle = JsonConvert.DeserializeObject <Story>(File.ReadAllText(Directory.GetCurrentDirectory() + STORY_DIR + @"\story.json")); var option = new SelectOption[] { new SelectOption() { text = "開始遊戲" }, new SelectOption() { text = "繼續遊戲" }, new SelectOption() { text = "人物介紹" }, new SelectOption() { text = "關於" }, new SelectOption() { text = "結束" }, }; while (true) { switch (Select(" " + storyTitle.name + " ", option)) { case 1: var globalVariable = JsonConvert.DeserializeObject <Variable[]>(File.ReadAllText(Directory.GetCurrentDirectory() + STORY_DIR + @"\globalVariable.json")); Load(storyTitle.startFrom, globalVariable); break; case 2: var saveFile = LoadSave(); if (saveFile != null) { floorsLine.AddRange(saveFile.floorsLine); Load(saveFile.stoeyName, saveFile.globalVariable); } break; case 3: Character(); break; case 4: About(); break; default: return; } } }
static void Show(string text, string storyName) { while (gameStatus == GameStatus.RUN) { Console.WriteLine(jsEngine.Execute(text).GetCompletionValue()); Console.Write(" 按0選項:"); try { int selected = Convert.ToInt32(Console.ReadLine()); if (selected == 0) { var option = new SelectOption[] { new SelectOption() { text = "返回" }, new SelectOption() { text = "存檔" }, new SelectOption() { text = "回主選單" }, }; while (true) { selected = Select(" 選項 ", option); if (selected == 1) { break; } else if (selected == 2) { Save(storyName); break; } else if (selected == 3) { gameStatus = GameStatus.STOP; break; } } } } catch (FormatException e) { break; } } }
static SaveFile LoadSave() { while (true) { var option = new SelectOption[] { new SelectOption() { text = "記錄檔1" }, new SelectOption() { text = "記錄檔2" }, new SelectOption() { text = "記錄檔3" }, new SelectOption() { text = "記錄檔4" }, new SelectOption() { text = "記錄檔5" }, new SelectOption() { text = "返回" }, }; var fileItem = Select(" 選擇記錄檔 ", option); if (fileItem == 6) { return(null); } try { return(JsonConvert.DeserializeObject <SaveFile>(File.ReadAllText(Directory.GetCurrentDirectory() + SAVE_DIR + @"\save" + fileItem + ".json"))); } catch (FileNotFoundException e) { Console.WriteLine("沒有紀錄!"); Console.ReadLine(); } } }
static void Save(string storyName) { var option = new SelectOption[] { new SelectOption() { text = "記錄檔1" }, new SelectOption() { text = "記錄檔2" }, new SelectOption() { text = "記錄檔3" }, new SelectOption() { text = "記錄檔4" }, new SelectOption() { text = "記錄檔5" }, new SelectOption() { text = "返回" }, }; var fileItem = Select(" 選擇記錄檔 ", option); if (fileItem == 6) { return; } var globalVariable = new List <Variable>(); foreach (var name in jsEngine.GetValue("SC").ToObject() as Dictionary <string, object> ) { switch (name.Value) { case var v when v is string: globalVariable.Add(new Variable() { name = name.Key, type = "string", value = v as string } ); break; case var v when v is double || v is long: globalVariable.Add(new Variable() { name = name.Key, type = "number", value = v } ); break; case var v when v is bool: globalVariable.Add(new Variable() { name = name.Key, type = "boolean", value = (bool)v } ); break; case var v when v is object[]: globalVariable.Add(new Variable() { name = name.Key, type = "array", value = v } ); break; case var v when v == null || v is object: globalVariable.Add(new Variable() { name = name.Key, type = "object", value = v } ); break; } } var saveFile = new SaveFile() { stoeyName = storyName, floorsLine = floorsLine.ToArray(), globalVariable = globalVariable.ToArray() }; File.WriteAllText( Directory.GetCurrentDirectory() + SAVE_DIR + @"\save" + fileItem + ".json", JsonConvert.SerializeObject(saveFile) ); option = new SelectOption[] { new SelectOption() { text = "繼續遊戲" }, new SelectOption() { text = "離開遊戲" }, }; switch (Select("請問您現在要? ", option)) { case 1: return; default: gameStatus = GameStatus.STOP; return; } }