利用unity和steamVR完成场景漫游(九) 利用本地txt文件编写答题模块②

接下来需要为不同面板添加不同的脚本

1.在总的canvas下添加脚本


这个只是用来存储题目和最终分数

2.在答题面板下添加


Question Buttons 用来控制显示什么按钮

Question 用来读取txt并处理相关参数

按钮交互:(点击按钮是传入函数中不同的参数)




3.脚本

  ①QuestionCounts.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class QuestionCounts : MonoBehaviour {
	public int counts = 0;
	public int ques_counts = 0;
	public int all_questions = 5;

	//每种类型有多少题目
	public int sel_counts = 20;
	public int fill_counts = 17;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}
    

 ②QuestionButtons.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class QuestionButtons : MonoBehaviour {
	public GameObject sel ;
	public GameObject tf;
	public InputField answer;
	// Use this for initialization
	void Start () {
		
	}
	void enableSel(){
		sel.SetActive (true);
	}
	void disableSel(){
		sel.SetActive (false);
	}
	void enableTF(){
		tf.SetActive (true);
	}
	void disableTF(){
		tf.SetActive (false);
	}
	// Update is called once per frame
	void Update () {
		
	}
}

③Questions.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;


//与按钮交互的题目
public class Questions : MonoBehaviour {

	public Text m_text;
	public QuestionCounts m_counts;
	private bool select = false;
	public string [] questions = new string[100];

	public QuestionButtons buttons;

	//分为填空题以及选择题
	private string url_select = "";
	private string url_fill = "";
	//对应第几道题目以及什么题目
	private int ques_count = 0;
	private int ques_line = 2;
	//已经显示题目
	private List<int> sel_list = new List<int>();
	private List<int> fill_list = new List<int>();

	//存储正确答案
	private string fill_answer;
	private int true_answer = -1;

	enum Type{
		Selection = 0,
		Fill = 1
	};
	private Type ques_type;
	// Use this for initialization
	void Start () {
		
		//加载打包项目下的txt文件
		string DPath = Application.dataPath;
		int num = DPath.LastIndexOf ("/");
		DPath = DPath.Substring (0, num);
		url_select = DPath + "/Assets/question/select_question.txt";
		url_fill = DPath + "/Assets/question/fill_question.txt";

		//对应不同的题目进行不同的初始化操作
	    ques_type = Random.Range (0, 10) > 5 ? Type.Fill : Type.Selection;
		switch (ques_type) {
		case Type.Selection:
			{
				ques_count = Random.Range (0, m_counts.sel_counts );
				sel_list.Add (ques_count);
				ques_line = 3;
				readText (url_select, ques_count, ques_line);
				buttons.sel.SetActive (true);
				buttons.tf.SetActive (false);
				break;
			}
		case Type.Fill:
			{
				ques_count = Random.Range (0, m_counts.fill_counts);
				fill_list.Add (ques_count);
				ques_line = 2;
				readText (url_fill, ques_count, ques_line);
				buttons.sel.SetActive (false);
				buttons.tf.SetActive (true);
				break;
			}
		}


	}

	string ReadFile(string FileName, int ques_count,int ques_line){
		//ques_count为第几道题目 从0开始
		//que_line 为题目的行数 包含答案行
		//返回的是题目

		System.Text.Encoding.GetEncoding ("gb2312");
		string[] strs = File.ReadAllLines (FileName, System.Text.Encoding.Default);
		if (ques_count == -1) {
			return "no data";
			}
		else{
			string question = "";
			for (int i = ques_count * ques_line; i < ((ques_count + 1) * ques_line - 1); i++){
				question += strs [i];
				question += "\n";
			}
			return question;
		}
	}

	string ReadAnswer(string Filename, int ques_count, int ques_line){
		//返回题目的答案哪一行的string 需要后续的处理
		System.Text.Encoding.GetEncoding ("gb2312");
		string[] strs = File.ReadAllLines (Filename, System.Text.Encoding.Default);
		if (ques_count <= -1) {
			return "no data";
		}
		else{
			string answer = "";
			answer = strs [(ques_count+1) * ques_line - 1];
			return answer;
		}
		
	}
	//确定正确答案的按钮
	void processAnswer(string Filename, int ques_count, int ques_line,Type ques_type){
		string answer = ReadAnswer (Filename, ques_count, ques_line);

		switch (ques_type) {
		case Type.Selection:
			{
				buttons.sel.SetActive (true);
				switch (answer){
				case "A":
					true_answer = 0;
					break;
				case "B":
					true_answer = 1;
					break;
				case "C":
					true_answer = 2;
					break;
				}
				break;
			}
		case Type.Fill:
			{
				switch (answer) {
				case "true":
					true_answer = 0;
					break;
				case "false":
					true_answer = 1;
					break;
				}
				break;
			}
		}

	
	}

	//最终显示在面板text上
	void readText(string url, int ques_count, int ques_line){
		string text = ReadFile(url, ques_count, ques_line);
		m_text.text = text.ToString();
		processAnswer (url, ques_count, ques_line,ques_type);
	}

	//每次答题后初始化与题目相关的参数
	void initQuestion(){
		ques_type = Random.Range (0, 10) > 5 ? Type.Fill : Type.Selection;
		switch (ques_type) {
		case Type.Selection:
			{
				ques_count = Random.Range (0, m_counts.sel_counts );
				while (sel_list.Contains (ques_count)) {
					ques_count = Random.Range (0, m_counts.sel_counts );
				}
				sel_list.Add (ques_count);
				ques_line = 3;
				readText (url_select, ques_count, ques_line);
				buttons.sel.SetActive (true);
				buttons.tf.SetActive (false);
				break;
			}
		case Type.Fill:
			{
				ques_count = Random.Range (0, m_counts.fill_counts);
				while (fill_list.Contains (ques_count)) {
					ques_count = Random.Range (0, m_counts.fill_counts);
				}
				fill_list.Add (ques_count);
				ques_line = 2;
				readText (url_fill, ques_count, ques_line);
				buttons.sel.SetActive (false);
				buttons.tf.SetActive (true);
				break;
			}
		}
	}

	//处理选择题的参数
	public void sel_addCounts(int i){
		//选择题中按钮传入0,1,3,4
		//填空题传入string
		if( true_answer == i){
			m_counts.counts += 1;
		}
		m_counts.ques_counts += 1;
		if (m_counts.ques_counts < m_counts.all_questions) {
			initQuestion ();
		} else {
			buttons.sel.SetActive (false);
			buttons.tf.SetActive (false);
			string text = "your counts is :" + m_counts.counts.ToString ();
			m_text.text = text;
		}
	}
	//处理填空题的参数
	public void fill_addCounts(int i){
		//string answer = buttons.answer.text.ToString();

		if (i==true_answer){
			m_counts.counts += 1;
		}
		m_counts.ques_counts += 1;
		//将inputField 清空
		//buttons.answer.text="";
		if (m_counts.ques_counts < m_counts.all_questions) {
			initQuestion ();
		} else {
			buttons.sel.SetActive (false);
			buttons.tf.SetActive (false);
			string text = "your counts is :" + m_counts.counts.ToString ();
			m_text.text = text;
		}
	}
	// Update is called once per frame
	void Update () {
		
	}
}



猜你喜欢

转载自blog.csdn.net/carotadream/article/details/80301336