Пример #1
0
 public GamePlayPage(IPlayer player, Level level)
 {
     InitializeComponent();
     viewModel   = new GamePlayViewModel(player, level);
     DataContext = viewModel;
     AddPanelsToList();
 }
Пример #2
0
        public void SetUp()
        {
            var gameEngine = new GameEngine(Substitute.For <ITileSetFactory>());

            gamePlayViewModel = new GamePlayViewModel(gameEngine);

            gamePlayViewModel.StartNewGameCommand.Execute(null);
        }
Пример #3
0
        /// <summary>
        /// Returns the Play view
        /// </summary>
        /// <returns>The play view</returns>
        public IActionResult Play()
        {
            var viewModel = new GamePlayViewModel()
            {
                GamePlay = this.getUserCurrentGamePlay().Result
            };

            return(View(viewModel));
        }
Пример #4
0
        protected override void OnClosing(CancelEventArgs e)
        {
            GamePlayViewModel data = GamePlayViewModel.getInstaince();

            data.gamePlay.gameState.stop();

            base.OnClosing(e);
            Application.Current.Shutdown();
        }
Пример #5
0
        public async Task <ActionResult> Play(string id)
        {
            if (id == null || id.Length != TechnicalConstants.GameIdLength)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }


            using (UnitOfWork unitOfWork = new UnitOfWork())
            {
                GameState gameState = await unitOfWork.GameRepository.GetGameStateAsync(id);

                if (gameState == GameState.Undefined)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }

                switch (gameState)
                {
                case GameState.Playing:
                    GamePlayViewModel gamePlayVM = await unitOfWork.GameQuestionsRepository.GetGamePlayVMAsync(id);

                    return(View("Play", gamePlayVM));

                case GameState.LastQuestionAnswered:
                    GuessViewModel firstGuessVM = await unitOfWork.GameRepository.GetGuessVMAsync(id);

                    return(View("FirstGuessFeedback", firstGuessVM));

                case GameState.FirstGuessMarkedCorrect:
                case GameState.SelectedFromTopGuessesList:
                case GameState.EnteredWhoItWas:
                    GuessViewModel guessVM = await unitOfWork.GameRepository.GetGuessVMAsync(id);

                    return(View("CorrectGuess", guessVM));

                case GameState.FirstGuessMarkedIncorrect:
                    TopGuessesViewModel topGuessesVM = await unitOfWork.GameEntityRepository.GetTopGuessesVMAsync(id);

                    return(View("TopGuesses", topGuessesVM));

                case GameState.MustEnterWhoItWas:
                    SubmitNewEntityViewModel newEntitySubmissionVM = new SubmitNewEntityViewModel
                    {
                        AccessID        = id,
                        SubmittedEntity = new Entity()
                    };
                    return(View("SubmitNewEntity", newEntitySubmissionVM));

                default:
                    return(null);
                }
            }
        }
Пример #6
0
 public void Execute(object parameter)
 {
     if (parameter.ToString() == "gamePlay")
     {
         Debug.WriteLine("View update to gameplay view command fired");
         GamePlayViewModel.getInstaince().gamePlay.gameState.play();
         this.viewModel.selectedViewModel = GamePlayViewModel.getInstaince();
     }
     else if (parameter.ToString() == "mainMenue")
     {
         Debug.WriteLine("View update to main menue view command fired");
         this.viewModel.selectedViewModel = MainMenueViewModel.getInstaince();
     }
     else if (parameter.ToString() == "controls")
     {
         Debug.WriteLine("View update to controls menue view command fired");
         this.viewModel.selectedViewModel = ControlsViewModel.getInstaince();
     }
 }
Пример #7
0
        public async Task <JsonResult> NextQuestion(string gameAccessId)
        {
            try
            {
                using (UnitOfWork unitOfWork = new UnitOfWork())
                {
                    GamePlayViewModel gamePlayVM = await unitOfWork.GameQuestionsRepository.GetGamePlayVMAsync(gameAccessId);

                    return(Json(
                               AjaxActionResult.List(
                                   this.RenderPartialView("~/Views/Game/PlayPartial/_AnsweredQuestionsPartial.cshtml", gamePlayVM.AnsweredQuestions),
                                   gamePlayVM.CurrentQuestion.QuestionBody,
                                   gamePlayVM.AnsweredQuestions.Count + 1,
                                   gamePlayVM.IsLastQuestion)));
                }
            }
            catch (Exception ex)
            {
                return(Json(AjaxActionResult.Fail(-1, "Error processing request!" + System.Environment.NewLine + ex.Message)));
            }
        }
Пример #8
0
 public GameLogic(GamePlayViewModel user)
 {
     _user         = user;
     _computer     = new Computer(this);
     _playingField = new List <List <string> >();
     _playingField.Add(new List <string> {
         "null", "null", "null"
     });
     _playingField.Add(new List <string> {
         "null", "null", "null"
     });
     _playingField.Add(new List <string> {
         "null", "null", "null"
     });
     _currentSymbol = "X";
     WhoIsWho();
     _computer.Symbol = ComputerSymbol;
     if (ComputerSymbol == "X")
     {
         StartAsync();
     }
 }
Пример #9
0
        public GameplayView()
        {
            InitializeComponent();

            data = GamePlayViewModel.getInstaince();

            for (int i = 0; i < 20; i++)
            {
                RadarGrid.RowDefinitions.Add(new RowDefinition());
                RadarGrid.ColumnDefinitions.Add(new ColumnDefinition());
                Button button = new Button();
                button.SetValue(Grid.RowProperty, i);
                button.SetValue(Grid.ColumnProperty, i);
            }

            for (int j = 0; j < 20; j++)
            {
                TextBlock txtBox = new TextBlock();
                txtBox.Text       = j.ToString();
                txtBox.Foreground = Brushes.WhiteSmoke;
                Grid.SetColumn(txtBox, 0);
                Grid.SetRow(txtBox, j);

                RadarGrid.Children.Add(txtBox);
            }

            for (int j = 1; j < 20; j++)
            {
                TextBlock txtBox = new TextBlock();
                txtBox.Text       = j.ToString();
                txtBox.Foreground = Brushes.WhiteSmoke;
                Grid.SetColumn(txtBox, j);
                Grid.SetRow(txtBox, 20);

                RadarGrid.Children.Add(txtBox);
            }
        }
Пример #10
0
 public GamePage()
 {
     InitializeComponent();
     BindingContext = new  GamePlayViewModel();
 }
Пример #11
0
        public async Task <GamePlayViewModel> GetGamePlayVMAsync(string gameAccessId)
        {
            Game game = await this.unitOfWork.GameRepository.GetGameFromAccessIdAsync(gameAccessId);

            GameQuestion lastAskedQuestion = await this.dbSet
                                             .Where(g => g.Game.IDGame == game.IDGame)
                                             .Where(g => g.QuestionIndex == this.dbSet.Where(t => t.Game.IDGame == game.IDGame).Max(t => t.QuestionIndex))
                                             .Include(g => g.Question)
                                             .FirstOrDefaultAsync();

            GamePlayViewModel gamePlayVM = new GamePlayViewModel();

            gamePlayVM.AccessID          = gameAccessId;
            gamePlayVM.AnsweredQuestions = await this.GetAnsweredQuestionsAsync(game.IDGame);

            if (gamePlayVM.AnsweredQuestions == null)
            {
                gamePlayVM.AnsweredQuestions = new List <GameQuestion>();
            }

            if (lastAskedQuestion != null && lastAskedQuestion.GivenAnswer == AnswerType.Undefined)
            {
                gamePlayVM.CurrentQuestion = lastAskedQuestion.Question;
                return(gamePlayVM);
            }

            if ((lastAskedQuestion != null && lastAskedQuestion.QuestionIndex < GamePlayConstants.MaxQuestionsUntilFirstGuess && !lastAskedQuestion.IsLastQuestion) ||
                lastAskedQuestion == null)
            {
                Entity topEntity = await this.FulfillsShortcutConditions(game.IDGame, gamePlayVM.AnsweredQuestions.Count);

                gamePlayVM.IsLastQuestion = (topEntity != null && (await this.CanEarlyGuess(game.IDGame)));

                if (topEntity != null)
                {
                    gamePlayVM.CurrentQuestion = await this.GetShortcutQuestion(topEntity.IDEntity, game.IDGame);
                }
                else
                {
                    Question[] potentialNext = new Question[TechnicalConstants.PickAmongstNumber];

                    int topCandidatesCount = await this.dbContext.Database.SqlQuery <int>(
                        @"
												select 
													count(*) 
												from 
													GameEntities 
												where 
													Game_IDGame = {0} and
													Fitness = 
													(
														select 
															max(Fitness) 
														from
															GameEntities
														where 
															Game_IDGame = {0}
													)"                                                    , game.IDGame).FirstOrDefaultAsync();

                    if (topCandidatesCount > 1)
                    {
                        potentialNext = await GetBinarySplitQuestion(game.IDGame, topCandidatesCount);
                    }
                    else
                    {
                        potentialNext = await GetTopEnforcementQuestion(game.IDGame);
                    }


                    if (potentialNext == null || potentialNext.Length == 0)
                    {
                        // TODO: pick a random question or something
                        gamePlayVM.CurrentQuestion = null;
                    }
                    else
                    {
                        gamePlayVM.CurrentQuestion = potentialNext[r.Next(potentialNext.Length)];
                    }
                }

                // update asked stats for current question
                await this.dbContext.Database.ExecuteSqlCommandAsync(
                    @"
												update 
														Questions 
												set
														FirstAsked =	case when FirstAsked is null
																			then GETDATE()
																			else FirstAsked
																		end,

														LastAsked = GETDATE(),
														TimesAsked = TimesAsked + 1
												where
														IDQuestion = {0}"                                                        , gamePlayVM.CurrentQuestion.IDQuestion);

                gamePlayVM.IsLastQuestion |= gamePlayVM.AnsweredQuestions.Count + 1 == GamePlayConstants.MaxQuestionsUntilFirstGuess;

                await this.dbContext.Database.ExecuteSqlCommandAsync(
                    @"	insert into GameQuestions (
										QuestionIndex,	GivenAnswer,	Game_IDGame,	Question_IDQuestion,	IsLastQuestion)
									values (
										{0},			{1},			{2},			{3},					{4})"                                                                                ,
                    gamePlayVM.AnsweredQuestions.Count + 1, (int)AnswerType.Undefined, game.IDGame, gamePlayVM.CurrentQuestion.IDQuestion, gamePlayVM.IsLastQuestion);

                return(gamePlayVM);
            }

            // If we get here, we tried to answer a non-existing question or one that was already answered.
            // This should never happen through the interface, so the user must be trying to cheat. Therefore,
            // we can just return null and let them get errors.

            return(null);
        }