public RankingRowDTO(Game game) { Shots = game.Sequence; Time = ShootTool.GetTimeString(game.Startdate, game.FinishDate); Date = game.Startdate.ToShortDateString(); Nick = game.PlayerNick; }
public string AIShot(int gameNumber) { List <GameEventDTO> gameEventDTOList = new List <GameEventDTO>(); var game = _database.Games.FirstOrDefault(g => g.Id == gameNumber); if (game != null) { var tiles = game.PlayerTiles.Select(t => t.Key).ToList(); Random random = new Random(Guid.NewGuid().GetHashCode()); List <int> availableTiles = new List <int>(); do { availableTiles = game.PlayerTiles .Where(t => t.Value.Type == TileType.water || t.Value.Type == TileType.ship) .Select(t => t.Key) .ToList(); if (availableTiles.Count > 0) { //If there are shot player tiles make only opposite tiles avaible if (game.PlayerTiles.Any(t => t.Value.Type == TileType.shot)) { foreach (var playerTile in game.PlayerTiles.Where(p => p.Value.Type == TileType.shot)) { var index = playerTile.Key; availableTiles = new List <int>(); var avaibleTilesDictionary = LocateShipTool.AreOppositeTilesAvailable(tiles, index); foreach (var availableTile in avaibleTilesDictionary) { if (availableTile.Value && (game.PlayerTiles[availableTile.Key].Type == TileType.ship || game.PlayerTiles[availableTile.Key].Type == TileType.water)) { availableTiles.Add(availableTile.Key); } } if (availableTiles.Count > 0) { break; } } } var randomIndex = random.Next(0, availableTiles.Count - 1); ShootTool.TryShot(_database, game, availableTiles[randomIndex], ShotAt.playerTile, gameEventDTOList); } } while (gameEventDTOList[gameEventDTOList.Count - 1].Tile != TileType.missed && game.PlayerTiles.Any(t => t.Value.Type == TileType.ship)); _database.SaveChanges(); } return(Newtonsoft.Json.JsonConvert.SerializeObject(gameEventDTOList)); }
public string Shoot(int gameNumber, int index) { var game = _database.Games.FirstOrDefault(g => g.Id == gameNumber); List <GameEventDTO> gameEventDTOList = new List <GameEventDTO>(); if (game != null && (game.AITiles[index].Type == TileType.water || game.AITiles[index].Type == TileType.ship)) { game.Sequence++; ShootTool.TryShot(_database, game, index, ShotAt.aiTile, gameEventDTOList); _database.Entry(game).State = EntityState.Modified; _database.SaveChanges(); } return(Newtonsoft.Json.JsonConvert.SerializeObject(gameEventDTOList)); }
public string ShootRandomly(int gameNumber) { var game = _database.Games.FirstOrDefault(g => g.Id == gameNumber); List <GameEventDTO> gameEventDTOList = new List <GameEventDTO>(); if (game != null) { game.Sequence++; var availableTiles = game.AITiles.Where(t => t.Value.Type == TileType.water || t.Value.Type == TileType.ship).Select(t => t.Key).ToList(); if (availableTiles.Count > 0) { Random random = new Random(Guid.NewGuid().GetHashCode()); var randomIndex = random.Next(0, availableTiles.Count - 1); ShootTool.TryShot(_database, game, availableTiles[randomIndex], ShotAt.aiTile, gameEventDTOList); _database.Entry(game).State = EntityState.Modified; _database.SaveChanges(); } } return(Newtonsoft.Json.JsonConvert.SerializeObject(gameEventDTOList)); }