Esempio n. 1
0
    /// <summary>
    /// Gets the current Speed touch question.
    /// </summary>
    /// <returns>The UIQ uestion.</returns>
    /// <param name="questionIndex">Question index.</param>
    /// <param name="answerButtons">Answer buttons.</param>
    public BaseQuestion GetUIQuestion(int questionIndex, int answerButtons = 4)
    {
        SpeedTouch questionType = SpeedTouchList[questionIndex];

        AnswerInfos.Clear();

        CurrentColorID = AnswerID.None;

        int colors = EnumUtil.GetValues <ColorEnum>().Count;

        //Initializing a Question
        BaseQuestion bq = new BaseQuestion();

        bq.IgnoreClickCount       = true;
        bq.IgnoreClickTime        = true;
        bq.HasSequenceAnswer      = false;
        bq.HasBoolValue           = false;
        bq.HasTimerValue          = true;
        bq.HasSequentialQuestions = true;
        bq.Pattern         = QPattern.SpeedTouch;
        bq.QuestionType    = QuestionType.Base;
        bq.TimeForQuestion = 0;
        bq.Options         = new List <AnswerSpriteHolder>();
        for (int i = 0; i < answerButtons; i++)
        {
            AnswerSpriteHolder answer = new AnswerSpriteHolder();
            bq.Options.Add(answer);
        }
        //

        //Getting a random color for the question
        int randomColorIndex = (int)Random.Range(0, colors);

        //Shuffle
        FisherYatesShuffle shuffle = new FisherYatesShuffle(colors);

        shuffle.ShuffleList();
        List <int> colorIndex = shuffle.ShuffledList;

        //Setting up button info for later assignment and setting up current answerID Color for the current question
        for (int i = 0; i < answerButtons; i++)
        {
            SpeedTouchAnswerInfo answerInfo = GetNewAnswerButton();
            SetAnswer(ref answerInfo, (ColorEnum)colorIndex[i], (ColorEnum)randomColorIndex);
            AnswerInfos.Add(answerInfo);
        }

        //Assignment to answer buttons
        SetAnswerOption(ref bq, AnswerInfos, (ColorEnum)randomColorIndex, questionType);

        return(bq);
    }
Esempio n. 2
0
    /// <summary>
    /// Main method to set the question property and answer button property for each answer button
    /// </summary>
    /// <param name="question">Question.</param>
    /// <param name="answer">Answer.</param>
    /// <param name="randomColor">Random color.</param>
    /// <param name="questionType">Question type.</param>
    private void SetAnswerOption(ref BaseQuestion question, List <SpeedTouchAnswerInfo> answer, ColorEnum randomColor, SpeedTouch questionType)
    {
        ColorEnum color = GetColorBasedOnAnswerOrSpriteID(IDType.AnswerID, CurrentColorID);

        switch (questionType)
        {
        case SpeedTouch.OneX:
            question.Question = "Touch the " + color.ToString() + " balloon.";

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? true : false;
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
            }
            break;

        case SpeedTouch.ExceptX:
            question.Question = "Touch any balloon except the " + color.ToString() + " balloon.";
            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? false : true;
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
            }
            break;

        case SpeedTouch.AnyX:
            question.Question = "Touch any " + color.ToString() + " balloon.";
            int secondColorPos = -1;
            int firstColorPos  = -1;

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].ID     = answer[i].AnswerID;
                question.Options[i].Sprite = answer[i].SpriteID;
                Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString());

                if (answer[i].AnswerID == CurrentColorID)
                {
                    firstColorPos = i;
                }

                question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? true : false;
            }

            secondColorPos = Random.Range(0, question.Options.Count);
            while (secondColorPos == firstColorPos)
            {
                secondColorPos = Random.Range(0, question.Options.Count);
            }

            question.Options[secondColorPos].ID        = CurrentColorID;
            question.Options[secondColorPos].Sprite    = GetSpriteIDBasedOnAnswerID(CurrentColorID);
            question.Options[secondColorPos].IsCorrect = true;

            break;

        case SpeedTouch.LeftX:
            question.Question = "Touch the balloon on the left of the " + color.ToString() + " balloon.";
            int randomLeftx = Random.Range(0, 10);

            randomLeftx = (randomLeftx % 2 == 0) ? 1 : 3;
            Debug.Log("randomLeftx = " + randomLeftx);
            CheckAndRearrangeAnswers(answer, randomLeftx);

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
                question.Options[i].IsCorrect = (i + 1 == randomLeftx) ? true : false;
            }
            break;

        case SpeedTouch.RightX:
            question.Question = "Touch the balloon on the right of the " + color.ToString() + " balloon.";
            int randomRightX = Random.Range(0, 2);

            randomRightX = (randomRightX == 1) ? 0 : 2;
            CheckAndRearrangeAnswers(answer, randomRightX);

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
                question.Options[i].IsCorrect = (i - 1 == randomRightX) ? true : false;
            }
            break;

        case SpeedTouch.AboveX:
            question.Question = "Touch the balloon above the " + color.ToString() + " balloon.";
            int randomAboveX = Random.Range(0, 2);

            randomAboveX = (randomAboveX == 1) ? 2 : 3;
            CheckAndRearrangeAnswers(answer, randomAboveX);

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
                question.Options[i].IsCorrect = (i + 2 == randomAboveX) ? true : false;
                Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString());
            }
            break;

        case SpeedTouch.BelowX:
            question.Question = "Touch the balloon below the " + color.ToString() + " balloon.";
            int randomBelowX = Random.Range(0, 2);

            randomBelowX = (randomBelowX == 1) ? 0 : 1;
            CheckAndRearrangeAnswers(answer, randomBelowX);

            for (int i = 0; i < question.Options.Count; i++)
            {
                question.Options[i].ID        = answer[i].AnswerID;
                question.Options[i].Sprite    = answer[i].SpriteID;
                question.Options[i].IsCorrect = (i - 2 == randomBelowX) ? true : false;
                Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString());
            }
            break;
        }
    }