/// <summary>
 /// Стандартный конструктор
 /// Standart constructor
 /// </summary>
 /// <param name="name">Имя змейки/Snake's name</param>
 /// <param name="cordinates">Кординаты тела змейки/Snake's body coordinates</param>
 /// <param name="isAlive">Жива ли змейка/Is snake alive</param>
 public Snake(string name, List <SnakeAttribute.Cordinates> cordinates, SnakeBase snake, SnakeStatistics snakeStatistics)
 {
     Name               = name;
     Cordinates         = cordinates;
     SnakeB             = snake;
     SnakeStatistics    = snake.Statistics;
     FoundFoodAfterStep = false;
 }
 public Snake(SnakeBase snake)
 {
     Name               = snake.SnakeName;
     Cordinates         = snake.SnakeBody;
     SnakeB             = snake;
     SnakeStatistics    = snake.Statistics;
     FoundFoodAfterStep = false;
 }
Exemplo n.º 3
0
        public void UpdateStatistics(SnakeBase snake)
        {
            if (!IsExistInTable(snake.SnakeName))
            {
                AddNewSnake(snake);
            }

            var curSt         = GetStatisticsBySnake(snake.SnakeName);
            var newStatistics = new SnakeStatisticsForTable();

            newStatistics.Name  = curSt.Name;
            newStatistics.Genes = (snake is SmartSnakeBase)
                ? (snake as SmartSnakeBase).GenesString
                : "null";
            newStatistics.StepsCount   = curSt.StepsCount + snake.Statistics.Steps;
            newStatistics.DeathCount   = curSt.DeathCount + (snake.IsAlive? 0 : 1);
            newStatistics.EatenFood    = curSt.EatenFood + snake.Statistics.EatenFood;
            newStatistics.StepsPerFood = (int)Math.Round(
                (double)(newStatistics.StepsCount / ((newStatistics.EatenFood != 0)? newStatistics.EatenFood : 1)));
            newStatistics.MaxSize     = (curSt.MaxSize > snake.Statistics.MaxSize)? curSt.MaxSize : snake.Statistics.MaxSize;
            newStatistics.PlayedGames = curSt.PlayedGames + 1;
            newStatistics.Mark        = (int)(Math.Round((decimal)(newStatistics.StepsPerFood / 10)));


            string sqlQuery = String.Format("UPDATE Snakes SET " +
                                            "name = '{0}'," +
                                            "genes = '{1}'," +
                                            "stepsCount = {2}," +
                                            "deathCount = {3}," +
                                            "stepsPerFood = {4}," +
                                            "maxSize = {5}," +
                                            "eatenFood = {6}," +
                                            "playedGames = {7}," +
                                            "mark = {8} " +
                                            "WHERE name = '{0}'",
                                            newStatistics.Name,
                                            newStatistics.Genes,
                                            newStatistics.StepsCount,
                                            newStatistics.DeathCount,
                                            newStatistics.StepsPerFood,
                                            newStatistics.MaxSize,
                                            newStatistics.EatenFood,
                                            newStatistics.PlayedGames,
                                            newStatistics.Mark);

            dbconn.Open();
            dbcmd             = dbconn.CreateCommand();
            dbcmd.CommandText = sqlQuery;
            dbcmd.ExecuteReader();
            dbcmd.Dispose();
            dbconn.Close();
        }
Exemplo n.º 4
0
        public void AddNewSnake(SnakeBase snake)
        {
            string genes = (snake as SmartSnakeBase == null)
                ? "'null'"
                : "'" + (snake as SmartSnakeBase).GenesString + "'";

            string sqlQuery = String.Format(
                "INSERT INTO Snakes" +
                "(name, genes, stepsCount, deathCount, stepsPerFood, maxSize, eatenFood, playedGames, mark)" +
                "VALUES" +
                "('{0}', {1}, 0, 0, 0, 0, 0, 0, 0);",
                snake.SnakeName, genes);

            dbconn.Open();
            dbcmd             = dbconn.CreateCommand();
            dbcmd.CommandText = sqlQuery;
            dbcmd.ExecuteReader();
            dbcmd.Dispose();
            dbconn.Close();
        }
Exemplo n.º 5
0
        /// <summary>
        /// Реакция змейки на объекты на новой кординате
        /// Snake's reaction to the objects with new coordinates
        /// </summary>
        /// <param name="cordinate">Новая кордината/New cooirdinate</param>
        /// <param name="snake">Змейка/Snake</param>
        /// <param name="map">Карта с объектами/Map with objects</param>
        private void ReactionToMapsObjectsOnNewPosition(SnakeAttribute.Cordinates cordinate, SnakeBase snake, PlayingMap map)
        {
            if (CollisionWithBarriers(cordinate, map) || CollisionWithSnakesBody(cordinate, map) ||
                CollisionWithSnakesHead(cordinate, map) || CollisionWithDeadSnakes(cordinate, map))
            {
                snake.IsAlive = false;
                return;
            }

            if (CollisionWithFood(cordinate, map))
            {
                snake.Statistics.EatenFood++;
                map.Food.FoodCordinates.RemoveAll(c => cordinate == c);
                snake.SnakeBody.Insert(0, cordinate);
                return;
            }

            // Если нет колизии с объектами на карте, передвигаем змейку
            //If there is no collision on map, move snake
            for (int i = snake.SnakeBody.Count - 1; i > 0; i--)
            {
                snake.SnakeBody[i] = snake.SnakeBody[i - 1];
            }
            snake.SnakeBody[0] = cordinate;
        }