我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Unity实现答题系统的示例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Unity实现答题系统的示例代码

一、作品展示

1、菜单界面

(注:由于特殊原因,原图无法展示,请谅解)

2、答题界面

(注:由于特殊原因,原图无法展示,请谅解)

3、学习模式界面

(注:由于特殊原因,原图无法展示,请谅解)

二、代码展示

1、菜单页面

三个场景跳转按钮

学习党史按钮 

using UnityEngine.SceneManagement;
using UnityEngine;
 
public class EnterStudy : MonoBehaviour
{
    public void EnterStudy_()
    {
        SceneManager.LoadScene("学习界面");
    }
}

答题测试按钮

using UnityEngine.SceneManagement;
using UnityEngine;
 
public class EnterTest : MonoBehaviour
{
    public void EnterTest_()
    {
        SceneManager.LoadScene("example");
    }
}

退出系统按钮

using UnityEngine;
 
public class ExitSystem : MonoBehaviour
{
    public void Quit()
    {
        Application.Quit();
    }
}

2、退出按钮

using UnityEngine;
 
public class ExitSystem : MonoBehaviour
{
    public void Quit()
    {
        Application.Quit();
    }
}

3、学习界面代码

代码

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;//题目数据
    string[] lineArray;//读取到题目数据
 
    public Text stuText;
    string[] items = new string[7]{"题号:", "题目:", "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中的数据储存在二维数组中  
        for (int i = 0; i < allLineText.Length; i++)
        {
            ArrayX[i] = allLineText[i].Split(':');
        }
        //查看保存的题目数据
        int k = 0;
        string texts = "";
        for (int i = 0; i < ArrayX.Length; i++)
        {
            //texts += "题号:";
            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、答题界面代码

返回开始菜单按钮

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;//题目数据
    string[] lineArray;//读取到题目数据
    private int topicMax = 0;//最大题数
    private List<bool> isAnserList = new List<bool>();//存放是否答过题的状态
 
    //加载题目
    public GameObject tipsbtn;//提示按钮
    public Text tipsText;//提示信息
    public List<Toggle> toggleList;//答题Toggle
    public Text indexText;//当前第几题
    public Text TM_Text;//当前题目
    public List<Text> DA_TextList;//选项
    private int topicIndex = 0;//第几题
 
    //按钮功能及提示信息
    public Button BtnBack;//上一题
    public Button BtnNext;//下一题
    public Button BtnTip;//消息提醒
    public Button BtnJump;//跳转题目
    public InputField jumpInput;//跳转题目
    public Text TextAccuracy;//正确率
    private int anserint = 0;//已经答过几题
    private int isRightNum = 0;//正确题数
 
    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));
    }
 
 
    
    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中的数据储存在二维数组中  
        for (int i = 0; i < allLineText.Length; i++)
        {
            ArrayX[i] = allLineText[i].Split(':');
        }
        
        //设置题目状态
        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;//有几个选项
        for (int x = 0; x < idx; x++)
        {
            DA_TextList[x].text = ArrayX[topicIndex][x + 2];//选项
        }
    }
 
    
    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>" + "前面已经没有题目了!" + "</color>";
                }
                break;
            case 2://下一题
                if (topicIndex < topicMax - 1)
                {
                    topicIndex++;
                    LoadAnswer();
                }
                else
                {
                    tipsText.text = "<color=#27FF02FF>" + "哎呀!已经是最后一题了。" + "</color>";
                }
                break;
            case 3://跳转
                int x = int.Parse(jumpInput.text) - 1;
                if (x >= 0 && x < topicMax)
                {
                    topicIndex = x;
                    jumpInput.text = "";
                    LoadAnswer();
                }
                else
                {
                    tipsText.text = "<color=#27FF02FF>" + "不在范围内!" + "</color>";
                }
                break;
        }
    }
 
    
    void AnswerRightRrongJudgment(bool check, int index)
    {
        if (check)
        {
            //判断题目对错
            bool isRight;
            int idx = ArrayX[topicIndex].Length - 1;
            int n = int.Parse(ArrayX[topicIndex][idx]) - 1;
            if (n == index)
            {
                tipsText.text = "<color=#27FF02FF>" + "恭喜你,答对了!" + "</color>";
                isRight = true;
                tipsbtn.SetActive(true);
            }
            else
            {
                tipsText.text = "<color=#FF0020FF>" + "对不起,答错了!" + "</color>";
                isRight = false;
                tipsbtn.SetActive(true);
            }
 
            //正确率计算
            if (isAnserList[topicIndex])
            {
                tipsText.text = "<color=#FF0020FF>" + "这道题已答过!" + "</color>";
            }
            else
            {
                anserint++;
                if (isRight)
                {
                    isRightNum++;
                }
                isAnserList[topicIndex] = true;
                TextAccuracy.text = "正确率:" + ((float)isRightNum / anserint * 100).ToString("f2") + "%";
            }
 
            //禁用掉选项
            for (int i = 0; i < toggleList.Count; i++)
            {
                toggleList[i].interactable = false;
            }
        }
    }
}

三、相应资源

1、txt文件格式

题号:题目:A选项:B选项:C选项:D选项:答案的序号
题号:题目:A选项:B选项:C选项:D选项:答案的序号
题号:题目:A选项:B选项:C选项:D选项:答案的序号
题号:题目:A选项:B选项:C选项:D选项:答案的序号
题号:题目:A选项:B选项:C选项:D选项:答案的序号
……
(注:最后一题的末尾不加回车,所有冒号都是英文格式)

2、如何修改题目内容

这是本系统的一大亮点,也是Unity开发的一个神奇的特性。往往我们做的程序想要修改信息都要连接云服务器、数据库什么的,很少有能在本地直接修改的,并且修改完内置文件之后往往都会使程序崩溃,本系统使用的数据修改方法是将题目写在外部文档,使程序能够动态读取和修改题目信息。这种方式支持的文档格式可以是txt、xml、json,本系统用的是最简便的txt文本。

这是因为我们在Unity中新建一个StreamingAssets文件夹,这个文件夹中的内容可以在应用发布时原封不动地打包进去(不会被加密和压缩),一般用来存放二进制文件。

有了这个文件夹,我们就可以在打包完之后也可以进行文件中的修改(只限制于StreamingAssets文件夹)从而实现增删题目的功能。

唯一的限制就是添加修改题目要满足固定格式,不然读取会出现错误。

(按此路径找到题目文件)

E:\xx学习系统5.0plus\xx学习与答题系统_Data\StreamingAssets

以上就是Unity实现答题系统的示例代码的详细内容,更多关于Unity答题系统的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Unity实现答题系统的示例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于Unity实现3D版2048游戏的示例代码

这篇文章主要为大家详细介绍了如何利用Unity实现简易的3D版2048游戏,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
2023-02-02

Unity实现高效的音效管理类的示例代码

这篇文章主要为大家详细介绍了如何通过Unity实现高效的音效管理类,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
2023-03-22

C/C++实现获取系统时间的示例代码

C标准库提供了time()函数与localtime()函数可以获取到当前系统的日历时间。本文将通过一些简单的示例为大家讲讲C++获取系统时间的具体方法,需要的可以参考一下
2022-12-20

C++实现停车场管理系统的示例代码

停车场管理系统就是模拟停车场进行车辆管理的系统,该系统分为汽车信息模块,用户使用模块和管理员用户模块,本文将用C++实现这一简单的系统,希望对大家有所帮助
2023-05-15

Redis实现UV统计的示例代码

目录一、HyperlogLog1、为什么用HyperLogLog2、HyperLogLog是什么二、实现UV统计一、HyperLogLog1、为什么用HyperLogLog先介绍两个概念:UV:全称 Unique Visitor,也叫
2023-01-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录