Domanda Quiz con Unity 3D

Stato
Discussione chiusa ad ulteriori risposte.

Zygia

Utente Bronze
18 Settembre 2017
5
1
0
26
Ciao a tutti sono una studentessa di ingegneria informatica, sto lavorando alla mia tesi di laurea e ho deciso di creare un quiz con Unity 3D. Ho riscontrato delle difficoltà perché la mia intenzione è quella di poter creare un app in cui l'utente può caricare le domande a seconda della materia sulla quale vuole fare il quiz, che sia da un xml o un url o altro. L'applicazione dovrebbe prenderle e metterle nel quiz. Ho già impostato il progetto, con la grafica e gli script, ma non riesco ad implementare questa cosa. Avete qualche suggerimento? Grazie.

Ps. Se è necessario posso farvi leggere il codice che ho già scritto.
 
Grazie del consiglio. Diciamo che non so come inserirlo nel mio script. Cioè vorrei che la mia applicazione prenda automaticamente le domande dal xml. Io ho creato uno script nel quale le domande le inserisco io nel codice stesso e non so come modificarlo per farlo leggere da un xml o comunque da un altro tipo di file. Puoi consigliarmi come modificare il mio codice? E' questo:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;


public class QuizScript : MonoBehaviour {
   


    int range;
    int oldRange;
    int score;
    float time = 766;

    public Text Question;
    public Text Answ1;
    public Text Answ2;
    public Text Answ3;

    public Text FinalScore;
    public Text ScoreText;

    public Texture sfondo;

    public Canvas GameCan;
    public Canvas LoseCan;
    public Canvas WinCan;

    public Image TimeBar;

    public Button Menu;
    public Button Button_1;
    public Button Button_2;
    public Button Button_3;

    bool risp1 = false;
    bool risp2 = false;
    bool risp3 = false;

    bool timego = true;
    bool timeLose = true;

    // Use this for initialization
    void Start () {
       
        SelectingRange ();

    }
   
    // Update is called once per frame
    void Update () {
       
        if (time >= 0 && timego) {
            time = time - 1;
            TimeBar.rectTransform.sizeDelta = new Vector2 (time - 1, 16);
        }
        else if (time < 0 && timeLose) {
            timeLose = false;
            Invoke ("HaiPerso", 2);
        }

   
       
    }

    void SelectingRange(){
       
        time = 766;
        timego = true;

        Button_1.interactable = true;
        Button_2.interactable = true;
        Button_3.interactable = true;
        Menu.interactable = true;

        Button_1.GetComponent <Image> ().color = Color.blue;
        Button_2.GetComponent <Image> ().color = Color.blue;
        Button_3.GetComponent <Image> ().color = Color.blue;
        Menu.GetComponent<Image> ().color = Color.red;
   

        oldRange = range;
        range = Random.Range (1, 10);

        if (range == oldRange) {
            SelectingRange ();
        }
        SpawnQuestion ();

    }

    void SpawnQuestion(){
        if (range == 1) {
            Question.text = "Cos'è una RAM?";
            Answ1.text = "Un tipo di software";
            Answ2.text = "Un sistema operativo";
            Answ3.text = "Una memoria ad accesso casuale";
            risp3 = true;
        }

        if (range == 2) {
            Question.text = "OS X è un sistema operativo?";
            Answ1.text = "Windows";
            Answ2.text = "Mac";
            Answ3.text = "Linux";
            risp2 = true;
        }


        if (range == 3) {
            Question.text = "Blender è?";
            Answ1.text = "Una marca di computer";
            Answ2.text = "Un software di modellazione 3D";
            Answ3.text = "Un sistema operativo";
            risp2 = true;
        }

        if (range == 4) {
            Question.text = "Cos'è un 'trojan horse'?";
            Answ1.text = "Uno spyware";
            Answ2.text = "Un programma che nasconde il suo vero scopo";
            Answ3.text = "Un worm";
            risp2 = true;
        }

        if (range == 5) {
            Question.text = "A cosa serve un html?";
            Answ1.text = "Per navigare su internet";
            Answ2.text = "Per il trasferimento di pagine web";
            Answ3.text = "Descrive documenti ipertestuali nel web";
            risp3 = true;
        }

        if (range == 6) {
            Question.text = "Cos'è un link?";
            Answ1.text = "Un collegamento ipertestuale";
            Answ2.text = "L'altro nome di frontpage";
            Answ3.text = "Il protocollo TCP/IP";
            risp1 = true;
        }

        if (range == 7) {
            Question.text = "Un indirizzo email esatto è?";
            Answ1.text = "[email protected]";
            Answ2.text = "[email protected]";
            Answ3.text = "Nessuno dei precedenti";
            risp1 = true;
        }

        if (range == 8) {
            Question.text = "Cos'è internet?";
            Answ1.text = "Una rete di calcolatori";
            Answ2.text = "Un programma per ricevere le email";
            Answ3.text = "Il precursore di Arpanet";
            risp1 = true;
        }

        if (range == 9) {
            Question.text = "Con la sigla wwww si indica?";
            Answ1.text = "Worm Wind Web";
            Answ2.text = "World Wide Web";
            Answ3.text = "Work Wilds Web";
            risp2 = true;
        }

        if (range == 10) {
            Question.text = "Cos'è un hardware?";
            Answ1.text = "L'unità disco rigido";
            Answ2.text = "Un programma complesso";
            Answ3.text = "La parte fisica di un computer";
            risp3 = true;
        }
    }

    public void VaiMenu(){
        GameCan.gameObject.SetActive (false);
        SceneManager.LoadScene (0);
    }

    public void ProssimoLivello(){
        GameCan.gameObject.SetActive (false);
        SceneManager.LoadScene (2);
    }


    public void Button1(){

        timego = false;
        DisattivaButton ();

        if (risp1 == true) {
            Button_1.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp1 = false;
            AddScore ();
        }
        else {
            Button_1.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }

    public void Button2(){
        timego = false;
        DisattivaButton ();

        if (risp2 == true) {
            Button_2.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp2 = false;
            AddScore ();
        }
        else {
            Button_2.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }

    public void Button3(){
        timego = false;
        DisattivaButton ();

        if (risp3 == true) {
            Button_3.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp3 = false;
            AddScore ();
        }
        else {
            Button_3.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }



    public void Ricomincia(){
        SceneManager.LoadScene (SceneManager.GetActiveScene().name);
    }


    void AddScore(){
        score = score + 10;
        ScoreText.text = "Score: " + score;
        if (score == 100) {
            Invoke ("HaiVinto", 1);
        }
    }


    void HaiPerso(){
        GameCan.gameObject.SetActive (false);
        LoseCan.gameObject.SetActive (true);
        FinalScore.text = "HAI OTTENUTO SOLO: " + score+ " PUNTI";
       
    }

    void HaiVinto(){
        GameCan.gameObject.SetActive (false);
        WinCan.gameObject.SetActive (true);


    }


    void DisattivaButton(){

        Button_1.interactable = false;
        Button_2.interactable = false;
        Button_3.interactable = false;
    }


}
 
Grazie del consiglio. Diciamo che non so come inserirlo nel mio script. Cioè vorrei che la mia applicazione prenda automaticamente le domande dal xml. Io ho creato uno script nel quale le domande le inserisco io nel codice stesso e non so come modificarlo per farlo leggere da un xml o comunque da un altro tipo di file. Puoi consigliarmi come modificare il mio codice? E' questo:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;


public class QuizScript : MonoBehaviour {
  


    int range;
    int oldRange;
    int score;
    float time = 766;

    public Text Question;
    public Text Answ1;
    public Text Answ2;
    public Text Answ3;

    public Text FinalScore;
    public Text ScoreText;

    public Texture sfondo;

    public Canvas GameCan;
    public Canvas LoseCan;
    public Canvas WinCan;

    public Image TimeBar;

    public Button Menu;
    public Button Button_1;
    public Button Button_2;
    public Button Button_3;

    bool risp1 = false;
    bool risp2 = false;
    bool risp3 = false;

    bool timego = true;
    bool timeLose = true;

    // Use this for initialization
    void Start () {
      
        SelectingRange ();

    }
  
    // Update is called once per frame
    void Update () {
      
        if (time >= 0 && timego) {
            time = time - 1;
            TimeBar.rectTransform.sizeDelta = new Vector2 (time - 1, 16);
        }
        else if (time < 0 && timeLose) {
            timeLose = false;
            Invoke ("HaiPerso", 2);
        }

  
      
    }

    void SelectingRange(){
      
        time = 766;
        timego = true;

        Button_1.interactable = true;
        Button_2.interactable = true;
        Button_3.interactable = true;
        Menu.interactable = true;

        Button_1.GetComponent <Image> ().color = Color.blue;
        Button_2.GetComponent <Image> ().color = Color.blue;
        Button_3.GetComponent <Image> ().color = Color.blue;
        Menu.GetComponent<Image> ().color = Color.red;
  

        oldRange = range;
        range = Random.Range (1, 10);

        if (range == oldRange) {
            SelectingRange ();
        }
        SpawnQuestion ();

    }

    void SpawnQuestion(){
        if (range == 1) {
            Question.text = "Cos'è una RAM?";
            Answ1.text = "Un tipo di software";
            Answ2.text = "Un sistema operativo";
            Answ3.text = "Una memoria ad accesso casuale";
            risp3 = true;
        }

        if (range == 2) {
            Question.text = "OS X è un sistema operativo?";
            Answ1.text = "Windows";
            Answ2.text = "Mac";
            Answ3.text = "Linux";
            risp2 = true;
        }


        if (range == 3) {
            Question.text = "Blender è?";
            Answ1.text = "Una marca di computer";
            Answ2.text = "Un software di modellazione 3D";
            Answ3.text = "Un sistema operativo";
            risp2 = true;
        }

        if (range == 4) {
            Question.text = "Cos'è un 'trojan horse'?";
            Answ1.text = "Uno spyware";
            Answ2.text = "Un programma che nasconde il suo vero scopo";
            Answ3.text = "Un worm";
            risp2 = true;
        }

        if (range == 5) {
            Question.text = "A cosa serve un html?";
            Answ1.text = "Per navigare su internet";
            Answ2.text = "Per il trasferimento di pagine web";
            Answ3.text = "Descrive documenti ipertestuali nel web";
            risp3 = true;
        }

        if (range == 6) {
            Question.text = "Cos'è un link?";
            Answ1.text = "Un collegamento ipertestuale";
            Answ2.text = "L'altro nome di frontpage";
            Answ3.text = "Il protocollo TCP/IP";
            risp1 = true;
        }

        if (range == 7) {
            Question.text = "Un indirizzo email esatto è?";
            Answ1.text = "[email protected]";
            Answ2.text = "[email protected]";
            Answ3.text = "Nessuno dei precedenti";
            risp1 = true;
        }

        if (range == 8) {
            Question.text = "Cos'è internet?";
            Answ1.text = "Una rete di calcolatori";
            Answ2.text = "Un programma per ricevere le email";
            Answ3.text = "Il precursore di Arpanet";
            risp1 = true;
        }

        if (range == 9) {
            Question.text = "Con la sigla wwww si indica?";
            Answ1.text = "Worm Wind Web";
            Answ2.text = "World Wide Web";
            Answ3.text = "Work Wilds Web";
            risp2 = true;
        }

        if (range == 10) {
            Question.text = "Cos'è un hardware?";
            Answ1.text = "L'unità disco rigido";
            Answ2.text = "Un programma complesso";
            Answ3.text = "La parte fisica di un computer";
            risp3 = true;
        }
    }

    public void VaiMenu(){
        GameCan.gameObject.SetActive (false);
        SceneManager.LoadScene (0);
    }

    public void ProssimoLivello(){
        GameCan.gameObject.SetActive (false);
        SceneManager.LoadScene (2);
    }


    public void Button1(){

        timego = false;
        DisattivaButton ();

        if (risp1 == true) {
            Button_1.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp1 = false;
            AddScore ();
        }
        else {
            Button_1.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }

    public void Button2(){
        timego = false;
        DisattivaButton ();

        if (risp2 == true) {
            Button_2.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp2 = false;
            AddScore ();
        }
        else {
            Button_2.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }

    public void Button3(){
        timego = false;
        DisattivaButton ();

        if (risp3 == true) {
            Button_3.GetComponent <Image> ().color = Color.green;
            Invoke ("SelectingRange", 2);
            risp3 = false;
            AddScore ();
        }
        else {
            Button_3.GetComponent <Image> ().color = Color.red;
            Invoke ("HaiPerso", 2);
        }
    }



    public void Ricomincia(){
        SceneManager.LoadScene (SceneManager.GetActiveScene().name);
    }


    void AddScore(){
        score = score + 10;
        ScoreText.text = "Score: " + score;
        if (score == 100) {
            Invoke ("HaiVinto", 1);
        }
    }


    void HaiPerso(){
        GameCan.gameObject.SetActive (false);
        LoseCan.gameObject.SetActive (true);
        FinalScore.text = "HAI OTTENUTO SOLO: " + score+ " PUNTI";
      
    }

    void HaiVinto(){
        GameCan.gameObject.SetActive (false);
        WinCan.gameObject.SetActive (true);


    }


    void DisattivaButton(){

        Button_1.interactable = false;
        Button_2.interactable = false;
        Button_3.interactable = false;
    }


}




Potresti fare una cosa del genere, poi se qualcuno ha idee migliori ben venga:
Quando devi scrivere le domande, carichi il file xml delle domande, e per ognuna scrivi le domande a schermo (in base al range puoi saltare i tag nel file xml). Oppure puoi caricarlo all'inizio, mettere le domande in delle variabili e richiamarle al momento giusto.
 
  • Mi piace
Reazioni: Zygia
Potresti fare una cosa del genere, poi se qualcuno ha idee migliori ben venga:
Quando devi scrivere le domande, carichi il file xml delle domande, e per ognuna scrivi le domande a schermo (in base al range puoi saltare i tag nel file xml). Oppure puoi caricarlo all'inizio, mettere le domande in delle variabili e richiamarle al momento giusto.

Potresti farmi un esempio di codice? Non sono molto brava con C#. :(
Inoltre so che si utilizza anche il tipo di file json.
 
Inoltre so che si utilizza anche il tipo di file json
Json viene utilizzato per lo scambio di informazioni ad esempio in client server.
Forse non ho capito come vuoi strutturare la tua applicazione, avevo capito che era una cosa locale, mi sbaglio?
Oppure ogni client carica le domande da un server?
 
Json viene utilizzato per lo scambio di informazioni ad esempio in client server.
Forse non ho capito come vuoi strutturare la tua applicazione, avevo capito che era una cosa locale, mi sbaglio?
Oppure ogni client carica le domande da un server?

Ho scritto il codice nella risposta precedente. Se vuoi dargli un'occhiata.
 
Stato
Discussione chiusa ad ulteriori risposte.