コード例 #1
0
 public RankingRowDTO(Game game)
 {
     Shots = game.Sequence;
     Time  = ShootTool.GetTimeString(game.Startdate, game.FinishDate);
     Date  = game.Startdate.ToShortDateString();
     Nick  = game.PlayerNick;
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }