コード例 #1
0
        public ActionResult Puzzle(Guid puzzleId, string answer)
        {
            var puzzle = puzzleService.GetById(puzzleId);

            if (puzzle == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "找不到 puzzle"));
            }

            var teamId = new Guid(((ClaimsPrincipal)User).FindFirst("TeamId").Value ?? Guid.Empty.ToString());
            var team   = teamService.GetByIdIncludeAll(teamId);

            if (!answer.IsNullOrWhiteSpace() && answer.ToUpper().Trim() == puzzle.Answer.ToUpper().Trim())
            {
                // 設定前往下一關
                var nextPuzzleId = puzzleService.SetNextPuzzle(puzzleId, teamId);
                if (nextPuzzleId == Guid.Empty)
                {
                    // 代表已通此關,前往下一關
                    return(RedirectToAction("Complete", "Tour", new { teamId }));
                }

                this.SetAlert("答案正確!");
                return(RedirectToAction("PuzzleMap", "Tour", new { puzzleId = nextPuzzleId }));
            }

            // 判斷是否已經通過地圖
            var record = team.TeamRecords.OrderByDescending(x => x.Sort).First(x => x.TourPuzzle.PuzzleId == puzzle.Id);

            if (!record.IsPassPuzzleMap)
            {
                return(RedirectToAction("PuzzleMap", "Tour", new { puzzleId = record.TourPuzzle.PuzzleId }));
            }

            // 設定提示
            ViewBag.hints         = puzzle.Hints.ToArray();
            ViewBag.puzzleEndTime = record.PuzzleStartTime.AddMinutes(30);
            ViewBag.endTime       = team.EndTime ?? DateTime.Now.AddHours(2);

            this.SetAlert("答案錯誤,請再試一次!");
            return(View(puzzle));
        }