コード例 #1
0
        public ActionResult Index(HangmanViewModel model)
        {
            if (HttpContext.Session["HangmanData"] != null)
            {
                Word word = this.hangamnProvider.GetRandomWord(w => ((model.SelectedLanguageID == 0) || w.LanguageID == model.SelectedLanguageID) &&
                                                               ((model.SelectedLevelID == 0) || w.LevelID == model.SelectedLevelID) && ((model.SelectedCategoryID == 0) || w.CategoryID == model.SelectedCategoryID));

                HangmanViewModel hangmanModel = (HangmanViewModel)HttpContext.Session["HangmanData"];

                model.Languages  = hangmanModel.Languages;
                model.Levels     = hangmanModel.Levels;
                model.Categories = hangmanModel.Categories;

                if (word != null)
                {
                    model.HangmanResultID = hangmanModel.HangmanResultID;
                    model = this.LoadWordDetailsIntoModel(model, word);

                    HangmanResult result = new HangmanResult();
                    result.ResultID        = hangmanModel.HangmanResultID;
                    result.WordID          = word.WordID;
                    result.WrongAssumption = 0;
                    result.IsWinner        = false;

                    this.hangamnProvider.SaveResult(result);

                    HttpContext.Session["HangmanData"] = model;
                }
            }

            // If session is destroyed, redirect to index page.
            return(this.View(model));
        }
コード例 #2
0
        public HangmanResult Guess(string letter)
        {
            HangmanResult result = new HangmanResult();

            if (GameState == GameState.Lost || GameState == GameState.Won)
            {
                return(result);
            }

            result = IsAValidLetter(letter, result);
            result = IsAValidLength(letter, result);

            if (IncorrectGuesses.FirstOrDefault(x => x.Equals(letter.ToUpper())) != null)
            {
                _incorrectAllowedGuesses--;
                return(new DuplicateHangmanGuessResult());
            }

            result = IsACorrectGuess(letter, result);
            IsGameLost();

            _correctGuesses++;
            IsGameWon();

            return(result);
        }
コード例 #3
0
        private HangmanResult IsAValidLetter(string letter, HangmanResult result)
        {
            if (!Regex.IsMatch(letter, "[A-Za-z]"))
            {
                _incorrectAllowedGuesses--;
                result = new IncorrectHangmanResult();
            }

            return(result);
        }
コード例 #4
0
        private HangmanResult IsAValidLength(string letter, HangmanResult result)
        {
            if (letter.Length > 1)
            {
                _incorrectAllowedGuesses--;
                result = new IncorrectHangmanResult();
            }

            return(result);
        }
コード例 #5
0
        private HangmanResult IsACorrectGuess(string letter, HangmanResult result)
        {
            if (!_secretWord.Contains(letter.ToUpper()))
            {
                _incorrectAllowedGuesses--;
                IncorrectGuesses.Add(letter.ToUpper());
                result = new IncorrectHangmanResult();
            }

            return(result);
        }
コード例 #6
0
        public ActionResult Index()
        {
            string email = string.Empty;

            if (User.Identity.IsAuthenticated)
            {
                MembershipUser user = Membership.GetUser();
                email = user.Email;
            }
            else if (HttpContext.Session["Email"] != null)
            {
                email = HttpContext.Session["Email"].ToString();
            }
            else
            {
                return(this.RedirectToAction("Index", "Home", new { auth = false }));
            }

            HangmanViewModel hangmanModel = new HangmanViewModel();
            Word             word         = this.hangamnProvider.GetRandomWord();

            if (word == null)
            {
                return(this.RedirectToAction("Index", "Home"));
            }

            hangmanModel = this.GetAllFilters(hangmanModel);
            hangmanModel = this.LoadWordDetailsIntoModel(hangmanModel, word);

            HangmanResult result = new HangmanResult();

            result.WordID          = word.WordID;
            result.Email           = email;
            result.WrongAssumption = 0;
            result.IsWinner        = false;

            int resultID = this.hangamnProvider.SaveResult(result);

            if (resultID > 0)
            {
                hangmanModel.HangmanResultID       = resultID;
                HttpContext.Session["HangmanData"] = hangmanModel;

                return(this.View(hangmanModel));
            }

            return(this.RedirectToAction("Index"));
        }
コード例 #7
0
        public ActionResult CheckLetter(string letters, string word)
        {
            // If session is destroyed, redirect to index page.
            if (HttpContext.Session["HangmanData"] == null)
            {
                return(this.RedirectToAction("Index"));
            }

            HangmanViewModel hangmanModel = (HangmanViewModel)HttpContext.Session["HangmanData"];

            HttpContext.Session["HangmanData"] = null;

            // Check whether is entered the full word
            if (word != null)
            {
                char[] spellingEteredWord = word.ToLower().ToCharArray();
                hangmanModel = this.CheckEnteredWord(hangmanModel, spellingEteredWord);

                if (hangmanModel == null)
                {
                    return(this.RedirectToAction("Index"));
                }
            }
            else
            {
                hangmanModel = this.CheckWordContainsLetter(hangmanModel, letters[0]);
            }

            // Check for end of the game.
            if (hangmanModel.WordDetails.MissedLettersCount == 0 || hangmanModel.WordDetails.WrongLettersCount >= 5)
            {
                hangmanModel.WordDetails.SpellingWords = hangmanModel.WordDetails.WordName;

                HangmanResult result = new HangmanResult();
                result.ResultID        = hangmanModel.HangmanResultID;
                result.WrongAssumption = hangmanModel.WordDetails.WrongLettersCount;
                result.IsWinner        = hangmanModel.WordDetails.MissedLettersCount == 0 ? true : false;

                this.hangamnProvider.SaveResult(result);
            }
            else
            {
                HttpContext.Session["HangmanData"] = hangmanModel;
            }

            return(this.PartialView("Partial/Hangman", hangmanModel.WordDetails));
        }
コード例 #8
0
        public int SaveResult(HangmanResult result)
        {
            try
            {
                using (HangmanContext context = new HangmanContext())
                {
                    if (result.ResultID == 0)
                    {
                        result.PlayDate = DateTime.Now;

                        context.HangmanResults.Add(result);
                        context.SaveChanges();
                    }
                    else
                    {
                        HangmanResult updateResult = context.HangmanResults.FirstOrDefault(r => r.ResultID == result.ResultID);
                        updateResult.PlayDate        = DateTime.Now;
                        updateResult.WrongAssumption = result.WrongAssumption;
                        updateResult.IsWinner        = result.IsWinner;

                        if (result.WordID != 0)
                        {
                            updateResult.WordID = result.WordID;
                        }

                        context.SaveChanges();
                    }
                }

                return(result.ResultID);
            }
            catch (Exception ex)
            {
                string path = HttpContext.Current.Server.MapPath("~/Logs");
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }

                System.IO.File.AppendAllText(System.IO.Path.Combine(path, "Hangman.txt"), "Error: " + DateTime.Now.ToString() + " " + ex.ToString() + Environment.NewLine);

                return(0);
            }
        }