public string StartGame(List <int> shipArray) { var game = _database.Games.Add(new Game()); List <int> aiShips = LocateShipTool.GetRandomShips(); List <Tile> tiles = new List <Tile>(); //add player ship tiles to database foreach (var index in shipArray) { tiles.Add(new Tile { Number = index, Type = TileType.ship, GameId = game.Id, Owner = ShotAt.playerTile }); } //add AI ship tiles to database foreach (var index in aiShips) { tiles.Add(new Tile { Number = index, Type = TileType.ship, GameId = game.Id, Owner = ShotAt.aiTile }); } _database.Tiles.AddRange(tiles); _database.SaveChanges(); return(Newtonsoft.Json.JsonConvert.SerializeObject(game.Id)); }
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 GetRandomShips() { var drawnIndexList = LocateShipTool.GetRandomShips(); return(Newtonsoft.Json.JsonConvert.SerializeObject(drawnIndexList)); }