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