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)); }