using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Linq; using System.IO; using DG.Tweening; using UnityEngine.Networking; public class ZX1Controller : MonoBehaviour { /// /// 题目 /// public Text txtQuestion; /// /// 选项A文本 /// public Text txtA; /// /// 选项B文本 /// public Text txtB; /// /// 选项C文本 /// public Text txtC; /// /// 选项D文本 /// public Text txtD; /// /// 分数UI /// public Text txtScore; /// /// 分数星星 /// public RectTransform rectScore; /// /// 背景 /// public RectTransform rectBg; /// /// 下一题按钮文字与结束游戏按钮文字 /// public Text txtNext; /// /// 下一题按钮 /// public Button btnNext; /// /// 选项按钮 /// public Button[] btnOptions; /// /// 选项面板 /// public GameObject pnlOptions; /// /// 错误提示面板 /// public GameObject pnlError; /// /// 错误提示 /// public Text txtMessage; /// /// 返回按钮 /// public Button btnReturn; /// /// 游戏结束图片 /// public Image imgResult; /// /// 游戏胜利图片 /// public Sprite imgWin; /// /// 游戏失败图片 /// public Sprite imgLose; //选项列表 List lstQuestions = new List(); Dictionary dictErrorEx = new Dictionary(); /// /// 正确答案 /// string answer; /// /// 获得分数 /// int score; /// /// 已答题数量 /// int currentQuestionCount; /// /// 题目总数量 /// int allQuestionCount; /// /// 是否答错误 /// bool isWrong; /// /// 是否已结束答题 /// bool isOver; Animator anim; string basePath; public string DataFileName = "Questions.json"; public string DataFileName_Error = "ErrorAnswer.json"; void Start() { basePath = CommonData.DataServer + "/ZX1/Data/"; anim = this.GetComponent(); StartCoroutine(JsonLoader.LoadJSON(basePath + DataFileName, GetQuestionList)); StartCoroutine(JsonLoader.LoadJSON(basePath + DataFileName_Error, GetErrorAnswerList)); } /// /// 获取题目列表 /// public void GetQuestionList(string data) { lstQuestions = JsonTools.ListFromJson(data); if (lstQuestions != null) { allQuestionCount = lstQuestions.Count; UpdateQuestion(); } #region // lstQuestions = JsonMapper.ToObject>(www.text); //lstQuestions = new List(); //lstQuestions.Add(new QuestionInfo { Title = "( )统一了台湾。", Option_A = "顺治", Option_B = "雍正", Option_C = "康熙", Option_D = "乾隆", Solution = "C" }); //lstQuestions.Add(new QuestionInfo { Title = "康熙二十三年(1684)四月,清廷在台湾设置一府三县,隶属于( )。", Option_A = "福建省", Option_B = "浙江省", Option_C = "广东省", Option_D = "江苏省", Solution = "A" }); //lstQuestions.Add(new QuestionInfo { Title = "康熙二十二年(1683)十二月二十日,施琅向康熙提呈了具有历史意义的一篇奏疏——《( )》。", Option_A = "恭陈台湾弃留疏", Option_B = "陈台湾弃留利害疏", Option_C = "筹台湾防务大概情形折", Option_D = "台北拟建一府三县折", Solution = "A" }); //lstQuestions.Add(new QuestionInfo { Title = "为了使康熙对台湾的地理形势有一个比较清楚的认识,( )绘制了台湾地图,呈康熙御览。", Option_A = "沈葆桢", Option_B = "左宗棠", Option_C = "施琅", Option_D = "李光地", Solution = "C" }); //lstQuestions.Add(new QuestionInfo { Title = "在经过长达八个月的权衡之后,康熙帝于公元( )决定将台湾纳入大清版图。", Option_A = "1683年", Option_B = "1684年", Option_C = "1685年", Option_D = "1686年", Solution = "B" }); //string data = JsonTools.ListToJson(lstQuestions); //StreamWriter writer = File.CreateText(DataFileName); //writer.Write(data); //writer.Close(); #endregion } /// /// 获取题目列表 /// public void GetErrorAnswerList(string data) { dictErrorEx = JsonTools.DicFromJson(data); #region //dictErrorEx = new Dictionary(); //dictErrorEx.Add("顺治", "爱新觉罗·福临(1638年—1661年),满族,六岁即位,十三岁亲政,是为清军入关后的首位皇帝,在位共十八年,是康熙皇帝的父亲。"); //dictErrorEx.Add("雍正", "清世宗爱新觉罗·胤禛(1678年—1735年),清朝第五位君主(1722年—1735年在位),。康熙帝第四子,主要功绩:平定罗卜藏丹津叛乱、推行国计民生改革。"); //dictErrorEx.Add("乾隆", "爱新觉罗·弘历 (1711年—1799年),康熙的孙子,是中国有文字记载以来享年最高,实际执政时间最长的皇帝,在位期间编撰《四库全书》。"); //dictErrorEx.Add("筹台湾防务大概情形折", "1874年,日寇派兵侵占台湾南部琅懋、牡丹等地。清廷委任沈葆桢为钦差大臣,督办台湾军务。赴台当天,沈葆桢与一批大臣联名上奏《筹台湾防务大概情形折》,揭露日本侵略野心。"); //dictErrorEx.Add("台北拟建一府三县折", "1874年,日本侵台事件导致增设府县更加急迫,于是在1875年批准了沈葆桢《台北拟建一府三县折》的奏请,在大甲溪以北地区新设台北府,下辖淡水县、宜兰县、新竹县。"); //dictErrorEx.Add("沈葆桢", "沈葆桢(1820年—1879年),原名沈振宗,字幼丹,又字翰宇,汉族,福建侯官(今福建福州)人。中国近代造船、航运、海军建设事业的奠基人之一。是清朝抵抗侵略的封疆大吏林则徐之婿。同治十三年(1874年),清廷派沈葆桢为钦差大臣,赴台办理海防,兼理各国事务大臣,筹划海防事宜,办理日本撤兵交涉。"); //dictErrorEx.Add("左宗棠", "左宗棠(1812年—1885年),汉族,字季高,湖南湘阴人。晚清政治家、军事家、民族英雄,洋务派代表人物之一,与曾国藩等人并称“晚清中兴四大名臣”。参与平定太平天国运动、兴办洋务运动、镇压捻军,又主持平定陕甘同治回民起事、收复新疆并推动新疆置省"); //dictErrorEx.Add("李光地", "李光地(1642年—1718年),历任翰林院编修、翰林学士、兵部右侍郎、直隶巡抚,协助平定“三藩之乱”、“统一台湾”,康熙四十四年(1705年),拜文渊阁大学士兼吏部尚书。"); //string data = JsonTools.DicToJson(dictErrorEx); //StreamWriter writer = File.CreateText(DataFileName_Error); //writer.Write(data); //writer.Close(); #endregion } /// /// 获取题目 /// void UpdateQuestion() { foreach (Button btn in btnOptions) { btn.enabled = true; btn.transform.GetComponentInChildren().color = Color.black; } if (currentQuestionCount < allQuestionCount) { int ordinal = Random.Range(0, lstQuestions.Count); txtQuestion.text = lstQuestions[ordinal].Title; txtA.text = lstQuestions[ordinal].Option_A; txtB.text = lstQuestions[ordinal].Option_B; txtC.text = lstQuestions[ordinal].Option_C; txtD.text = lstQuestions[ordinal].Option_D; answer = lstQuestions[ordinal].Solution; lstQuestions.RemoveAt(ordinal); isWrong = false; currentQuestionCount++; if (currentQuestionCount == allQuestionCount) { txtNext.text = "结束答题"; } } } public void OnBtnOptionClick(string option) { if (!isOver) { if (option == answer) { AudioManager.Instance.PlayAudio("right", 0.5f); //if (!isWrong) { score++; txtScore.text = "当前分数:" + score; rectScore.sizeDelta = new Vector2(64 * score, 64); Tween myTween = rectScore.transform.DOShakePosition(1, 4); myTween.SetEase(Ease.OutQuint); } if (txtNext.text != "结束答题") { OnBtnNextClick(); } else { ShowResult(); } } else { isWrong = true; Button btnClicked = btnOptions.First(btn => btn.name == "btn" + option); Text txtOption = btnClicked.transform.GetComponentInChildren(); txtOption.color = Color.red; btnClicked.enabled = false; AudioManager.Instance.PlayAudio("error", 0.5f); rectScore.sizeDelta = new Vector2(64 * score, 64); Tween myTween = btnClicked.transform.DOShakePosition(1, 4); myTween.SetEase(Ease.OutQuint); if (dictErrorEx.ContainsKey(txtOption.text)) { txtMessage.text = dictErrorEx[txtOption.text]; Invoke("ShowErrorOption", 1); } } } } public GameObject subject; void ShowResult() { imgResult.sprite = score == allQuestionCount ? imgWin : imgLose; anim.SetTrigger("result"); // 显示答题结果 // Invoke("OnBtnCloseClick", 3); } void ShowErrorOption() { btnNext.gameObject.SetActive(false); pnlOptions.SetActive(false); pnlError.SetActive(true); // rectScore.gameObject.SetActive(false); } public void OnBtnNextClick() { if (!isOver) { if (txtNext.text == "结束答题") { isOver = true; ShowResult(); } else { UpdateQuestion(); } } } public void OnBtnReturnClick() { pnlError.SetActive(false); pnlOptions.SetActive(true); btnNext.gameObject.SetActive(true); rectScore.gameObject.SetActive(true); } public void OnBtnCloseClick() { // 播放关闭动画 // anim.SetTrigger("close"); Close(); } public void Close() { BaseController.HideView(); Destroy(gameObject.transform.parent.gameObject); } }