示例#1
0
        /// <summary>
        /// Pulls the next random playing card.
        /// </summary>
        /// <param name="gamePlayId">The game play identifier.</param>
        /// <returns>Finds and returns the next available playing card.</returns>
        public PlayingCard PullNextRandomPlayingCard(int gamePlayId)
        {
            PlayingCard nextPlayingCard = null;
            var         shownCards      = this.data.GamePlays.Get(new QueryOptions <GamePlay>()
            {
                Includes = "Turns.Turn",
                Where    = p => p.GamePlayId == gamePlayId
            }).Turns;

            while (nextPlayingCard == null)
            {
                var randomPlayingCardId = getRandomPlayingCardId();
                if (!shownCards.Any(p => p.Turn.ShowingCardId == randomPlayingCardId || p.Turn.FlippedCardId == randomPlayingCardId))
                {
                    nextPlayingCard = this.data.PlayingCards.Get(randomPlayingCardId);
                }
            }

            return(nextPlayingCard);
        }
示例#2
0
        private Turn getNextTurnBasedOnGuess(PlayingCard showingCard, PlayingCard flippedCard, int gamePlayId, bool guessedHigher)
        {
            Turn nextTurn = null;
            var  hasGuessedHigherRight = flippedCard.Value > showingCard.Value && guessedHigher;
            var  hasGuessedLowerRight  = flippedCard.Value < showingCard.Value && !guessedHigher;
            var  hasGuessedLowerWrong  = flippedCard.Value >= showingCard.Value && !guessedHigher;
            var  hasGuessedHigherWrong = flippedCard.Value <= showingCard.Value && guessedHigher;

            if (hasGuessedHigherRight || hasGuessedLowerRight)
            {
                nextTurn = new Turn()
                {
                    Order = this.data.GamePlays.Get(new QueryOptions <GamePlay>()
                    {
                        Includes = "Turns.Turn", Where = p => p.GamePlayId == gamePlayId
                    }).Turns.Count + 1,
                    ShowingCardId = showingCard.PlayingCardId,
                    FlippedCardId = flippedCard.PlayingCardId,
                    ActionTypeId  = (int)GameActionType.Continue,
                    GuessTypeId   = guessedHigher ? (int)GameGuessType.Higher : (int)GameGuessType.Lower
                };
            }
            else if (hasGuessedLowerWrong || hasGuessedHigherWrong)
            {
                nextTurn = new Turn()
                {
                    Order = this.data.GamePlays.Get(new QueryOptions <GamePlay>()
                    {
                        Includes = "Turns.Turn", Where = p => p.GamePlayId == gamePlayId
                    }).Turns.Count + 1,
                    ShowingCardId = showingCard.PlayingCardId,
                    FlippedCardId = flippedCard.PlayingCardId,
                    ActionTypeId  = (int)GameActionType.GameOver,
                    GuessTypeId   = guessedHigher ? (int)GameGuessType.Higher : (int)GameGuessType.Lower
                };
            }

            return(nextTurn);
        }
示例#3
0
        private void handleGuessWithFlippedCard(int gamePlayId, int showingCardId, bool guessedHigher, PlayingCard flippedCard)
        {
            var showingCard = this.data.PlayingCards.Get(showingCardId);

            var nextTurn = guessedHigher
                                                 ? this.getNextTurnBasedOnGuess(showingCard, flippedCard, gamePlayId, true)
                                                 : this.getNextTurnBasedOnGuess(showingCard, flippedCard, gamePlayId, false);

            this.data.Turns.Insert(nextTurn);
            this.data.Save();

            this.saveGamePlayTurn(gamePlayId, nextTurn.TurnId);
        }