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

目录
  • 一、作品展示
    • 1、菜单界面
    • 2、答题界面
    • 3、学习模式界面
  • 二、代码展示
    • 1、菜单页面
    • 2、退出按钮
    • 3、学习界面代码
    • 4、答题界面代码
  • 三、相应资源
    • 1、txt文件格式
    • 2、如何修改题目内容

一、作品展示

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));
    }

    /*****************读取txt数据******************/
    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(':');
        }
        /*
        //查看保存的题目数据
        for (int i = 0; i < ArrayX.Length; i++)
        {
            for (int j = 0; j < ArrayX[i].Length; j++)
            {
                Debug.Log(ArrayX[i][j]);
            }
        }
        */
        //设置题目状态
        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答题系统的资料请关注我们其它相关文章!

(0)

相关推荐

  • unity实现简单抽奖系统

    这段时间工作比较空闲,想做个抽奖系统,发现网上的抽奖系统看不懂,然后自己做了一个可以随意定义奖品概率,不管什么时候停下来指针最终都会转到指定的奖品哪. 废话不多说,动手一步一步来. 这个抽奖系统就使用了两张图片,一个指针,一个圆形的图片. 然后做一个预制体,图片就是圆形图片,image type选择filled,fill amount控制这个图片的面积大小,同时也是该图片的概率,Text组件是该奖品的名称. 再接下来就做一下界面布局的工作 Bg就是那个灰色的图片,Rotate是个空物体,用来挂在

  • Unity实现单机游戏每日签到系统

    本文实例为大家分享了Unity实现每日签到系统的具体代码,供大家参考,具体内容如下 代码: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class HallManager : UnitySingleton<HallManager>

  • Unity实现简单换装系统

    关于Unity的换装,网上有几篇文章,我之前也简单的描述过实现.不过那个时候只是粗略的试验了下.今天好好梳理了下代码. 先上代码(自己的游戏项目,不是公司的,所以放心的贴上项目代码了,部分引用到其他的功能文件,但是核心代码无影响,这里主要看一下细节和思路) using UnityEngine; using System.Collections; using System.Collections.Generic; public enum AvatarPart { helmet, chest, sh

  • unity使用射线实现贴花系统

    本文实例为大家分享了Unity使用射线实现贴花系统,供大家参考,具体内容如下 老规矩,直接上代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; /// <summary> /// 贴花系统 /// </summary> public class Applique_ZH: MonoBehaviour { [H

  • Unity3D实战之答题系统的实现

    目录 一.前言 三.实现 1.界面搭建 2.读取文档 3.加载题目 4.按钮功能 5.题目对错判断 四.后言 一.前言 这是本专栏系列的第一篇,答题系统的开发. 这个答题系统,可以从文本文档中提取题目和分数,然后绑定到UI上,在答题的过程中,自动判断分数,自动判断正确率. 目的是实现一个可快速导入到项目中使用的小模块. 二.效果图及工程下载 题目文档  密码:47z2 源工程 三.实现 1.界面搭建 首先,新建工程,然后摆UI,如下图所示: 2.读取文档 题目存放在txt文档中,首先,我们看一下

  • Unity 制作一个分数统计系统

    项目中经常遇到分数统计的需求,例如我们执行了某项操作或做了某个题目,操作正确则计分,相反则不计分失去该项分数,为了应对需求需要一个分数统计系统. 首先定义一个分数信息的数据结构,使用Serializable特性使其可序列化: using System; using UnityEngine; namespace SK.Framework { /// <summary> /// 分数信息 /// </summary> [Serializable] public class ScoreI

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

    目录 一.作品展示 1.菜单界面 2.答题界面 3.学习模式界面 二.代码展示 1.菜单页面 2.退出按钮 3.学习界面代码 4.答题界面代码 三.相应资源 1.txt文件格式 2.如何修改题目内容 一.作品展示 1.菜单界面 (注:由于特殊原因,原图无法展示,请谅解) 2.答题界面 (注:由于特殊原因,原图无法展示,请谅解) 3.学习模式界面 (注:由于特殊原因,原图无法展示,请谅解) 二.代码展示 1.菜单页面 三个场景跳转按钮 学习党史按钮  using UnityEngine.Scene

  • 2分钟实现一个Vue实时直播系统的示例代码

    前言 我们在不敲代码的时候可能会去看游戏直播,那么是前台怎么实现的呢?下面我们来讲一下. 第一步,购买云直播服务 首先,你必须去阿里云或者腾讯云注册一个直播服务.也花不了几个钱,练手的话,几十块钱就够了. 这里我拿阿里云举例,购买完了,配置好推流域名跟播流域名,下面我们将进行地址生成.记住下面生成的地址,下面会用到. 第二步,下载本地推流工具 https://obsproject.com/ 第三步,设置OBS 在第一步中图片底部有推流地址,需要注意,分为两部分填入下方图所示. 在AppName字

  • C/C++实现个人收支系统的示例代码

    昨天朋友委托我做一个基于C++的课程小设计,题目如下: 设计一个简单的个人收支管理系统,至少包括如下功能: 1.逐笔输入个人收入或支出的明细,写入到文件保存,可不断进行输入和追加. 输入的明细数据包括:收支明细类别编码.发生日期.金额.备注. 1)为了简化用户的输入,类别编码由字母和数字构成:"a"表示收入."b"表示支 出,数字是大类下的编号.类别编码及类别名称的对应由自己定义.组织在程序中 并输出展示.比如 a1 表示收入类的生活费,b1 表示支出类的学习,编号

  • C#建立测试用例系统的示例代码

    引言 很多时候,需要对类中的方法进行一些测试,来判断是否能按要求输出预期的结果. C#提供了快速创建单元测试的方法,但单元测试不仅速度慢不方便,大量的单元测试还会拖慢项目的启动速度. 所以决定自己搞个方便的测试用例. 控制台调用 只需要简简单单的一句话 测试用例.注册并Print(EnumEx.Name); 结果画面 测试用例的实现 /// <summary> /// 提供测试用例的注册和运行功能,用来比对结果和预期值是否相同,向控制台输出结果. /// </summary> pu

  • Django框架实现在线考试系统的示例代码

    1.Django的简介 Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views),称为 MTV模式.它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 模型(Model),即数据存取层 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示. 视图(View),即业务逻辑层 存取模型及调取恰当模板的相

  • Unity实现桌面反弹的示例代码

    一:演示视频 二:代码实现 using UnityEngine; public class Ball : MonoBehaviour { private Rigidbody rigid; private Vector3 lastDir; public float speed = 30; private void Awake() { rigid = GetComponent<Rigidbody>(); rigid.velocity = new Vector3(1, 0, 1) * speed;

  • Unity常用音频操作类示例代码

    下面通过代码给大家介绍Unity常用音频操作类,具体代码如下所示: using UnityEngine; using System.Collections; public class AudioPlay : MonoBehaviour { public static AudioPlay Instance; public AudioClip[] FuChuAudio; public AudioSource FCAudio; // public AudioSource BabyAudio; // U

  • 使用SSM+Layui+Bootstrap实现汽车维保系统的示例代码

    本项目主要实现对汽车维修厂的信息化管理功能,主要包含三个角色:管理员,维修师傅,客户.实现的主要功能包含用户管理.配置管理.汽车管理.故障管理.供应商管理.配件管理.维修订单管理.统计信息.公告管理.个人信息管理.主要业务流程:用户在系统内发起汽车维修申请定单,管理员根据情况将定单分配给维修师傅,维修师傅接受任务后开始维修,并根据情况申请配件,处理完成后由管理员生成最终支付订单结算费用,客户进入系统进行费用支付,并可以查看自己相应的维修记录和费用信息等等. 技术架构: 后台开发:SSM框架 前端

  • Unity实现车型识别的示例代码

    接口介绍: 该请求用于检测一张车辆图片的具体车型.即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片的车辆品牌及型号. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是车型识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 车型识别 /// </summary> [Serializable] public class CarDetect { /

  • Unity实现动物识别的示例代码

    接口介绍: 识别近八千种动物,接口返回动物名称,并可获取识别结果对应的百科信息:还可使用EasyDL定制训练平台,定制识别分类标签.适用于拍照识图.幼教科普.图像内容分析等场景 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是动物识别接口返回数据参数详情: 定义数据结构: using System; /// <summary> /// 动物识别 /// </summary> [Serializable] p

随机推荐