private void ChechForWinner(MakeGuessModel guess, Game game, ApplicationUser user) { if (user.Id == game.RedId && guess.Number == game.BlueNumber) { game.GameState = GameState.Finished; this.SendWinnerNotification(user, game); } if (user.Id == game.BlueId && guess.Number == game.RedNumber) { game.GameState = GameState.Finished; this.SendWinnerNotification(user, game); } }
public IHttpActionResult Create(int id, MakeGuessModel guess) { if (!this.ModelState.IsValid) { return this.BadRequest(this.ModelState); } var game = this.BullsAndCowsData.Games.All().FirstOrDefault(g => g.Id == id); if (game == null) { return this.NotFound(); } if (game.GameState == GameState.Finished) { return this.BadRequest(GameClosed); } if (game.GameState == GameState.WaitingForOpponent) { return this.BadRequest(YouCannotMakeGuessesInAGameThatYouReNotPartOf); } var userId = this.User.Identity.GetUserId(); var user = this.BullsAndCowsData.Users.All().First(u => u.Id == userId); if (this.CheckIfAValidPlayer(game, user)) { return this.BadRequest(YouCannotMakeGuessesInAGameThatYouReNotPartOf); } if (this.CheckTurn(game, user)) { return this.BadRequest(ItsNotYourTurn); } var resultGuess = this.BuildGuess(guess, game, user); this.ChechForWinner(guess, game, user); return this.Ok(new GuessModel(resultGuess, user)); }
private Guess BuildGuess(MakeGuessModel guess, Game game, ApplicationUser user) { var bullCount = 0; var cowCount = 0; if (user == game.Red) { GameManager.CountBullsAndCows(guess.Number, game.BlueNumber, out bullCount, out cowCount); } if (user == game.Blue) { GameManager.CountBullsAndCows(guess.Number, game.RedNumber, out bullCount, out cowCount); } var newGuess = new Guess { DateMade = DateTime.Now, Number = guess.Number, BullsCount = bullCount, CowsCount = cowCount, User = user, Game = game, }; if (user == game.Red) { this.BullsAndCowsData.Games.All().First().RedGuesses.Add(newGuess); game.GameState = GameState.BlueInTurn; } if (user == game.Blue) { this.BullsAndCowsData.Games.All().First().BlueGuesses.Add(newGuess); game.GameState = GameState.RedInTurn; } this.SendNotification(user, game); this.BullsAndCowsData.SaveChanges(); return newGuess; }
public IHttpActionResult JoinGame(int id, MakeGuessModel joiner) { if (!this.ModelState.IsValid) { return this.BadRequest(this.ModelState); } var game = this.BullsAndCowsData.Games.All().FirstOrDefault(g => g.Id == id); if (game == null) { return this.NotFound(); } if (game.GameState == GameState.Finished) { return this.BadRequest(FinishedGame); } if (game.GameState != GameState.WaitingForOpponent) { return this.BadRequest(YouCannotJoinOngoingGame); } var userId = this.User.Identity.GetUserId(); var user = this.BullsAndCowsData.Users.All().FirstOrDefault(u => u.Id == userId); if (game.Red == user) { return this.BadRequest(YouCannotJoinTheSameGameTwice); } game.Blue = user; game.GameState = GameManager.GetPlayerInTurn(); game.BlueNumber = joiner.Number; this.BullsAndCowsData.Games.Update(game); this.BullsAndCowsData.SaveChanges(); var result = new { result = YouJoinedGame + game.Name }; this.CreateNotificationForTurn(game); this.CreateNotification(user, game); return this.Ok(result); }