コード例 #1
0
        public async Task <IHttpActionResult> PostGamePlayer(GamePlayer gamePlayer)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.GamePlayers.Add(gamePlayer);
            await db.SaveChangesAsync();

            // New code:
            // Load author name
            db.Entry(gamePlayer).Reference(x => x.Team).Load();

            var dto = new GamePlayerDTO()
            {
                Id                   = gamePlayer.Id,
                FirstName            = gamePlayer.FirstName,
                LastName             = gamePlayer.LastName,
                IsCaptain            = gamePlayer.IsCaptain,
                IsStartingSubstitute = gamePlayer.IsStartingSubstitute,
                GameId               = gamePlayer.GameId,
                TeamName             = gamePlayer.Team.Name
            };

            return(CreatedAtRoute("DefaultApi", new { id = gamePlayer.Id }, gamePlayer));
        }
コード例 #2
0
        public GameDTO StartGame(Guid playerId)
        {
            using (var transaction = _dbContext.Database.BeginTransaction())
            {
                if (!_dbContext.Players.AsQueryable().Where(p => p.Id == playerId).Any())
                {
                    transaction.Rollback();
                    throw new NotFoundException("Player");
                }

                if (!_dbContext.Players.AsQueryable().Where(p => p.Id == _gameBot.Id).Any())
                {
                    _dbContext.Players.Add(new Player {
                        Id = _gameBot.Id, Name = _gameBot.Name, CreateTime = DateTime.UtcNow
                    });
                    _dbContext.SaveChanges();
                }

                var playerGames = _dbContext.Games
                                  .AsQueryable()
                                  .Include(g => g.GamePlayers)
                                  .Where(g => g.GamePlayers.Where(gp => gp.PlayerId == playerId).Any())
                                  .OrderByDescending(g => g.CreateTime)
                                  .Take(2)
                                  .ToList();

                var game       = new GameDTO();
                var gamePlayer = new GamePlayerDTO();
                var gameBot    = new GamePlayerDTO();

                gamePlayer.PlayerId = playerId;
                gamePlayer.GameId   = game.Id;

                gameBot.PlayerId = _gameBot.Id;
                gameBot.GameId   = game.Id;

                if (playerGames.Count() > 0)
                {
                    var lastGame = playerGames[0];
                    if (!lastGame.IsCompleted)
                    {
                        _dbContext.Games.Remove(lastGame);
                        if (playerGames.Count() > 1)
                        {
                            lastGame = playerGames[1];
                        }
                    }

                    var piece = lastGame.GamePlayers.Where(gp => gp.PlayerId == playerId).First().Piece;
                    Enum.TryParse(piece, out Pieces lastPiece);

                    if (lastPiece == Pieces.X)
                    {
                        gamePlayer.Piece = Pieces.O;
                        gameBot.Piece    = Pieces.X;
                        var movement = _gameBot.MakeMove(game.Movements);
                        game.Movements.Add(_gameBot.MakeMove(game.Movements));
                    }
                    else
                    {
                        gamePlayer.Piece = Pieces.X;
                        gameBot.Piece    = Pieces.O;
                    }
                }
                else
                {
                    gamePlayer.Piece = Pieces.X;
                    gameBot.Piece    = Pieces.O;
                }

                game.GamePlayers.Add(gamePlayer);
                game.GamePlayers.Add(gameBot);
                _dbContext.Games.Add(_mapper.Map <GameDTO, DAL.Entities.Game>(game));
                _dbContext.SaveChanges();
                transaction.Commit();
                return(game);
            }
        }
コード例 #3
0
 private async Task SubInStartingPlayer(Game _game, GamePlayerDTO player)
 {
     var _sub = new Substitution(Guid.NewGuid(), DateTime.Now, player.TeamB, player.Id, _game.Id, true);
     await _playsService.AddPlay(_sub);
 }