예제 #1
0
        public ActionResult Index(GameSettings settings)
        {
            List <Country>  countries = GetSelectedCountries(settings);
            string          language  = HttpContext.Session.GetString("Language")?.ToUpper();
            QuestionBuilder questionBuilder;

            switch (settings.GameMode)
            {
            case GameMode.FlagByCountry:
                questionBuilder = new FlagByCountryQuestionBuilder(settings, db, language); break;

            case GameMode.CountryByFlag:
                questionBuilder = new CountryByFlagQuestionBuilder(settings, db, language); break;

            case GameMode.CapitalByCountry:
                questionBuilder = new CapitalByCountryQuestionBuilder(settings, db, language); break;

            default:
                return(RedirectToAction(nameof(MenuController.Index), MenuController.Nameof));
            }

            QuestionsList questionsList = new QuestionsList(countries, questionBuilder);

            HttpContext.Session.SetObjectAsJson("Questions", questionsList);
            return(View(nameof(Quiz), GetQuestionViewModel(questionsList)));
        }
예제 #2
0
        public ActionResult Quiz(QuestionsList questions, GameSettings settings, string answer, int questionIndex, string lang)
        {
            // Check answer given by player and go to next question
            if (questions.TestAnswer(answer) == false)
            {
                // If answer is wrong => set mistake message
                // No answer = timeout
                if (answer is null)
                {
                    TempData["Mistake"] = "Timeout";
                }
                // Answer was wrong
                else
                {
                    string mistakeMessage = null;

                    switch (settings.GameMode)
                    {
                    case GameMode.FlagByCountry:
                        var c = db.Countries.FirstOrDefault(x => x.Id == int.Parse(answer));
                        mistakeMessage = c.Localizations.Where(x => x.Language == lang.ToUpper()).FirstOrDefault()?.Name ?? c.Name; break;

                    case GameMode.CountryByFlag:
                    case GameMode.CapitalByCountry:
                        mistakeMessage = questions.CorrectAnswer; break;
                    }
                    TempData["Mistake"] = mistakeMessage;
                }
            }

            // Advance to the next question and save updated questions list to the session state
            string          language = HttpContext.Session.GetString("Language")?.ToUpper();
            QuestionBuilder questionBuilder;

            switch (settings.GameMode)
            {
            case GameMode.FlagByCountry:
                questionBuilder = new FlagByCountryQuestionBuilder(settings, db, language); break;

            case GameMode.CountryByFlag:
                questionBuilder = new CountryByFlagQuestionBuilder(settings, db, language); break;

            case GameMode.CapitalByCountry:
                questionBuilder = new CapitalByCountryQuestionBuilder(settings, db, language); break;

            default:
                throw new Exception($"What is this \"{settings.GameMode}\" game mode?");
            }
            questions.AdvanceToNextQuestion(questionBuilder);
            HttpContext.Session.SetObjectAsJson("Questions", questions);

            // Return view
            // If this is not Ajax request => return whole page
            bool isAjaxRequest = Request.Headers["x-requested-with"] == "XMLHttpRequest";

            if (!isAjaxRequest)
            {
                return(View(GetQuestionViewModel(questions)));
            }
            // If Ajax => return only partial view with next question
            else
            {
                string partialViewName = null;
                switch (settings.GameMode)
                {
                case GameMode.FlagByCountry:
                    partialViewName = "PartialFlagByCountry"; break;

                case GameMode.CountryByFlag:
                    partialViewName = "PartialCountryByFlag"; break;

                case GameMode.CapitalByCountry:
                    partialViewName = "PartialCapitalByCountry"; break;
                }

                return(PartialView(partialViewName, GetQuestionViewModel(questions)));
            }
        }