Unity實(shí)現(xiàn)答題系統(tǒng)的示例代碼
一、作品展示
1、菜單界面
(注:由于特殊原因,原圖無(wú)法展示,請(qǐng)諒解)
2、答題界面
(注:由于特殊原因,原圖無(wú)法展示,請(qǐng)諒解)
3、學(xué)習(xí)模式界面
(注:由于特殊原因,原圖無(wú)法展示,請(qǐng)諒解)
二、代碼展示
1、菜單頁(yè)面
三個(gè)場(chǎng)景跳轉(zhuǎn)按鈕
學(xué)習(xí)黨史按鈕
using UnityEngine.SceneManagement; using UnityEngine; public class EnterStudy : MonoBehaviour { public void EnterStudy_() { SceneManager.LoadScene("學(xué)習(xí)界面"); } }
答題測(cè)試按鈕
using UnityEngine.SceneManagement; using UnityEngine; public class EnterTest : MonoBehaviour { public void EnterTest_() { SceneManager.LoadScene("example"); } }
退出系統(tǒng)按鈕
using UnityEngine; public class ExitSystem : MonoBehaviour { public void Quit() { Application.Quit(); } }
2、退出按鈕
using UnityEngine; public class ExitSystem : MonoBehaviour { public void Quit() { Application.Quit(); } }
3、學(xué)習(xí)界面代碼
代碼
using UnityEngine; using UnityEngine.UI; using System.IO; using System.Text; using System.Collections.Generic; public class TXT_OPRATION : MonoBehaviour { //public TextAsset textTxt; //讀取文檔 string[][] ArrayX;//題目數(shù)據(jù) string[] lineArray;//讀取到題目數(shù)據(jù) public Text stuText; string[] items = new string[7]{"題號(hào):", "題目:", "A:", "B:", "C:", "D:", "答案:" }; void Start() { LoadTxt(); //Debug.Log(textTxt.text); } private void LoadTxt() { string UnityPath1 = Application.dataPath + "/StreamingAssets/題目5.txt"; string[] allLineText = File.ReadAllLines(UnityPath1); for (int i = 0; i < allLineText.Length; i++) { Debug.Log(allLineText.Length); } ArrayX = new string[allLineText.Length][]; //把csv中的數(shù)據(jù)儲(chǔ)存在二維數(shù)組中 for (int i = 0; i < allLineText.Length; i++) { ArrayX[i] = allLineText[i].Split(':'); } //查看保存的題目數(shù)據(jù) int k = 0; string texts = ""; for (int i = 0; i < ArrayX.Length; i++) { //texts += "題號(hào):"; for (int j = 0; j < ArrayX[i].Length; j++) { //Debug.Log(ArrayX[i][j]); texts += items[k]; texts += ArrayX[i][j]; texts += '\n'; k++; if (k == 7) { k = 0; } } } stuText.text = texts; } }
4、答題界面代碼
返回開(kāi)始菜單按鈕
using UnityEngine.SceneManagement; using UnityEngine; public class returnMenu : MonoBehaviour { public void ReturnMenu() { SceneManager.LoadScene("登錄界面"); } }
答題處理主代碼
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System.Text; public class testAnswer : MonoBehaviour { //讀取文檔 string[][] ArrayX;//題目數(shù)據(jù) string[] lineArray;//讀取到題目數(shù)據(jù) private int topicMax = 0;//最大題數(shù) private List<bool> isAnserList = new List<bool>();//存放是否答過(guò)題的狀態(tài) //加載題目 public GameObject tipsbtn;//提示按鈕 public Text tipsText;//提示信息 public List<Toggle> toggleList;//答題Toggle public Text indexText;//當(dāng)前第幾題 public Text TM_Text;//當(dāng)前題目 public List<Text> DA_TextList;//選項(xiàng) private int topicIndex = 0;//第幾題 //按鈕功能及提示信息 public Button BtnBack;//上一題 public Button BtnNext;//下一題 public Button BtnTip;//消息提醒 public Button BtnJump;//跳轉(zhuǎn)題目 public InputField jumpInput;//跳轉(zhuǎn)題目 public Text TextAccuracy;//正確率 private int anserint = 0;//已經(jīng)答過(guò)幾題 private int isRightNum = 0;//正確題數(shù) void Awake() { TextCsv(); LoadAnswer(); } void Start() { toggleList[0].onValueChanged.AddListener((isOn) => AnswerRightRrongJudgment(isOn, 0)); toggleList[1].onValueChanged.AddListener((isOn) => AnswerRightRrongJudgment(isOn, 1)); toggleList[2].onValueChanged.AddListener((isOn) => AnswerRightRrongJudgment(isOn, 2)); toggleList[3].onValueChanged.AddListener((isOn) => AnswerRightRrongJudgment(isOn, 3)); BtnTip.onClick.AddListener(() => Select_Answer(0)); BtnBack.onClick.AddListener(() => Select_Answer(1)); BtnNext.onClick.AddListener(() => Select_Answer(2)); BtnJump.onClick.AddListener(() => Select_Answer(3)); } /*****************讀取txt數(shù)據(jù)******************/ void TextCsv() { string UnityPath1 = Application.dataPath + "/StreamingAssets/題目5.txt"; string[] allLineText = File.ReadAllLines(UnityPath1); for (int i = 0; i < allLineText.Length; i++) { Debug.Log(allLineText.Length); } ArrayX = new string[allLineText.Length][]; //把csv中的數(shù)據(jù)儲(chǔ)存在二維數(shù)組中 for (int i = 0; i < allLineText.Length; i++) { ArrayX[i] = allLineText[i].Split(':'); } /* //查看保存的題目數(shù)據(jù) for (int i = 0; i < ArrayX.Length; i++) { for (int j = 0; j < ArrayX[i].Length; j++) { Debug.Log(ArrayX[i][j]); } } */ //設(shè)置題目狀態(tài) topicMax = allLineText.Length; for (int x = 0; x < topicMax; x++) { isAnserList.Add(false); } } /*****************加載題目******************/ void LoadAnswer() { for (int i = 0; i < toggleList.Count; i++) { toggleList[i].isOn = false; } for (int i = 0; i < toggleList.Count; i++) { toggleList[i].interactable = true; } tipsbtn.SetActive(false); tipsText.text = ""; indexText.text = "第" + (topicIndex + 1) + "題:";//第幾題 TM_Text.text = ArrayX[topicIndex][1];//題目 int idx = ArrayX[topicIndex].Length - 3;//有幾個(gè)選項(xiàng) for (int x = 0; x < idx; x++) { DA_TextList[x].text = ArrayX[topicIndex][x + 2];//選項(xiàng) } } /*****************按鈕功能******************/ void Select_Answer(int index) { switch (index) { case 0://提示 int idx = ArrayX[topicIndex].Length - 1; int n = int.Parse(ArrayX[topicIndex][idx]); string nM = ""; switch (n) { case 1: nM = "A"; break; case 2: nM = "B"; break; case 3: nM = "C"; break; case 4: nM = "D"; break; } tipsText.text = "<color=#FFAB08FF>" + "正確答案是:" + nM + "</color>"; break; case 1://上一題 if (topicIndex > 0) { topicIndex--; LoadAnswer(); } else { tipsText.text = "<color=#27FF02FF>" + "前面已經(jīng)沒(méi)有題目了!" + "</color>"; } break; case 2://下一題 if (topicIndex < topicMax - 1) { topicIndex++; LoadAnswer(); } else { tipsText.text = "<color=#27FF02FF>" + "哎呀!已經(jīng)是最后一題了。" + "</color>"; } break; case 3://跳轉(zhuǎn) int x = int.Parse(jumpInput.text) - 1; if (x >= 0 && x < topicMax) { topicIndex = x; jumpInput.text = ""; LoadAnswer(); } else { tipsText.text = "<color=#27FF02FF>" + "不在范圍內(nèi)!" + "</color>"; } break; } } /*****************題目對(duì)錯(cuò)判斷******************/ void AnswerRightRrongJudgment(bool check, int index) { if (check) { //判斷題目對(duì)錯(cuò) bool isRight; int idx = ArrayX[topicIndex].Length - 1; int n = int.Parse(ArrayX[topicIndex][idx]) - 1; if (n == index) { tipsText.text = "<color=#27FF02FF>" + "恭喜你,答對(duì)了!" + "</color>"; isRight = true; tipsbtn.SetActive(true); } else { tipsText.text = "<color=#FF0020FF>" + "對(duì)不起,答錯(cuò)了!" + "</color>"; isRight = false; tipsbtn.SetActive(true); } //正確率計(jì)算 if (isAnserList[topicIndex]) { tipsText.text = "<color=#FF0020FF>" + "這道題已答過(guò)!" + "</color>"; } else { anserint++; if (isRight) { isRightNum++; } isAnserList[topicIndex] = true; TextAccuracy.text = "正確率:" + ((float)isRightNum / anserint * 100).ToString("f2") + "%"; } //禁用掉選項(xiàng) for (int i = 0; i < toggleList.Count; i++) { toggleList[i].interactable = false; } } } }
三、相應(yīng)資源
1、txt文件格式
題號(hào):題目:A選項(xiàng):B選項(xiàng):C選項(xiàng):D選項(xiàng):答案的序號(hào) 題號(hào):題目:A選項(xiàng):B選項(xiàng):C選項(xiàng):D選項(xiàng):答案的序號(hào) 題號(hào):題目:A選項(xiàng):B選項(xiàng):C選項(xiàng):D選項(xiàng):答案的序號(hào) 題號(hào):題目:A選項(xiàng):B選項(xiàng):C選項(xiàng):D選項(xiàng):答案的序號(hào) 題號(hào):題目:A選項(xiàng):B選項(xiàng):C選項(xiàng):D選項(xiàng):答案的序號(hào) …… (注:最后一題的末尾不加回車,所有冒號(hào)都是英文格式)
2、如何修改題目?jī)?nèi)容
這是本系統(tǒng)的一大亮點(diǎn),也是Unity開(kāi)發(fā)的一個(gè)神奇的特性。往往我們做的程序想要修改信息都要連接云服務(wù)器、數(shù)據(jù)庫(kù)什么的,很少有能在本地直接修改的,并且修改完內(nèi)置文件之后往往都會(huì)使程序崩潰,本系統(tǒng)使用的數(shù)據(jù)修改方法是將題目寫在外部文檔,使程序能夠動(dòng)態(tài)讀取和修改題目信息。這種方式支持的文檔格式可以是txt、xml、json,本系統(tǒng)用的是最簡(jiǎn)便的txt文本。
這是因?yàn)槲覀冊(cè)赨nity中新建一個(gè)StreamingAssets文件夾,這個(gè)文件夾中的內(nèi)容可以在應(yīng)用發(fā)布時(shí)原封不動(dòng)地打包進(jìn)去(不會(huì)被加密和壓縮),一般用來(lái)存放二進(jìn)制文件。
有了這個(gè)文件夾,我們就可以在打包完之后也可以進(jìn)行文件中的修改(只限制于StreamingAssets文件夾)從而實(shí)現(xiàn)增刪題目的功能。
唯一的限制就是添加修改題目要滿足固定格式,不然讀取會(huì)出現(xiàn)錯(cuò)誤。
(按此路徑找到題目文件)
E:\xx學(xué)習(xí)系統(tǒng)5.0plus\xx學(xué)習(xí)與答題系統(tǒng)_Data\StreamingAssets
以上就是Unity實(shí)現(xiàn)答題系統(tǒng)的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Unity答題系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#將html table 導(dǎo)出成excel實(shí)例
C#將html table 導(dǎo)出成excel實(shí)例,需要的朋友可以參考一下2013-04-04WinForm實(shí)現(xiàn)最小化到系統(tǒng)托盤方法實(shí)例詳解
這篇文章主要介紹了WinForm實(shí)現(xiàn)最小化到系統(tǒng)托盤方法,實(shí)例分析了C#中實(shí)現(xiàn)WinForm最小化到系統(tǒng)托盤所需的相關(guān)控件與使用技巧,需要的朋友可以參考下2015-05-05FTPClientHelper輔助類 實(shí)現(xiàn)文件上傳,目錄操作,下載等操作
這篇文章主要分享了一個(gè)FTPClientHelper輔助類和介紹了常用的FTP命令,需要的朋友可以參考下。2016-06-06C#根據(jù)權(quán)重抽取隨機(jī)數(shù)
最近在開(kāi)發(fā)過(guò)程中遇到一個(gè)需要做帶權(quán)隨機(jī)的處理,本文主要介紹了C#根據(jù)權(quán)重抽取隨機(jī)數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02