2016-10-03 5 views
0

Also habe ich 10 Fragen, so dass, wenn das Spiel beginnt, beispielsweise die Ausgangsfrage ist „4 von 10“ dann, wenn die nächsten Frage zu zufällig ist „10 von 10“ Das Spiel endet. was ich will, ist zufällig die 10 Fragen:Unity 3D-Quiz Spiel zufällige Fragen

private int idMode; 
public Text question; 
public Text answerA; 
public Text answerB; 
public Text answerC; 
public Text answerD; 
public Text infoAnswer; 
public Text stat; 
public string[] questions;   
public string[] alternativeA; 
public string[] alternativeB; 
public string[] alternativeC; 
public string[] alternativeD; 
public string[] correct; 
private int idQuestion; 
private float points; 
private float fact; 
private float average; 
private int results; 

void Start() { 
    idMode = PlayerPrefs.GetInt ("idMode"); 
    idQuestion = 0; 
    fact = questions.Length; 
    question.text = questions [idQuestion]; 
    answerA.text = alternativeA [idQuestion]; 
    answerB.text = alternativeB [idQuestion]; 
    answerC.text = alternativeC [idQuestion]; 
    answerD.text = alternativeD [idQuestion]; 
    infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
} 
public void answer(string alternative) 
{ 
    if (alternative == "A") { 

     if (alternativeA [idQuestion] == correct [idQuestion]) { 

      points += 1; 

     } else { 

     } 
    } 
    if (alternative == "B") { 

     if (alternativeB [idQuestion] == correct [idQuestion]) { 

      points += 1; 
     } else { 
    } 

} 
    if (alternative == "C") { 
     if (alternativeC [idQuestion] == correct [idQuestion]) { 
      points += 1; 
     } else { 
    } 
} 

    if (alternative == "D") { 
     if (alternativeD [idQuestion] == correct [idQuestion]) { 
      points += 1; 
     } else { 
    } 
} 
    nextQuestion(); 
} 
void nextQuestion() 
{ 
    idQuestion += Random.Range(0,10); 
    if(idQuestion <= (fact-1)) 
    { 
     question.text = questions [idQuestion]; 
     answerA.text = alternativeA [idQuestion]; 
     answerB.text = alternativeB [idQuestion]; 
     answerC.text = alternativeC [idQuestion]; 
     answerD.text = alternativeD [idQuestion]; 
     stat.text = " Correct: " + points.ToString() + ""; 
     infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
    } 
    else 
    { 
     average = 10 * (points/fact); 
     results = Mathf.RoundToInt (average); 
     if (results > PlayerPrefs.GetInt ("results" + idMode.ToString())) { 
      PlayerPrefs.SetInt ("results" + idMode.ToString(), results); 
      PlayerPrefs.SetInt ("points" + idMode.ToString(), (int)points); 
     } 
     PlayerPrefs.SetInt ("resultsTemp" + idMode.ToString(), results); 
     PlayerPrefs.SetInt ("pointsTemp" + idMode.ToString(), (int)points); 
     Application.LoadLevel("results"); 
    } 
} 
} 

Antwort

2

Ihre Datenstruktur ändern, eine Klasse machen, die die Frage und die möglichen Antworten darstellt, so dass Sie ein Array statt 6.

Sobald Sie das tun Bevor Sie Fragen stellen shuffle the list dann gehen Sie einfach durch die Liste in der neuen randomisierten Reihenfolge.

[Serializeable] 
public class Question 
{ 
    public string Text; 
    public string A; 
    public string B; 
    public string C; 
    public string D; 
    public string CorrectChoice; //Holds "A", "B", "C", or "D" 
} 

public static class RandomExtensions 
{ 
    public static void Shuffle<T> (this T[] array) 
    { 
     int n = array.Length; 
     while (n > 1) 
     { 
      int k = Random.Range(0, n--); 
      T temp = array[n]; 
      array[n] = array[k]; 
      array[k] = temp; 
     } 
    } 
} 

Dann Code ändern zu

private int idMode; 
public Text question; 
public Text answerA; 
public Text answerB; 
public Text answerC; 
public Text answerD; 
public Text infoAnswer; 
public Text stat; 
public Question[] questions; 
private int idQuestion; 
private float points; 
private float fact; 
private float average; 
private int results; 

void Start() { 
    idMode = PlayerPrefs.GetInt ("idMode"); 
    idQuestion = 0; 
    fact = questions.Length; 
    questions.Shuffle(); 
    question.text = questions[idQuestion].Text; 
    answerA.text = questions[idQuestion].A; 
    answerB.text = questions[idQuestion].B; 
    answerC.text = questions[idQuestion].C; 
    answerD.text = questions[idQuestion].D; 
    infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
} 
public void answer(string alternative) 
{ 
    if (alternative == questions[idQuestion].CorrectChoice) 
    { 
     points += 1; 
    } 

    nextQuestion(); 
} 
void nextQuestion() 
{ 
    idQuestion += Random.Range(0,10); 
    if(idQuestion <= (fact-1)) 
    { 
     question.text = questions[idQuestion].Text; 
     answerA.text = questions[idQuestion].A; 
     answerB.text = questions[idQuestion].B; 
     answerC.text = questions[idQuestion].C; 
     answerD.text = questions[idQuestion].D; 
     stat.text = " Correct: " + points.ToString() + ""; 
     infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
    } 
    else 
    { 
     average = 10 * (points/fact); 
     results = Mathf.RoundToInt (average); 
     if (results > PlayerPrefs.GetInt ("results" + idMode.ToString())) { 
      PlayerPrefs.SetInt ("results" + idMode.ToString(), results); 
      PlayerPrefs.SetInt ("points" + idMode.ToString(), (int)points); 
     } 
     PlayerPrefs.SetInt ("resultsTemp" + idMode.ToString(), results); 
     PlayerPrefs.SetInt ("pointsTemp" + idMode.ToString(), (int)points); 
     Application.LoadLevel("results"); 
    } 
} 

Wenn Sie das wirklich die andere Option ist nicht möchten, dass Ihre Datenstruktur ändern, die ich über das Erstellen einer Abbildungs ​​Array in den Kommentaren erwähnt.

private int idMode; 
public Text question; 
public Text answerA; 
public Text answerB; 
public Text answerC; 
public Text answerD; 
public Text infoAnswer; 
public Text stat; 
public string[] questions;   
public string[] alternativeA; 
public string[] alternativeB; 
public string[] alternativeC; 
public string[] alternativeD; 
public string[] correct; 
private int idQuestion; 
private float points; 
private float fact; 
private float average; 
private int results; 
private int[] questionMapper; 

void Start() { 
    idMode = PlayerPrefs.GetInt ("idMode"); 
    idQuestion = 0; 
    fact = questions.Length; 
    questionMapper = new int[questions.Count]; 
    for(int i = 0; i < questionMapper.Count; i++) 
    { 
     questionMapper[i] = i; 
    } 
    questionMapper.Shuffle(); 
    question.text = questions [questionMapper[idQuestion]]; 
    answerA.text = alternativeA [questionMapper[idQuestion]]; 
    answerB.text = alternativeB [questionMapper[idQuestion]]; 
    answerC.text = alternativeC [questionMapper[idQuestion]]; 
    answerD.text = alternativeD [questionMapper[idQuestion]]; 
    infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
} 

//... 

void nextQuestion() 
{ 
    idQuestion += Random.Range(0,10); 
    if(idQuestion <= (fact-1)) 
    { 
     question.text = questions [questionMapper[idQuestion]]; 
     answerA.text = alternativeA [questionMapper[idQuestion]]; 
     answerB.text = alternativeB [questionMapper[idQuestion]]; 
     answerC.text = alternativeC [questionMapper[idQuestion]]; 
     answerD.text = alternativeD [questionMapper[idQuestion]]; 
     stat.text = " Correct: " + points.ToString() + ""; 
     infoAnswer.text = (idQuestion + 1).ToString() + " of " + fact.ToString() + ""; 
    } 
    else 
    { 
     average = 10 * (points/fact); 
     results = Mathf.RoundToInt (average); 
     if (results > PlayerPrefs.GetInt ("results" + idMode.ToString())) { 
      PlayerPrefs.SetInt ("results" + idMode.ToString(), results); 
      PlayerPrefs.SetInt ("points" + idMode.ToString(), (int)points); 
     } 
     PlayerPrefs.SetInt ("resultsTemp" + idMode.ToString(), results); 
     PlayerPrefs.SetInt ("pointsTemp" + idMode.ToString(), (int)points); 
     Application.LoadLevel("results"); 
    } 
} 
+0

danke aber muss ich wirklich meine Datenstruktur ändern? keine anderen Möglichkeiten? – Magillanica

+1

Es gibt andere Möglichkeiten, aber die einfachste Möglichkeit wäre, die Datenstruktur zu ändern. Eine andere Möglichkeit ist ein Array von '' '' '' '' '' '' '' '' '' '' '' ''' 'questionMapper' 'zu erstellen und diese dann zu mischen. Dann machst du so etwas wie 'questions [questionMapper [idQuestion]]'. –

+0

Sie sollten die neue Datenstruktur zwar versuchen, aber Sie sollten den Text trotzdem in den Editor einfügen können. Siehe auch mein neustes Update, ich habe vergessen, 'public' auf die Mitglieder in der 'Question'-Klasse zu setzen. –

Verwandte Themen