using System; using System.Collections.Generic; using System.Xml; using UnityEngine; public class ResSvc : MonoBehaviour { private Dictionary> _answerDict = new Dictionary>(); private Dictionary _passInfoDict = new Dictionary(); private Dictionary> _answerTipDict = new Dictionary>(); // Start is called before the first frame update public void Init() { switch (GameRoot.Instance.ABType) { case 0: InitAnswerConfig("answerConfig"); InitAnswerTip("answerTip"); break; case 1: InitAnswerConfig("answerConfig_B"); InitAnswerTip("answerTip_B"); break; } InitPassConfig("passInfo"); } private void InitAnswerConfig(string path) { TextAsset xml = Resources.Load(path); if (!xml) { Debug.Log("Xml" + path + "加载失败"); } else { Debug.Log("Xml" + path + "加载"); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.text); XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes; List answers = new List(); int index = 1; for (int i = 0; i < nodLst.Count; i++) { XmlElement ele = nodLst[i] as XmlElement; if (ele.GetAttributeNode("PassIndex") == null) { continue; } int PassIndex = Convert.ToInt32(ele.GetAttributeNode("PassIndex").InnerText); if (index != PassIndex) { answers = new List(); index = PassIndex; } Answer data = new Answer(PassIndex); foreach (XmlElement e in nodLst[i].ChildNodes) { switch (e.Name) { case "questionIndex": data.QuestionIndex = int.Parse(e.InnerText); break; case "answer": string[] valArr = e.InnerText.Split('_'); if (valArr.Length > 1) { for (int j = 0; j < valArr.Length; j++) { data.answer += valArr[j]; } } else { data.answer = valArr[0]; } break; case "score": data.score =float.Parse(e.InnerText); break; } } answers.Add(data); if (_answerDict.ContainsKey(PassIndex)) { _answerDict[PassIndex] = answers; } else { _answerDict.Add(PassIndex, answers); } //Debug.Log(PassIndex + "-" + data.QuestionIndex + "-" + data.answer); } } } private void InitAnswerTip(string path) { TextAsset xml = Resources.Load(path); if (!xml) { Debug.Log("Xml" + path + "加载失败"); } else { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.text); XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes; List answers = new List(); int index = 1; for (int i = 0; i < nodLst.Count; i++) { XmlElement ele = nodLst[i] as XmlElement; if (ele.GetAttributeNode("PassIndex") == null) { continue; } int PassIndex = Convert.ToInt32(ele.GetAttributeNode("PassIndex").InnerText); if (index != PassIndex) { answers = new List(); index = PassIndex; } AnswerTip data = new AnswerTip(PassIndex); foreach (XmlElement e in nodLst[i].ChildNodes) { switch (e.Name) { case "questionIndex": data.QuestionIndex = int.Parse(e.InnerText); break; case "answer": data.answer = e.InnerText; if (data.answer.Contains("r")) { data.answer= data.answer.Replace('r', '\n'); } //if (data.answer.Contains("R")) //{ // data.answer = data.answer.Replace('R', '\n'); //} if (data.answer.Contains("1.")) { data.answer = data.answer.Replace("1.", "(1)"); } break; if (data.answer.Contains("2.")) { data.answer = data.answer.Replace("2.", "(2)"); } break; if (data.answer.Contains("3.")) { data.answer = data.answer.Replace("3.", "(3)"); } break; if (data.answer.Contains("4.")) { data.answer = data.answer.Replace("4.", "(4)"); } break; if (data.answer.Contains("5.")) { data.answer = data.answer.Replace("5.", "(5)"); } break; } } answers.Add(data); if (_answerDict.ContainsKey(PassIndex)) { _answerTipDict[PassIndex] = answers; } else { _answerTipDict.Add(PassIndex, answers); } //Debug.Log(PassIndex + "-" + data.QuestionIndex + "-" + data.answer); } } } private void InitPassConfig(string path) { TextAsset xml = Resources.Load(path); if (!xml) { Debug.Log("Xml" + path + "加载失败"); } else { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.text); XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes; List answers = new List(); for (int i = 0; i < nodLst.Count; i++) { XmlElement ele = nodLst[i] as XmlElement; if (ele.GetAttributeNode("PassIndex") == null) { continue; } int PassIndex = Convert.ToInt32(ele.GetAttributeNode("PassIndex").InnerText); PassInfo data = new PassInfo(PassIndex); foreach (XmlElement e in nodLst[i].ChildNodes) { switch (e.Name) { case "title": data.info = e.InnerText; break; case "score": data.score = float.Parse(e.InnerText); break; case "time": data.time = int.Parse(e.InnerText); break; } } _passInfoDict.Add(PassIndex, data); } } } public bool CheckAnswerIsTrue(int passIndex,int questionIndex,int userAnswer) { List answers = new List(); if(_answerDict.TryGetValue(passIndex,out answers)) { for (int i = 0; i < answers.Count; i++) { if(answers[i].QuestionIndex == questionIndex) { int value = int.Parse(answers[i].answer); Debug.Log("第" + passIndex + "关第" + questionIndex + "题答题为" + userAnswer + "答案为" + answers[i].answer); if (answers[i].answer == userAnswer.ToString()) { Debug.Log("关卡"+passIndex+"小题"+questionIndex+"得分为"+answers[i].score); return true; } } } } return false; } public bool CheckAnswerIsTrue(int passIndex, int questionIndex, int[] userAnswer) { List answers = new List(); if (_answerDict.TryGetValue(passIndex, out answers)) { for (int i = 0; i < answers.Count; i++) { if (answers[i].QuestionIndex == questionIndex) { string value = answers[i].answer; string str = ""; for (int j = 0; j < userAnswer.Length; j++) { str+= userAnswer[j]; } if (answers[i].answer == str) { Debug.Log("关卡" + passIndex + "小题" + questionIndex + "得分为" + answers[i].score); return true; } else { Debug.Log("第"+passIndex+"关第"+questionIndex+"题答题为" + str + "答案为" + answers[i].answer); } } } } Debug.Log("第" + passIndex + "关第" + questionIndex + "多选题错误" ); return false; } public float GetSomePassScore(int index,int[] passIndexs) { float allScore = 0; string scoreStr = ""; for (int i = 0; i < passIndexs.Length; i++) { List list = new List(); float score = 0; if (_answerDict.TryGetValue(passIndexs[i], out list)) { foreach (var item in list) { score += item.score; scoreStr += score.ToString(); scoreStr += "+"; } } allScore += score; } Debug.Log("计算密卷" + index + "的总分值为:"+scoreStr +"="+ allScore); return allScore; } public List GetAnswerTip(int passIndex) { List tips = new List(); if (_answerTipDict.TryGetValue(passIndex, out tips)) { return tips; } return null; } public PassInfo GetPassInfo(int passIndex) { PassInfo passInfo = null; if(_passInfoDict.TryGetValue(passIndex,out passInfo)) { return passInfo; } return null; } public float GetQuestionScore(int passIndex,int QuestionIndex) { List list = new List(); if( _answerDict.TryGetValue(passIndex, out list)) { foreach (var item in list) { if (item.QuestionIndex == QuestionIndex) { return item.score; } } } return 0; } }