示例#1
0
        public IActionResult Play(string id)
        {
            Guid   playerId       = Guid.Empty;
            string playerIdString = HttpContext.Request.Cookies["drx1e"];

            if (playerIdString == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            try { Guid.TryParse(playerIdString, out playerId); }
            catch (FormatException) { return(RedirectToAction(nameof(Index))); }

            Quiz quizplayers = _quizService.GetQuizWithPlayersByLink(id);

            QuizPlayer player = quizplayers.QuizPlayers.FirstOrDefault(qp => qp.PlayerId.Equals(playerId));

            if (player == null || player.HasPlayed)
            {
                return(RedirectToAction(nameof(Room), new { id = id }));
            }

            Quiz quiz = _quizService.GetQuizWithQuestions(id);

            PlayQuizVM playQuizVM = new PlayQuizVM
            {
                Questions  = quiz.Questions.ToArray(),
                PlayerName = player.Player.Name
            };

            return(View(playQuizVM));
        }
示例#2
0
        public async Task <IActionResult> Play(string id, PlayQuizVM playQuizVM)
        {
            Guid playerId       = Guid.Empty;
            int  correctAnswers = 0;

            string playerIdString = HttpContext.Request.Cookies["drx1e"];

            if (playerIdString == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            try { Guid.TryParse(playerIdString, out playerId); }
            catch (FormatException) { return(RedirectToAction(nameof(Index))); }

            Quiz quiz = _quizService.GetQuizWithQuestions(id);

            Question[] questions = quiz.Questions.ToArray();


            playQuizVM.Questions = quiz.Questions.ToArray();

            string answers = string.Empty;

            for (int i = 0; i < questions.Length; i++)
            {
                Question question = questions[i];

                string optionIndexString = $"selectedAnswer[{i}]";

                string option = Request.Form[optionIndexString];

                if (option != null)
                {
                    answers += option;
                    // if (_questionService.IsRightAnswer(question, option)) correctAnswers++;
                    if (question.CorrectOption.Equals(option))
                    {
                        correctAnswers++;
                    }
                }
                else
                {
                    answers += "null";
                }

                if (i < questions.Length - 1)
                {
                    answers += "-";
                }
            }

            Quiz updatedQuiz = _quizService.SetPlayerScore(id, playerId, correctAnswers);

            QuizPlayer quizPlayer = updatedQuiz.QuizPlayers
                                    .FirstOrDefault(qp => qp.PlayerId.Equals(playerId));

            await _hubContext.Clients.All.SendAsync("playerFinish", $"{quizPlayer.Player.Name}-{correctAnswers}");

            return(RedirectToAction(nameof(Room), new { id = id }));
        }