Пример #1
0
        /// <summary>
        /// Sprawdza odpowiedź
        /// </summary>
        /// <param name="player">Gracz</param>
        /// <param name="questionId">Id pytania</param>
        /// <param name="answer">Odpowiedź gracza</param>
        /// <returns></returns>
        public async Task <EngineResult> PlayerAnswer(Player player, int questionId, bool answer)
        {
            EngineResult engineResult = new EngineResult();

            var targetedPlayer = PlayersList.FirstOrDefault(f => f.Name == player.Name);

            if (targetedPlayer == null)
            {
                engineResult.Succedeed    = false;
                engineResult.ErrorMessage = "Nie znaleziono takiego gracza! " + player.Name;
                return(engineResult);
            }

            engineResult.Player = targetedPlayer;

            var checkAnswer = await qDatabase.CheckAnswer(questionId, answer);

            if (checkAnswer == null)
            {
                engineResult.Succedeed    = false;
                engineResult.ErrorMessage = $"Pytanie o id {questionId} nie istnieje!";
                return(engineResult);
            }
            else if (checkAnswer.Value)
            {
                await board.MovePlayer(targetedPlayer, 3);

                engineResult.Succedeed = true;
                engineResult.Question  = new Question
                {
                    CorrectAnswer = true
                };
                return(engineResult);
            }
            else
            {
                await board.MovePlayer(targetedPlayer, -3);

                engineResult.Succedeed = true;
                engineResult.Question  = new Question
                {
                    CorrectAnswer = false
                };
                return(engineResult);
            }
        }
Пример #2
0
        /// <summary>
        /// Przemieszcza graczy po planszy i w zależności od tego na jakim polu gracz się znajdzie, podejmuje odpowiednie akcje
        /// </summary>
        /// <param name="player">Gracz</param>
        /// <param name="number">Liczba pól na planszy</param>
        /// <returns></returns>
        public async Task <EngineResult> Move(Player player, int number)
        {
            EngineResult engineResult = new EngineResult();

            if (PlayersList.Count > player.Id + 1)
            {
                NextTurnPlayerId = player.Id + 1;
            }
            else
            {
                NextTurnPlayerId = 0;
            }

            var targetedPlayer = PlayersList.FirstOrDefault(f => f.Name == player.Name);

            if (!gameRunning)
            {
                engineResult.Succedeed    = false;
                engineResult.ErrorMessage = "Gra nie jest uruchomiona!";
                return(engineResult);
            }
            else if (targetedPlayer == null)
            {
                engineResult.Succedeed    = false;
                engineResult.ErrorMessage = "Nie znaleziono takiego gracza! " + player.Name;
                return(engineResult);
            }

            MoveCounter++;

            if (targetedPlayer.ImprisonedTo > MoveCounter)
            {
                engineResult.Succedeed    = false;
                engineResult.Player       = targetedPlayer;
                engineResult.ErrorMessage = "Gracz " + targetedPlayer.Name + " jest w pułapce";
                return(engineResult);
            }

            engineResult.Player = targetedPlayer;

            var boardResult = await board.MovePlayer(targetedPlayer, number);

            engineResult.Field = boardResult;

            switch (boardResult)
            {
            case Field.Start:
                engineResult.Succedeed = true;
                break;

            case Field.Meta:
                engineResult.Succedeed = true;
                break;

            case Field.Question:
                engineResult.Succedeed = true;
                engineResult.Question  = await qDatabase.GetRandomQuestion();

                break;

            case Field.Penalty:
                await board.MovePlayer(targetedPlayer, -3);

                engineResult.Succedeed = true;
                break;

            case Field.Bonus:
                await board.MovePlayer(targetedPlayer, 3);

                engineResult.Succedeed = true;
                break;

            case Field.Trap:
                targetedPlayer.ImprisonedTo = MoveCounter + 3 * PlayersList.Count + 1;
                engineResult.Succedeed      = true;
                break;

            case Field.Normal:
                engineResult.Succedeed = true;
                break;
            }
            return(engineResult);
        }